
클래스가 일을 실행할 때에는 자신의 클래스나 다른 클래스의 메서드를 호출한다. 메서드를 호출한 결과는 객체의 상태에 반영되지만, 일의 이력은 어디에도 남지 않는다. 이 때 ‘이 일을 실행하시오' 라는 ‘명령'을 표현하는 클래스가 있으면 편리하다. 실행하고 싶은 일을 ‘메서드를 호출'하는 동적인 처리로 표현하는 것이 아닌, 명령을 나타내는 클래스의 인스턴스로 하나의 ‘물건'처럼 표현할 수 있기 때문이다. 이력을 관리하고 싶을 때에는 그 인스턴스의 집합을 관리하면 된다. 명령의 집합을 저장해 두면 같은 명령을 재실행할 수도 있고, 복수의 명령을 모아 새로운 명령으로 재이용할 수도 있다. Command는 Event(사건)라고도 부른다. ‘이벤트 구동 프로그래밍'에서 사용되는 ‘이벤트'와 같은 의미다. 마우스를..

‘대리인'이란 의미로, 일을 해야 할 본인을 대신(대리)하는 사람을 뜻한다. 본인이 아니라도 가능한 일을 맡기기 위해서 대리인을 세운다. 대리인은 어디까지나 대리에 지나지 않기 때문에 할 수 있는 일에는 한계가 있다. 대리인이 할 수 있는 범위를 넘는 일이 발생하면, 대리인은 본인한테 와서 상담을 한다. 객체지향에서는 ‘본인', ‘대리인' 모두 객체가 된다. 즉, 바빠서 일을 할 수 없는 본인 객체 대신에 대리인 객체가 어느 정도 일을 처리하게 된다. 다음 링크는 프록시 패턴의 예제 코드다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Jav..

‘플라이급'이란 의미로, 권투에서 가장 체중이 가벼운 체급을 나타낸다. 이 디자인 패턴은 객체를 ‘가볍게' 하기 위한 것이다. 여기서 말하는 무게는 ‘메모리의 사용량'을 의미한다. 많은 메모리를 사용하는 객체를 ‘무겁다'고 표현한다. Java에서는 new Something() 처럼, Something 클래스의 인스턴스를 만들 수 있다. 이 때, 그 인스턴스를 저장하기 위해서 메모리가 확보된다. Something 클래스의 인스턴스가 많이 필요할 때에, new를 많이 하면 메모리의 사용량이 커지게 된다. 플라이웨이트 패턴에서 사용하는 기법을 간단하게 표현하면 다음과 같다. 🐻 인스턴스를 가능한 대로 공유시켜서 쓸데없이 new하지 않도록 한다. 인스턴스가 필요할 때 항상 new하는 것이 아니라, 이미 만들어져..

객체 지향 프로그래밍에서는 프로그램 할 대상을 ‘클래스’로 표현한다. 당연하게도 어떤 것을 클래스로 표현할지는 설계자가 생각해야 한다. 클래스에 대응하는 구체적인 ‘사물'이 현실에서 존재할수도 존재하지 않을수도 있다. 경우에 따라서는 ‘이런 것이 클래스가 될 수 있나?’라고 놀랄 정도의 것을 클래스로 하는 경우도 있다. 현실세계에서 우리는 다양한 사물의 ‘상태'에 대해서 생각한다. 그러나 상태를 ‘사물’로 생각할 일이 없기 때문에, 상태를 클래스로 표현한다는 것도 쉽게 이해가 안 될 수 있다. 이번 포스팅에서는 ‘상태'를 클래스로 표현하는 방법에 대해 다룬다. 상태를 클래스로 표현하면 클래스를 교체해서 ‘상태의 변화'를 표현할 수 있고, 새로운 상태를 추가해야 될 때 무엇을 프로그램하면 좋을지 분명해진다..

