180103 디자인패턴 - RYUDONGJIN/Memo_wiki GitHub Wiki
디자인 패턴
- 디자인 패턴은 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할 수 있는 재사용 가능한 솔루션이다.
- 모든 패턴에는 간결한 이름이 있어서 잘 알려진 패턴을 적용하고자 할 떄 간단히 패턴 이름을 언급하는 것만으로도 설계의 의도와 해결책을 함께 설명할 수 있다는 장점
- 주로 객체지향 설계에 관한 것, 대부분 객체 지향적 설계 원칙을 이용해 문제를 해결
- 패턴에서 가장 중요한 것은 각 패턴의 핵심이 담긴 목적 또는 의도. 패턴을 적용할 상황, 해결해야 할 문제, 솔루션의 구조와 각 요소의 역할과 함께 핵심 의도가 무엇인지를 기억.
템플릿 메소드 패턴
- 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법
- 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들어둔다. 슈퍼클래스는 미리 추상 메소드 또는 오버라이드 가능한 메소드를 정의해 두고 이를 활용해서 코드의 기본 알고리즘을 담고있는 템플릿 메소드를 만든다.
- 서브클래스에서는 추상 메소드를 구현하거나, 훅메소드를 오버라이드 하는 방법을 이용해 기능의 일부를 확장
훅(hook) 메소드
- 슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브클래스에서 선택적으로 오버라이드 할 수 있도록 만들어둔 메소드.
팩토리 메소드 패턴
- 상속을 통해 기능을 확장하게 하는 패턴. 템플릿 메소드 패턴과 비슷
- 슈퍼클래스 코드에서는 서브클래스에서 구현할 메소드를 호출해서 필요한 타입의 오브젝트를 가져와 사용. 이 메소드는 주로 인터페이스 타입으로 오프젝트를 리턴. 서브클래스는 다양한 방법으로 오브젝트를 생성하는 메소드를 재정의
- 오브젝트 생성 방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법
팩토리 메소드
- 서브클래스에서 오프젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드.