본문 바로가기
백엔드/Java

개념

by david100gom 2020. 1. 4.
728x90

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

- Visitor

출처: https://bobbybong.tistory.com/category/Design%20Pattern/GoF%EC%9D%98%20%EB%94%94%EC%9E%90%EC%9D%B8%20%ED%8C%A8%ED%84%B4

728x90

댓글