상속은 코드를 재사용하는 강력한 수단이지만, 항상 최선은 아닙니다. 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게 됩니다. 상위 클래스와 하위 클래스를 모두 같은 프로그래머가 통제하는 패키지 안에서라면 상속도 안전합니다. 확장할 목적으로 설계되었고 문서화도 잘된 클래스(아이템 19)도 마찬가지로 안전합니다. 하지만 일반적인 구체 클래스를 패키지 경계를 넘어, 다른 패키지의 구체 클래스를 상속하는 일은 위험합니다. 상기하자면, 이 책에서의 '상속'은 (클래스가 다른 클래스를 확장하는) 구현 상속을 의미합니다. 💡 이번 아이템에서 논하는 문제는 (클래스가 인터페이스를 구현하거나 인터페이스가 다른 인터페이스를 확장하는) 인터페이스 상속과는 무관합니다. 메서드 호출과 달리 상속은 캡슐화를 깨뜨립니다. 다르..

observer는 관찰하는 사람, 즉 ‘관찰자’라는 의미다. 옵저버 패턴에서는 관찰 대상의 상태가 변화하면 관찰자에게 알려준다. 옵저버 패턴은 상태 변화에 따른 처리를 기술할 때 효과적이다. 다음 링크는 옵저버 패턴의 예제 코드다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Java-Design-Pattern development by creating an account on GitHub. github.com 옵저버 패턴의 등장인물 Subject(관찰 대상자)의 역할 - NumberGenerator ‘관찰되는 대상'을 나타낸다. Subjec..

프로그램이라는 것은 점점 커지는 영향이 있다. 많은 클래스가 만들어져 서로 관계를 맺으면서 복잡하게 된다. 클래스를 사용할 경우에는 클래스 간의 관계를 정확히 이해하고 정확한 순서대로 메서드를 호출할 필요가 있다. 커다란 프로그램을 사용해서 처리를 실행하려면 상호 관련된 많은 클래스를 적절하게 제어해야 한다. 그렇다면 그 처리를 실행하기 위한 ‘창구'를 준비해 두는 것이 좋다. 그렇게 하면 많은 클래스를 개별적으로 제어하지 않아도 그 ‘창구'에 대해서만 요구하면 역할이 끝나기 때문이다. 이러한 ‘창구’가 바로 파사드 패턴이다. 파사드는 ‘건물의 정면'이라는 의미를 가지는데, 파사드 패턴은 복잡하게 얽혀 있는 것을 정리해서 높은 레벨의 인터페이스(API)를 제공한다. 파사드 역할은 시스템의 외부에 대해서는..

책임 떠넘기기라는 단어는 부정적인 의미가 강하지만 꼭 필요한 경우도 있다. 어떤 요청이 발생했을 때 그 요청을 처리할 객체를 직접 결정할 수 없는 경우, 복수의 객체를 사슬(chain)처럼 연결해 두면, 그 객체의 사슬을 차례로 돌아다니면서 목적한 객체를 결정하는 방법을 생각할 수 있다. 이 패턴을 사용하면 ‘요청하는 쪽'과 ‘처리하는 쪽'의 연결을 유연하게 해서 각 객체를 부품으로 독립시킬 수 있다. 상황에 따라서 요청을 처리할 객체가 변하는 프로그램에도 대응할 수 있다. 다음 링크는 책임 떠넘기기 패턴의 예제 코드다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contrib..
- Total
- Today
- Yesterday
- 백준
- 객체지향
- MSA
- Java
- 이펙티브 자바
- Spring Boot
- 알고리즘
- 디자인 패턴
- 정규표현식
- 이팩티브 자바
- kkoon9
- 프로그래머스
- 디자인패턴
- BAEKJOON
- Olympiad
- AWS
- JPA
- 코테
- programmers
- Algorithm
- BOJ
- 테라폼
- 클린 코드
- Spring
- Effective Java
- node.js
- kotest
- C++
- Kotlin
- 클린 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |