1장 : 디자인 패턴 소개와 전략 패턴

디자인 패턴

객체지향의 기초

  • 추상화

  • 캡슐화

  • 다형성

  • 상속

객체지향 원칙

  • 바뀌는 부분은 캡슐화한다.

  • 상속보다는 구성을 활용한다.

  • 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.

상속을 사용할 때 단점

  • 서브클래스에서 코드가 중복된다.

  • 실행시에 특징을 바꾸기 힘들다.

  • 모든 오리의 행동을 알기 힘들다.

  • 코드를 변경했을 때 다른 오리들한테 원치 않은 영향을 끼칠 수 있다.

소프트웨어 개발에 있어서 절대로 바뀌지 않는 것은 변화이다.

애플리케이션에서 달라지는 부분을 찾아 내고, 달라지지 않는 부분으로부터 분리시킨다.

캡슐화

코드에 바뀌는 부분이 있다면, 그 행동을 바뀌지 않는 다른 부분으로부터 골라내서 분리해야 한다. 바뀌는 부분은 따로 뽑아서 캡슐화시킨다. 그렇게 하면 나중에 바뀌지 않는 부분에는 영향을 미치지 않은 채 그 부분만 고치거나 확장할 수 있다.

그러면 코드를 변경하는 과정에서 의도하지 않은 일이 일어나는 것을 줄이면서 시스템의 유연성은 향상시킬 수 있습니다.

구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.

구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.

상속보다는 구성을 활용한다.

전략 패턴

  • 스트래티지 패턴에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.

언제 사용 ?

구현 방법

장단점

Refactoring Guru

핵심 정리

  • 객체지향 기초지식만 가지고는 훌륭한 객체지향 디자이너가 될 수 없습니다.

  • 훌륭한 객체지향 디자인이라면 재사용성, 확장성, 관리의 용이성을 갖춰야 합니다.

  • 패턴은 훌륭한 객체지향 디자인 품질을 갖추고 있는 시스템을 만드는 방법을 제공해 줍니다.

  • 패턴은 검증받은 객체지향 경험의 산물입니다.

  • 패턴이 코드를 바로 재공해주는 것은 아닙니다. 디자인 문제에 대한 일반적인 해법을 제공해주죠. 특정 애플리케이션에 패턴을 적용하는 것은 우리들이 해야할 일입니다.

  • 패턴은 발명되는 것이 아니라 발견되는 것입니다.

  • 대부분의 패턴과 원칙은 소프트웨어의 변경 문제와 관련되어 있습니다.

  • 대부분의 패턴은 시스템의 일부분을 나머지 부분과 무관하게 변경하는 방법을 제공합니다.

  • 많은 경우에 시스템에서 바뀌는 부분을 골라내서 캡슐화시켜야 합니다.

  • 패턴은 다른 개발자들과의 의사소통의 가치를 극대화 시킬 수 있는 전문 용어 역할을 합니다.

디자인 패턴의 분류

생성 디자인 패턴

  • 팩토리 메서드

  • 추상 팩토리

  • 빌더

  • 프로토타입

  • 싱글턴

구조 패턴

  • 어댑터

  • 브리지

  • 복합체

  • 데코레이터

  • 퍼사드

  • 플라이웨이트

  • 프록시

행동 디자인 패턴

  • 책임 연쇄

  • 커맨드

  • 반복자

  • 중재자

  • 메멘토

  • 옵서버

  • 상태

  • 전략

  • 템플릿 메서드

  • 비지터

Last updated