※ Head First Design Patterns을 읽고 정리한 글입니다.
1장. 디자인 패턴 소개
SimUDuck - 상속은 모든 해결책이 아니다!
오리에 관련 된 게임을 만들었다고 가정해보자. 소리를 내는 quack(), 수영하는 swim(), 모양 display()가 수퍼클래스에 정의 되어있고 여러개의 서브 클래스에서 상속 받고 있다.
기존 수퍼 클래스에 fly() 함수를 생성한다면?
- 모든 서브클래스들이 fly() 함수를 상속 받게 된다.
- 상속을 하면 안되는것들도 모두 상속되어 치명적인 오류가 발생한다. -> 인형 오리가 날라다님
fly()를 서브클래스에서 오버라이드하면 해결 되지 않나요?
→ 제품이 계속해서 변경 된다면, 매번 서브 클래스의 fly() 함수를 확인해가면서 변경해야 한다.
변화에 유연 하려면? - 디자인 원칙을 적용해봅시다.
디자인 원칙 1 : 바뀌는 부분과 그렇지 않은 부분 분리하기
코드에 새로운 요구 사항이 있을 때 마다 바뀌는 부분이 있으면, 그 행동을 분리해야 한다.
달라지는 부분을 찾아서 나머지 코드에 영향을 주지 않게 ‘캡슐화’ 하면 코드를 변경하는 과정에서 시스템의 유연성을 향상 시킬 수 있다.
- Duck 클래스에서 변하는 부분은 quack(), fly()의 행위들로 분리한다.
오버로드(Overload)
: 메서드의 이름은 같고 파라메터의 갯수나 타입이 다른 함수를 정의
오버라이드(Override)
: 상위 클래스의 메서드를 재정의
추상클래스
: 실체 클래스의 공통적인 부분(변수, 메서드)를 추출해서 선언한 클래스
: 추상 클래스는 실체성이 없고 구체적이지 않기 때문에 객체를 생성할 수 없음
: 실체 클래스와 상속관계
캡슐화
: 연관 있는 변수화, 함수들을 하나로 묶고, 실제 구현 내용을 외부에 감추는 것
300x250
'리뷰 > 책을 읽읍시다' 카테고리의 다른 글
[리뷰] 테크 커리어 (2) | 2023.08.31 |
---|