본문 바로가기

카테고리 없음

[TIL] 24.05.07 TUE

# 객사오

- 5장

객체지향 공동체의 기본 단위는 자율적인 객체

객체의 책임을 결정하는 메세지는 객체의 자율성을 보장해야함,

자율성을 보장할만큼 충분히 추상적이면서 협력의 의도를 명시할수 있을정도로 충분히 구체적이여야한다

메시지 전송은 수신자와 메시지의 조합,

메시지는 메시지이름과 인자의 조합 ex) 모자장수.증언하라(어제, 왕국)

 

다형성: 메시지는 무엇이 실행될지만 명시 수신자의 메서드(어떻게 처리할지)는 알지못함 -> 같은 메시지도 다른 메서드로 처리가능

객체지향의 핵심은 메시지

`what/who` 사이클: 무엇이 수행될지 먼저 결정후 누가 수행할지를 결정

객체의 상태를 묻지말고 메시지만 생각한다(묻지말고 시켜라)

 

인터페이스: 공용인터페이스(외부 객체들이 확인 가능)/사적 인터페이스(내부에서만 접근 가능(자기 자신에게 메시지 전송을 통해 요청)) 모든인터페이스는 메시지 전송을 통해 접근

 

메시지 -> 책임을 결정 -> 공용 인터페이스를 구성

 

 

객체지향적 사고방식을 이해하기 위한 원칙

1. 객체의 자율성을 보장하는 추상적인 인터페이스

2. 꼭 필요한 행위들만 담고있는 최소 인터페이스(외부에 최소한으로 노출) -> 변경이 외부에 미치는 영향을 최소화

(메시지를 결정하고 객체를 나중에 선택하는 책임-주도 설계를 통해 달성)

3. 구현(객체의 상태와 메서드(행동)(메시지 처리 방법))과 공용 인터페이스를 분리

: 인터페이스와 구현의 분리 원칙

    - 소프트웨어는 항상 변경되기 때문에 사이드 이펙트 등 캐스케이딩을 방지하기 위해 내부와 외부를 확실하게 분리

    - 외부에 영향을 주지 않고 메서드를 자유롭게 선택하게 되어 객체의 자율성 향상

    - 변경을 관리하기 위한 원칙 (송신자와 수신자의 결합도를 낮춤)

원칙을 수행하기 위한 설계 방법: 캡슐화

 

캡슐화:  자율성을 보존하기 위해 외부로 부터 감추는 것(정보은닉)

    - 상태와 행위의 캡슐화(데이터 캡슐화)

        :상태와 행위를 한데 묶는것, 이중에서 외부에서 반드시 접근해야만 하는 행위를 골라 공용인터페이스에 노출

    - 사적인 비밀의 캡슐화

        :변경이 빈번하게 일어나는 불안정한 비밀을 인터페이스 뒤로 숨김

 

더 나은 설계, 더 나은 협력, 더 나은 객체지향(이해갸 쉽고 변경에 유연)이 되는 원칙

1.  자율적인 책임은 협력을 단순하게 만듬

    : 자율적인 책임은 구체적인 메시지를 피하게 되면서 의도만을 확실하게 드러내는 하나의 문장으로 표현하는 책임을 만든다 -> 단순한 협력

2. 자율적인 책임은 외부와 내부를 명확하게 분리한다.

   :자율적인 책임은 객체의 외부와 내부를 분리하면서 사적인 부분이 캡슐화 되면서 인터페이스와 구현이 분리된다

3. 책임이 자율적일 경우 책임을 수행하는 내부적인 방법을 변경하더라도 외부에 영향을 미치지 않는다

    : 책임이 자율적일 수록 변경에 의해 수정돼야하는 범위가 좁아지고 명확해짐 -> 파급효과가 내부로 캡슐화 되면서 두 객체간 결합도가 낮아짐

4. 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다

    : 책임을 수행할 수만 있으면 어떤 객체든 대체가능하면서 설계가 유연하고 재사용성이 높아진다

5. 객체가 수행하는 책임드링 자율적일 수록 객체의 역할을 이해하기 쉬워진다.

    : 책임이 자율적일수록 객체의 존재이유를 명확하게 표현할 수 있다 (증인석에 입장하다, 증언하다) -> 증인이라는 객체의 역할을 이해

 

-> 책임이 자율적일 수록 객체의 응집도가 높아지며 협력이 이해하기 쉬워지고, 객체의 내부와 외부의 구분이 명확해지며, 변경에 의한 파급효과를 제한할 수 있고, 유연하게 변경할 수 있는 동시에 다양한 문맥에서 재활용 할수있다

(적절하게 추상화되며 응집도가 높아지고 결합도가 낮아지며 캡슐화가 증진되고 인터페이스와 구현이 명확하게 분리되며 설계의 유연성과 재사용성이 향상됨)