1장 : 디자인 패턴 소개와 전략 패턴
디자인 패턴
객체지향의 기초
추상화
캡슐화
다형성
상속
객체지향 원칙
바뀌는 부분은 캡슐화한다.
상속보다는 구성을 활용한다.
구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.
상속을 사용할 때 단점
서브클래스에서 코드가 중복된다.
실행시에 특징을 바꾸기 힘들다.
모든 오리의 행동을 알기 힘들다.
코드를 변경했을 때 다른 오리들한테 원치 않은 영향을 끼칠 수 있다.
소프트웨어 개발에 있어서 절대로 바뀌지 않는 것은 변화이다.
애플리케이션에서 달라지는 부분을 찾아 내고, 달라지지 않는 부분으로부터 분리시킨다.
캡슐화
코드에 바뀌는 부분이 있다면, 그 행동을 바뀌지 않는 다른 부분으로부터 골라내서 분리해야 한다. 바뀌는 부분은 따로 뽑아서 캡슐화시킨다. 그렇게 하면 나중에 바뀌지 않는 부분에는 영향을 미치지 않은 채 그 부분만 고치거나 확장할 수 있다.
그러면 코드를 변경하는 과정에서 의도하지 않은 일이 일어나는 것을 줄이면서 시스템의 유연성은 향상시킬 수 있습니다.
구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.
구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.
상속보다는 구성을 활용한다.
전략 패턴
스트래티지 패턴에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
언제 사용 ?
구현 방법
장단점
Refactoring Guru
핵심 정리
객체지향 기초지식만 가지고는 훌륭한 객체지향 디자이너가 될 수 없습니다.
훌륭한 객체지향 디자인이라면 재사용성, 확장성, 관리의 용이성을 갖춰야 합니다.
패턴은 훌륭한 객체지향 디자인 품질을 갖추고 있는 시스템을 만드는 방법을 제공해 줍니다.
패턴은 검증받은 객체지향 경험의 산물입니다.
패턴이 코드를 바로 재공해주는 것은 아닙니다. 디자인 문제에 대한 일반적인 해법을 제공해주죠. 특정 애플리케이션에 패턴을 적용하는 것은 우리들이 해야할 일입니다.
패턴은 발명되는 것이 아니라 발견되는 것입니다.
대부분의 패턴과 원칙은 소프트웨어의 변경 문제와 관련되어 있습니다.
대부분의 패턴은 시스템의 일부분을 나머지 부분과 무관하게 변경하는 방법을 제공합니다.
많은 경우에 시스템에서 바뀌는 부분을 골라내서 캡슐화시켜야 합니다.
패턴은 다른 개발자들과의 의사소통의 가치를 극대화 시킬 수 있는 전문 용어 역할을 합니다.
디자인 패턴의 분류
생성 디자인 패턴
팩토리 메서드
추상 팩토리
빌더
프로토타입
싱글턴
구조 패턴
어댑터
브리지
복합체
데코레이터
퍼사드
플라이웨이트
프록시
행동 디자인 패턴
책임 연쇄
커맨드
반복자
중재자
메멘토
옵서버
상태
전략
템플릿 메서드
비지터
Last updated