Search

Fundemental Design Pattern

course
last review
mastery
none
progress
not started
date
4 more properties
Previous chapter

Delegation : 위임

객체가 자신의 기능을 다른 객체에게 위임하여 기능을 실행하는 패턴
Delegate는 객체간의 결합도를 낮춰 유지보수성과 확장성을 높이는데 사용된다.
A가 B의 기능을 사용하고 싶을때, B의 기능을 직접 구현하지 않고 C에게 위임하여 구현하는 것인데, C를 Delegate 객체라고 함.

상속과 합성

Delegation은 클래스 상속이 아닌 클래스 합성에 해당하는 이야기다.

클래스 상속 : 서브 클래싱

부모 클래스로부터 상속받아 클래스의 구현을 정의하는 것을 뜻한다.
서브클래싱에 의한 재사용은 화이트박스 재사용(White-box reuse)이라고 한다.
내부를 볼 수 있다는 의미이며, 서브클래스에게 부모클래스가 공개된다.
장점
클래스 상속으로 부모 클래스의 구현을 수정할 수 있으며, 일부만 재정의할 수 있다.
단점
서브 클래스는 부모 클래스에게 종속될 수 밖에 없으므로, 부모가 변경되면 서브도 변경된다.

클래스 합성

다른 객체를 여러개 붙여서 새로운 기능이나 객체를 구성하는 것.
즉, 객체나 데이터 유형을 더 복잡한 유형으로 결합하는 것이다.
객체를 합성하려면, 합성에 들어가는 객체의 인터페이스를 명확하게 정의해야한다.
이런 스타일의 재사용을 블랙박스 재사용이라고 한다.
객체 내부는 볼 수 없고, 인터페이스를 통해서만 재사용되기 때문이다.
합성은 객체가 다른 객체의 인터페이스만을 바라보게 한다. 객체는 인터페이스에서만 접근하므로 캡슐화를 유지할 수 있다.

위임

위임은 합성을 상속만큼 강력하게 만드는 방법이다.
두 객체가 하나의 요청을 처리한다. 수신객체가 연산의 처리를 위임자에게 보낸다.
서브클래스가 부모 클래스에게 요청하는 것과 비슷한 방식
위임과 동일한 효과를 얻기 위해 자신을 매개변수로 전달해 위임된 연산이 자신을 참조하도록 한다.
class Rectangle(val width: Int, val height: Int) { fun area() = width * height } class Window(val bounds: Rectangle) { // Delegation fun area() = bounds.area() }
C++
복사
Window를 Rectangle의 서브클래스로 만드는 대신, Rectangle 클래스를 자신의 인스턴스 변수로 만들고 Rectangle 클래스에 정의된 행동이 필요할때는 해당 클래스에 위임해서 Rectangle의 행동을 재사용할 수 있다.

Interface

모두가 알고있는 그것

Proxy

객체의 대리자를 참조하여 객체가 메모
1.
서비스 인터페이스의 선언 후, 서비스가 해당 인터페이스를 구현함.
2.
프록시 클래스에는 서비스 객체를 가리키는 요청의 처리가 존재함. 해당 처리를 완료하면 처리된 요청을 서비스 객체에 전달한다.
3.
인터페이스를 통해 서비스 및 프록시를 작동시킴. 이때 모든 코드는 일차적으로 프록시에게 전달됨.
Next chapter