티스토리 뷰

컴공과 학생, 현업 개발자라면 한번쯤은 들어봤을만한 책이다.
이 책을 한 줄로 요약해보자면 객체 지향적으로 인터페이스와 다형성을 통해 상위 레이어에서 유연성을 갖게 만드는 방법을 소개한다.
인터페이스를 안쓰는 패턴도 있었지만 그렇게 와닿지는 않았다. 예를들어 프록시 패턴은 코드 상에서의 패턴이라기보다는 아키텍처 쪽에 가깝다.
총 14가지 패턴이 나오는데, 하나씩 정리해보고 지나가려고한다.
난 가능한 한 줄로 나만의 방식으로 표현할 수 있어야 완전히 이해했다고 생각해서 그런식으로 정리해보려고 한다.
1. 전략 패턴
행동을 추상화해서 같은 부모를 상속받는 객체들이 서로 다른 동작을 할 수 있게 구현하는 패턴
ex) Duck을 상속 받는 객체들이 QuackBehavior를 implements한 인터페이스를 멤버 변수로 갖고 동작은 따로 구현함
첫 장부터 인상깊었던게 Composition을 내가 잘못 이해하고 있었던 것을 제대로 짚어줬다. 합성이라고 알고있던 것을 구성이라고 표현했는데, 상속이 별로라고만 기억하고 있던 것을 조금 더 유연성있게 인터페이스로 풀어내는 방식이란 걸 알게 됐다.
2. 옵저버 패턴
인터페이스를 implements한 객체들을 리스트로 묶어서 한번에 변경사항을 뿌리는 패턴
push 방식(주제->옵저버)과 pull 방식(주제-> 옵저버)는 구현에 따라 갈리지만 풀 방식이 조금 더 권장됨
3. 데코레이터 패턴
추상 클래스와 추상 클래스를 확장하는 데코레이터 클래스를 통해 클래스의 역할을 확장하는 패턴
OCP(Open-Closed Princle) : 확장에는 열려있지만 변경에는 닫혀있는 원칙을 잘 준수하는 패턴

4. 팩토리 패턴
객체 생성을 추상 클래스, 매서드에게 위임한 패턴
팩토리 매서드과 추상 팩토리 패턴이 있는데 팩토리 매서드는 팩토리 클래스, 추상 팩토리는 클래스 내부의 구성을 통해서 객체를 생성하도록 위임함

5. 싱글턴 패턴
어플리케이션 내부에서 단 하나의 객체만 사용할 수 있도록 만들어주는 패턴
단 하나의 객체만을 사용하기에는 멀티스레드에서 이슈가 있어서 다양한 대응책들이 있다(sycnronized, volatile 등)
6. 커맨드 패턴
커맨드 인터페이스를 만들어, 같은 매서드를 쓰더라도 주입 받은 커맨드 객체에 따라 행동이 달라지는 패턴
Command 인터페이스를 implements 받은 객체 내부에 제어하고자하는 객체가 있다.
7. 어댑터 패턴과 퍼사드 패턴
어댑터 패턴 : 비슷한 행위를 하지만 서로 다른 interface를 사용하는 객체가 있을 때, 다른 하나로 변환해주는 클래스를 사용하는 패턴
Duck과 Turkey가 비슷한 행위를 할 때 Duck을 implements 한 TurkeyAdapater를 만들어 Duck 인터페이스로 묶어준다.
퍼사드 패턴 : 여러 인터페이스의 행위들을 하나로 통합시키는 패턴
최소지식의 원칙을 지켜야 내부 객체들을 관리하기 용이해진다.
- 객체 자체, 메소드에 매개변수로 전달된 객체, 메소드를 생성하거나 인스터스를 만든 객체, 객체에 속하는 요소들만 상호작용 허용
8. 템플릿 메소드 패턴
템플릿 메소드 패턴: 추상 클래스로 알고리즘 구조를 템플릿으로 정의하고, 하위 클래스에서 세부 구현을 하게 만드는 구조
할리우드 원칙 : 제어권을 상위 계층이 가지고, 하위 계층은 호출될 때만 동작하게 하여 객체 간 결합도를 낮추는 설계 원칙"
9. 반복자 패턴과 컴포지트 패턴
반복자 패턴 : 내부 구현 방법을 노출하지 않으면서, 컬렉션의 모든 항목에 접근할 수 있게 만들어주는 패턴
자바에서 제공하는 반복자 인터페이스인 Iterator나 Iterable을 사용해서 구현
컴포지트 패턴 : 트리 구조로 구성된 객체들을 하나의 단일 객체처럼 다룰 수 있게 하여, 개별 객체와 그룹 객체를 동일한 방식으로 처리하는 패턴
MenuItem과 상위 객체인 Menu를 MenuComponent라는 상위 객체를 상속받게하여 단일 객체 처럼 사용
10. 상태 패턴
상태 패턴 : 객체의 상태에 따라 행동을 변경할 수 있도록, 상태를 객체로 캡슐화하여 상태 전환을 관리하는 패턴
상태가 바뀜에 따라 행동이 변하기 때문에 클래스가 바뀌는 것과 같은 결과를 얻을 수 있음.
11. 프록시 패턴
프록시 패턴 : 특정 객체로 접근하는 대리 객체를 통해 접근을 제어하는 패턴
예를 든 방식이 RMI 레지스트리를 이용했는데, 디자인 패턴이 맞나 싶다.
12.복합 패턴
그냥 여러 패턴을 결합해서 하나의 어플리케이션을 만드는 예를 보여줌
13. 실전 디자인 패턴
디자인 패턴의 범주 - 책을 읽으면서 디자인 패턴이 모두 같은 걸 의미하지 않는다는 걸 알아차릴 수 있다. 큰 범주가 모두 다르기 때문이다.
책에서는 생성 패턴, 행동패턴, 구조패턴, 클래스 패턴, 객체 패턴으로 분류해놨다.
생성 패턴 : 객체 인스턴스를 생성하는 패턴, 클라이언트와 그 클라이언트가 생성해야하는 연결을 끊어줌
행동 패턴 : 클래스와 객체들이 상호작용하는 패방법과 역할을 분담
구조 패턴 : 클래스와 객체를 더 큰 구조로 만들 수 있게 구성을 사용하는 패턴
클래스 패턴 : 클래스 사이의 관계가 상속으로 어떻게 정의되는지를 다룬다.
객체 패턴 : 객체 사이의 관계를 구성으로 정의하여 동적으로 유연하게 사용할 수 있게 한다.
14. 기타 패턴
브리지, 빌더, 책임연쇄, 플라이웨이트, 인터프리터, 중재자 패턴, 메멘토, 프로토타입, 비지터 패턴이 소개 됨
마치며
이 책을 학부생 때 한번, 첫회사에서 한번, 이번이 세번째 읽는거다. 그런데.. 사실 첫 두번은 머리속에 잘 남지 않았다.
파이썬과 C++을 위주로 코딩공부를 했었기 때문에 객체 지향에 그렇게 익숙하지 않았었다.
백엔드 개발로 완전히 넘어오면서 강타입 언어인 자바를 주력을 쓰는게 처음인 상황이라 이번독에 제일 감명깊게 읽었다.
그리고 내가 주도권을 잡고 개발하고 있어서 필요한 것들도 사용해볼 수 있다는게 가장 좋은 상황인 것 같다.
재미있게 읽었지만 언제든 꺼내쓸 수 있게 기억할 수 있을지 잘 모르겠다....
'일상' 카테고리의 다른 글
구로구 또래 멘토링 후기 (0) | 2024.12.27 |
---|---|
후쿠오카 맛집 추천 : 야키니쿠 카쿠라(焼肉かくら) - 만원 대 햄버그 스테이크 런치 (9) | 2024.11.17 |
후쿠오카 헬스장 추천 : FIT PLACE24 - 2만원대 일일권 24시간 헬스장 (2) | 2024.11.15 |
후쿠오카 맛집 추천 : 탄야(たんや) 하카타 - 7천원대 우설 정식 아침 세트 (8) | 2024.11.14 |
후쿠오카 맛집 추천 : 시후도(海風土) - 초거대 카이센동과 500엔 스시 모듬 (4) | 2024.11.13 |
- Total
- Today
- Yesterday
- Kotlin
- serverless
- elasticsearch
- AWS
- AWS EC2
- 오블완
- java
- GIT
- S3
- EKS
- Elastic cloud
- 티스토리챌린지
- JWT
- springboot
- openAI API
- docker
- Spring
- Log
- CloudFront
- MySQL
- cache
- terraform
- 스프링부트
- ChatGPT
- OpenAI
- AOP
- 후쿠오카
- 람다
- object
- lambda
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |