OOP의 특징
- 추상화
- 어떤 영역에서 필요로 하는 속성이나 행동을 추출하는 작업
- 캡슐화
- 높은 응집도와 낮은 결합도가 중요
- 낮은 결합도를 유지할수 있도록 해주는 원리
- 변하기 쉬운것들은 감춘다.
- 일반화 관계 (상속 관계)
- 여러 객체들이 가진 공통적인 특성을 부각시켜 하나의 개념이나 법칙으로 성립시키는 과정
- 다형성
- 서로 다른 클래스의 객체가 같은 메시지를 받았을때 각자의 방식으로 동작하는 능력
SOLID 원칙
- SRP (Single Responsibility Principle) 단일 책임 원칙
- 어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이어야 한다.
- OCP (Open Closed Principle) 개방 폐쇄 원칙
- 소프트웨어 엔티티(클래스,모듈,함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다.
- LSP (Liskov Substitution Principle) 리스코프 치환 원칙
- 서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다.
- ISP (Interface Segregation Principle) 인터페이스 분리 원칙
- 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다.
- DIP (Dependency Inversion Principle) 의존 역전 원칙
- "고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화 된 것에 의존해야 한다."
- "추상화 된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화 된 것에 의존해야 한다."
- "자주 변경되는 구체(Concrete) 클래스에 의존하지 마라"
문제 유형(사용목적)별 관련 디자인 패턴 정리
대분류 |
문제유형(사용목적) |
관련 디자인 패턴 |
객체 생성을 위한 패턴 |
- 제품군(Product Family)별 객체 생성. - 부분 부분 생성을 통한 전체 객체 생성. - 대행함수를 통한 객체생성. - 복제를 통한 객체 생성 - 최대 N개까지로 객체 생성을 제한. |
- Abstract Factory - Builder - Factory Method - Prototype - Singleton |
구조개선을 위한 패턴 |
- 기존 모듈 재사용을 위한 인터페이스 변경. - 인터페이스와 구현의 명확한 분리. - 객체간의 부분-전체 관계 형성및 관리. - 객체의 기능을 동적으로 추가, 삭제. - 서브시스템의 명확한 구분 정의. - 작은 객체들의 공유. - 대리 객체를 통한 작업 수행. |
- Adapter - Bridge - Composite - Decorator - Facade - Flyweight - Proxy |
행위 개선을 위한 패턴 |
- 수행할 작업의 일반화를 통한 조작. - 간단한 문법에 기반한 검증 및 작업처리 - 동일 자료형의 여러 객체 순차 접근. - M:N 객체 관계를 M:1로 단순화. - 객체의 이전 상태 복원 또는 보관. - One Source Multiple Use. - 객체 상태 추가 시 행위 수행의 원활한 변경. - 동일목적의 여러 알고리즘 중 선택해서 적용. - 알고리즘의 기본골격 재사용 및 상세 구현 변경. - 직업 종류의 효율적 추가, 변경. |
- Chain of Responsibilty - Command - Interpreter - Iterator - Mediator - Memento - Observer - State - Strategy - Template Method |
'백엔드 > Java' 카테고리의 다른 글
Jedis Pool 최적화 - JedisPool - redis connection pool (레디스 커넥션 풀) (0) | 2020.02.02 |
---|---|
StringBuffer vs StringBuilder (0) | 2020.01.27 |
int vs Integer (0) | 2020.01.27 |
리팩토링 맛보기 2탄 (0) | 2020.01.26 |
자바 객체 지향 디자인 패턴 맛보기 4탄 (0) | 2019.12.10 |
자바 객체 지향 디자인 패턴 맛보기 3탄 (0) | 2019.11.17 |
Integer == 비교 (0) | 2019.11.16 |
자바 객체 지향 디자인 패턴 맛보기 2탄 (0) | 2019.10.19 |
댓글