Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
[객사오] Chapter 5
자율적인 책임
- 자율적인 객체: 어플리케이션 기능을 위해 협력 → 각자의 책임을 다하기 위해 자율적으로 판단
- 스스로 정한 원칙에 따라 판단하고 스스로 의지를 기반으로 행동하는 객체
- 적절한 책임 → 자율적인 객체 → 유연하고 단순한 협력
- 협력에 참여하는 객체는 자율적이어야 한다
- 자율적인 객체
- 객체가 책임을 자율적으로 수행하기 위해선 객체에게 할당되는 책임이 자율적이어야 함
- 자신의 요청에 책임을 완수할 수 있다면 어떤 방법을 사용해도 상관없어야 한다.
- 포괄적이고 추상적인 책임을 선택하는 것도 좋은 선택이 아니다.
- 협력의 의도를 표현하지 못할 정도로 추상적인 것도 문제
- 어떻게 해야 하는가가 아니라
무엇을해야 하는가를 설명해야 한다. - 객체가 책임을 수행하도록 하는 것은 외부에서 전달되는 요청이다.
- 다른 객체에게 접근할 수 있는 유일한 방법
- 객체가 책임을 자율적으로 수행하기 위해선 객체에게 할당되는 책임이 자율적이어야 함
메시지와 메서드
메시지
- 메시지 전송: 객체의 행동을 유발하는 행위
- 객체가 다른 객체에 접근할 수 있는 유일한 방법
- 메시지 구성
- 수신자
- 메시지 이름: 전송하는 메시지의 내용
- 인자: 메시지 전송 시 추가 정보가 필요한 경우 사용
- 외부 객체는 메시지에 관해서만 볼 수 있고 객체 내부는 볼 수 없다.
- 객체의 내부와 외부 분리
메서드
- 메시지를 처리하기 위해 내부적으로 선택하는 방법
- 어떤 객체에게 메시지 전송 → 메시지에 대응되는 특정 메서드 실행
- 어떤 메서드가 실행되는 지는 전적으로 수신자의 결정
다형성
- 서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것
- 동일한 메시지를 처리하는 방법은 메시지를 수신하는 수신자의 종류에 따라 달라진다.
- 메시지를 어떻게 실행할 지는 수신자가 결정
- 역할, 책임, 협력과 깊은 관련
- 다형성을 만족시키는 객체들은 동일한 책임을 공유하는 것
-
메시지 송신자 관점: 동일한 역할을 수행하는 다양한 타입의 객체와 협력할 수 있음
→ 객체들 사이
대체가능성의미: 설계를 유연하게 하며 재사용을 가능하게 만든다.
- 유연하고 재사용성이 높은 협력
- 협력이 유연해진다.
- 협력이 수행되는 방식 확장 가능
- 송신자에 영향없이 수신자 교체 가능
- 협력이 수행되는 방식 재사용 가능
메시지
- 객체 간 협력을 위해 사용할 수 있는 유일한 방법
- 협력 관계 속에 다른 객체에게 무엇을 제공해야 하고 다른 객체로부터 무엇을 얻어야 하는지 접근해야한다.
- 어떤 객체가 어떤 메시지를 전송할 수 있는가
- 어떤 객체가 어떤 메시지를 이해할 수 있는가
- 메시지가 객체를 선택해야 한다 → 메시지 중심의 협력 설계 필요
-
어떻게 해야하는 지 지시하는 것이 아닌
무엇을 해야 하는지 요청→ 다양한 상황에서 협력을 재사용할 수 있게 해준다.
인터페이스
- 어떤 두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있게 이어주는 방법이나 장치
- 특징
- 사용법을 익히면 내부 구조나 동작 방식을 몰라도 쉽게 대상을 조작하거나 의사 전달 가능
- 인터페이스 자체는 변경하지 않고 단순히 내부 구성이나 작동 방식만을 변경하는 것은 인터페이스 사용자에게 영향을 미치지 못한다.
- 대상이 변경되더라도 동일한 인터페이스를 제공하기만 하면 아무 문제 없이 상호작용 가능
- 인터페이스는 객체가 수신할 수 있는 메시지의 목록으로 구성
- 객체가 어떤 메시지를 수신할 수 있는 지가 객체가 제공하는 인터페이스의 모양을 잡음
공용 인터페이스
- 외부에 공개된 인터페이스
- 모든 인터페이스는 메시지 전송을 통해서만 접근할 수 있다.
- 객체가 외부로부터 수신할 수 있는 메시지의 목록
인터페이스의 구현과 분리
- 객체지향적인 사고 방식의 세가지 원칙
- 좀 더 추상적인 인터페이스
- 최소 인터페이스
- 외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 말자
- 인터페이스와 구현 간 차이가 있다는 점을 인식
구현
- 객체를 구성하지만 공용 인터페이스에 포함되지 않는 모든 것
- 상태를 어떻게 표현할 것인가에 해당되는 부분
- 메서드 를 구성하는 코드 자체는 객체의 구현 부분
- 객체의 공용 인터페이스와 구현을 명확하게 분리해야 한다.
- 소프트웨어는 항상 변경되기 때문
- 구현을 인터페이스 뒤로 감춰 객체의 자율성 향상
캡슐화
- 객체의 자율성 보존을 위해 구현을 외부로부터 감추는 것
상태와 행위의 캡슐화
- 객체는 스스로 자신의 상태를 관리하며 상태를 변경하고 외부에 응답할 수 있는 행동을 내부에 함께 보관
- 데이터 캡슐화
- 상태와 행위를 묶은 후 외부에서 접근해야 하는 행위만 골라 공용 인터페이스에 노출
사적인 비밀의 캡슐화
- 변경이 일어나는 불안정한 비밀은 안정적인 인터페이스 뒤로 숨김
- 구현과 관련된 세부 사항들..