클래스가 일을 실행할 때에는 자신의 클래스나 다른 클래스의 메서드를 호출한다. 메서드를 호출한 결과는 객체의 상태에 반영되지만, 일의 이력은 어디에도 남지 않는다. 이 때 ‘이 일을 실행하시오' 라는 ‘명령'을 표현하는 클래스가 있으면 편리하다. 실행하고 싶은 일을 ‘메서드를 호출'하는 동적인 처리로 표현하는 것이 아닌, 명령을 나타내는 클래스의 인스턴스로 하나의 ‘물건'처럼 표현할 수 있기 때문이다. 이력을 관리하고 싶을 때에는 그 인스턴스의 집합을 관리하면 된다. 명령의 집합을 저장해 두면 같은 명령을 재실행할 수도 있고, 복수의 명령을 모아 새로운 명령으로 재이용할 수도 있다. Command는 Event(사건)라고도 부른다. ‘이벤트 구동 프로그래밍'에서 사용되는 ‘이벤트'와 같은 의미다. 마우스를..
‘대리인'이란 의미로, 일을 해야 할 본인을 대신(대리)하는 사람을 뜻한다. 본인이 아니라도 가능한 일을 맡기기 위해서 대리인을 세운다. 대리인은 어디까지나 대리에 지나지 않기 때문에 할 수 있는 일에는 한계가 있다. 대리인이 할 수 있는 범위를 넘는 일이 발생하면, 대리인은 본인한테 와서 상담을 한다. 객체지향에서는 ‘본인', ‘대리인' 모두 객체가 된다. 즉, 바빠서 일을 할 수 없는 본인 객체 대신에 대리인 객체가 어느 정도 일을 처리하게 된다. 다음 링크는 프록시 패턴의 예제 코드다. GitHub - kkoon9/Java-Design-Pattern: Java 언어로 배우는 디자인 패턴 입문 예제 코드 Java 언어로 배우는 디자인 패턴 입문 예제 코드. Contribute to kkoon9/Jav..
‘플라이급'이란 의미로, 권투에서 가장 체중이 가벼운 체급을 나타낸다. 이 디자인 패턴은 객체를 ‘가볍게' 하기 위한 것이다. 여기서 말하는 무게는 ‘메모리의 사용량'을 의미한다. 많은 메모리를 사용하는 객체를 ‘무겁다'고 표현한다. Java에서는 new Something() 처럼, Something 클래스의 인스턴스를 만들 수 있다. 이 때, 그 인스턴스를 저장하기 위해서 메모리가 확보된다. Something 클래스의 인스턴스가 많이 필요할 때에, new를 많이 하면 메모리의 사용량이 커지게 된다. 플라이웨이트 패턴에서 사용하는 기법을 간단하게 표현하면 다음과 같다. 🐻 인스턴스를 가능한 대로 공유시켜서 쓸데없이 new하지 않도록 한다. 인스턴스가 필요할 때 항상 new하는 것이 아니라, 이미 만들어져..
객체 지향 프로그래밍에서는 프로그램 할 대상을 ‘클래스’로 표현한다. 당연하게도 어떤 것을 클래스로 표현할지는 설계자가 생각해야 한다. 클래스에 대응하는 구체적인 ‘사물'이 현실에서 존재할수도 존재하지 않을수도 있다. 경우에 따라서는 ‘이런 것이 클래스가 될 수 있나?’라고 놀랄 정도의 것을 클래스로 하는 경우도 있다. 현실세계에서 우리는 다양한 사물의 ‘상태'에 대해서 생각한다. 그러나 상태를 ‘사물’로 생각할 일이 없기 때문에, 상태를 클래스로 표현한다는 것도 쉽게 이해가 안 될 수 있다. 이번 포스팅에서는 ‘상태'를 클래스로 표현하는 방법에 대해 다룬다. 상태를 클래스로 표현하면 클래스를 교체해서 ‘상태의 변화'를 표현할 수 있고, 새로운 상태를 추가해야 될 때 무엇을 프로그램하면 좋을지 분명해진다..
되돌리기 기능인 undo를 생각해보자. 객체 지향의 프로그램에서 undo 기능을 실행하려면 인스턴스가 가지고 있는 정보를 저장해 둘 필요가 있다. 단, 저장만 해서는 쓸모가 없고 저장한 정보로부터 인스턴스를 원래의 상태로 되돌려야 한다. 인스턴스를 복원하려면 인스턴스 내부의 정보를 자유롭게 액세스할 수 있어야 한다. 하지만 원하지 않는 액세스를 허용하면 클래스 내부 구조에 의존한 코드가 프로그램의 여기저기로 흩어질 수 있어 클래스의 수정을 어렵게 한다. 메멘토 패턴을 사용하여 인스턴스의 상태를 나타내는 역할을 도입해서 캡슐화의 파괴에 빠지지 않고 저장과 복원을 실행할 수 있다. memento는 ‘기념품', ‘유물', ‘추억거리' 라는 의미를 가진다. 어떤 시점의 인스턴스의 상태를 확실하게 기록해서 저장해..
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..
서로의 입장이 같은 10명이 모여 공동 작업을 하고 있는데, 좀처럼 정리가 되지 않는 상황을 상상해보자. 이 때 입장이 다른 ‘중개인'이 등장하여 개개인의 상황을 보고 받고 상황을 정리해주면 되지 않을까? 회원들은 모두 중개인에게만 보고를 하고, 중개인만이 회원에게 지시를 내릴 수 있게 하면 회원들끼리 옥신각신할 일이 없어진다. 미디에이터는 의지할 수 있는 ‘중개인'을 상상하는 편이 더 이해하기 쉽다. 중개인은 모임의 회원으로부터 올라온 보고를 기초로 대국적인 판단을 해서 각 회원에게 지시를 내린다. 미디에이터 패턴에서 ‘중개인'을 mediator(조정자), ‘각 회원'을 colleague(동료)라고 칭한다. GoF 책에서 사용하는 용어다. 미디에이터 패턴이 어떤 상황에서 써야하는지 감이 잘 안잡힌다. ..
프로그램이라는 것은 점점 커지는 영향이 있다. 많은 클래스가 만들어져 서로 관계를 맺으면서 복잡하게 된다. 클래스를 사용할 경우에는 클래스 간의 관계를 정확히 이해하고 정확한 순서대로 메서드를 호출할 필요가 있다. 커다란 프로그램을 사용해서 처리를 실행하려면 상호 관련된 많은 클래스를 적절하게 제어해야 한다. 그렇다면 그 처리를 실행하기 위한 ‘창구'를 준비해 두는 것이 좋다. 그렇게 하면 많은 클래스를 개별적으로 제어하지 않아도 그 ‘창구'에 대해서만 요구하면 역할이 끝나기 때문이다. 이러한 ‘창구’가 바로 파사드 패턴이다. 파사드는 ‘건물의 정면'이라는 의미를 가지는데, 파사드 패턴은 복잡하게 얽혀 있는 것을 정리해서 높은 레벨의 인터페이스(API)를 제공한다. 파사드 역할은 시스템의 외부에 대해서는..
- Total
- Today
- Yesterday
- kotest
- 이펙티브 자바
- Spring Boot
- 객체지향
- C++
- 클린 코드
- Algorithm
- Java
- 정규표현식
- BOJ
- JPA
- 클린 아키텍처
- kkoon9
- 디자인패턴
- 프로그래머스
- 코테
- BAEKJOON
- programmers
- Spring
- AWS
- 테라폼
- MSA
- 알고리즘
- node.js
- 디자인 패턴
- Kotlin
- Olympiad
- Effective Java
- 백준
- 이팩티브 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |