기타/디자인패턴
-
구조패턴 > 데코레이터 *기타/디자인패턴 2021. 2. 11. 10:10
기본 기능 + 여러가지 추가 기능 상속은 강력하지만 상속을 사용한다고 무조건 유연하고, 관리하기 쉬운 디자인이 만들어 지는 것은 아니다. Coffee 라는 추상 클래스의 상속을 통해 다양한 옵션의 커피를 만들려면 엄청나게 많은 수의 클래스를 생성, 관리해야한다. 이런 서브 클래스를 만드는 방식의 상속은 행동이 컴파일시에 완전히 결정되고 모든 서브 클래스가 똑같은 행동을 상속받아 어떤 클래스에서는 불필요한 행동을 가질 수 있다. 하지만 구성을 통해 객체의 행동을 확장하면 실행 중에 동적으로 행동을 설정할 수 있다. 이 기술을 통해 슈퍼 클래스에서는 생각치 못했던 새로운 임무를 기존 코드의 수정없이 개별 객체에 더할 수도 있다. 이는 객체지향 OCP 원칙이기도 하다. 데코레이터는 객체를 "장식" 하는 패턴이..
-
구조패턴 > 컴포지트 *기타/디자인패턴 2021. 2. 11. 10:09
객체들을 트리 구조로 구성해 부분과 전체를 나타내는 계층 구조로 만들 수 있다. 컴포지트 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합객체(composite) 를 똑같은 방법으로 다룰 수 있다. 부분-전체 계층구조란, 부분들이 모여있지만, 모든 것을 하나로 묶어서 전체로 다룰 수 있는 구조를 말한다. 컴포지트 패턴을 이용하면 객체의 구성과 개별 객체를 노드로 가지는 트리 형태로 객체를 구축할 수 있다. 이런 복합 구조를 사용하면 복합 객체와 개별 객체에 대해 똑같은 작업을 적용할 수 있다. 즉, 대부분의 경우에 복합 객체와 개별 객체를 구분할 필요가 없어진다. 팬케이크하우스, 객체식당, 카페 식당이 병합되고 객체식당의 메뉴 내에 디저트 메뉴도 새로 만들어 끼워넣는다고 해보자. 객체..
-
구조패턴 > 어댑터 *기타/디자인패턴 2021. 2. 11. 10:09
다른 인터페이스로 변환, 호환성 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용할 수 있다. * mp3 (MediaPlayer)는 play 를, 새로 나온 mp4(MediaPackage)는 playFile 메서드를 각각 가지고 있는데 mp4가 mp3 의 play 를 사용할 수 있도록 하려면? mp3 를 상속하는 adapter 객체를 만들고 adapter 가 mp4를 구성요소로 가지게 한다. adapter 의 play 를 호출할 때 mp4의 playfile 이 호출되도록 한다. 이전에 사용하던 play에 변화를 주지 않고 새로 나온 mp4의 기능을 호출할 수 있다. public c..