2. 목차
• What is Design Pattern?
• OOP 4대 기본 원칙
• SRP(Single Responsibility)
• OCP(Open Close)
• LSP(Liskov Substitution)
• ISP(Interface Segregation)
• DIP(Dependency Inversion)
3. What is Design Pattern?
• 많은 개발자들에 의해 입증된 방법
• 두 가지 주요 사용 이유
1. 개발자와 설계자의 공통 언어
2. 좋은 사례 모음
• OO(Object Orientated) 의 기본 원칙을
기본으로 함
• " 내가 그의 이름을 불러 주기 전에는 그
는 다만 하나의 몸짓에 지나지 않았다."
- 김춘수님의 꽃
4. OOP 4대 기본 원칙
• Abstraction(추상화)
– 데이터나 프로세스 등을 의미기 비슷한 개념이나 표
현으로 정의해 나가는 과정이며, 동시에 개발 객체의
구현에 대한 상세함은 감추는 것
• Encapsulation(캡술화)
– 정보의 영역의 한정
– 내부 구현이 변경되더라도 외부에 영향을 최소화
• Inheritance(상속)
– 기능의 재활용 또는 기능의 확장
– 단 구현 상속은 필요할 때만 쓸 것
• Polymorphism(다형성)
– 구현체 변경의 유연함을 제공
6. SRP(Single Responsibility)
-예제-
PROCESS :
전달된 Email의 값에 문제가 없으면,
회원 정보를 DB에 등록 하고 가입 완료 내용을 EMAIL로 발송
PROBLEM:
회원 등록과 EMAIL 관련 역할이 하나의 CLASS에 포함 되어 있다.
SOLUTION:
회원과 EMAIL 기능을 가진 CLASS를 각각 분리하여 각 CLASS마다 하나의 역할을 담당 하게 한다.
8. OCP(Open Close)
-예제-
PROCESS :
도형의 넓이를 구하는 METHOD를 구현한다.
PROBLEM:
초기 Rectangle 만 있을 경우는 문제가
안되었지만, 도형이 추가 될 경우
AreaCalcuator의 area 에서 해당
CLASS에 대한 처리를 진행 하여야 한다.
SOLUTION:
Shape 이라는 인터페이스를 각 도형에서
상속 받아 각 도형들이 넓이를 계산 하도록
변경 하였다.
Shape는 이후 method 추가나 변경은
안되지만, 확장(구현 클래스)에는 열려 있다.
12. ISP(Interface Segregation)
-예제-
PROCESS :
Stream 이라는 쓰고 읽는 기능을 가진 Interface
PROBLEM:
읽는 기능만 필요할 경우에도, 쓰는 기능 METHOD를 구현 해야 한다
반대의 경우도 마찬가지로 필요하지 않은 METHOD를 구현 해야 한다.
SOLUTION:
쓰는 기능과 읽는 기능의 Interface로 분리 하고,
해당 기능을 상속 받은 각각의 고유한 역할을 가진
CLASS를 구현한다.
14. PROCESS :
Worker라는 Class를 실행하는 Manager 가 있다.
추가적으로 SuperWorker가 생성 되었다
PROBLEM:
Worker 를 사용하는 Manager Class에서 관리 할 수 없다.
SOLUTION:
IWorker라는 인터페이스를 추가 하고 Worker와
SuperWorker는 그 인터페이스를 구현한다.
Manager에서 IWorker를 사용 하여 구조적인 문제를
해결
DIP(Dependency Inversion)
-예제-