티스토리 뷰
책에서의 예를 든 '책임감분산', TV에서 본 '방관자 효과'
- 목격자가 많을 수록 책임감은 적어진다.
- 명확한 책임을 가진 권위자가 없을 때 이 같은 현상이 벌어진다.
객체지향은 명확하게 정의된 역할과 책임을 지닌 객체들의 상호협력이다..
자율적인 책임
책에서의 예를 든 왕이 모자장수에게 증언하라
는 요청을 전송할때,
- 자율적으로
증언하라
라고 요청할 수 있고, - 구체적으로 (목격장면, 사건순서, 간결하게)
증언하라
라고 요청할 수 있다.
증언하게 된다는 점은 동일하지만 '모자장수'에게 주어진 권한에는 큰 차이가 있게된다.
두번째 증언의 경우, 모자장수는 자율적인 책임을 수행할 수 없다. (자율적인 객체가 못된다.)
메시지와 메서드
하나의 객체가 다른 객체에 접근하는 방법은 메시지(요청)을 전달하는 것 뿐이다.
객체간의 협력안에서 송신자와 수신자가 되어 각자의 책임을 수행한다.
왕은 송신자, 모자장수는 수신자가 되어 메시지를 전달하는 과정을 본다면
모자장수.증언하라(어제, 왕국)
- 모자장수 = 수신자(객체)
- 증언하라 = 메시지이름(인터페이스)
- (어제, 왕국) = 인자(파라미터)
의 과정이 될것이다.
모자장수는 전달된 '증언하라'라는 메시지를 처리하기 위해 그에 맞는 메서드를 선택한다.
메시지는 '어떻게' 수행될지 명시하지 않는다. 즉, 어떤 메시지를 선택할 것인지는 전적으로 수신자의 결정에 좌우된다.
다형성
다형성이란 서로 다른 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것(차차 알아보자)
메시지는 '무엇'이 실행될지만을 명시하고 메시지를 '어떻게' 수행할지는 수신자
가 결정한다.
그러므로 다형성은,
하나의 메시지와 하나 이상의 메서드 사이의 관계
라고 볼 수 있다.
다형성은 송신자와 수신자 간의 객체 타입에 대한 결합도를 메시지에 대한 결합도로 낮춤으로써 달성된다.
메시지를 따라라
대다수의 강의에선 객체지향을 클래스를 선언하고 속성과 메서드를 정의하는 방법에 초점을 맞춘다.(동감한다)
클래스는 동적인 객체들의 특성과 행위를 정적인 텍스트로 표현하기 위해 사용할 수있는 추상화 도구일 뿐이다..
중요한 것은 객체다.
클래스를 중심에 두는 설계는 유연하지 못하고 확장하기 어렵다.
그러므로 객체지향은 메시지를 주고받는 동적인 객체들의 집합으로 바라보는 것에서 시작한다.
책임주도설계의 핵심은 어떤 행위가 필요한지를 '먼저' 결정한 후에 이 행위를 수행할 객체를 결정하는 것이다.
이 과정을 What/Who 사이클
이라고 한다.
'어떤 행위'를 수행할 것인지를 결정한 후 '누가' 그 행위를 수행할 것인지 결정해야 한다는 것이다.
=> 협력에 참여할 객체를 결정하기 전에 협력에 필요한 메시지를 먼저 결정한다.
송신자는 수신자를 믿고 메시지를 보내는 것에만 초점을 맞춘다.
메시지의 처리는 수신자가 해줄 것이다. 수신자 객체가 해결할 수 없는 메시지라면
스스로 송신자가 되어 다른 수신자를 찾아 메시지를 전달한다.
=> 이 과정은 객체를 자율적으로 만들고 캡슐화를 보장하며 결합도를 낮게 유지시켜주어 설계를 유연하게 만든다.
인터페이스
인터페이스는 상호작용할 수 있게 이어주는 방법, 장치
인터페이스의 3가지 특징
- 인터페이스의 사용법을 익히면 내부구조나 동작방식을 몰라도 쉽게 대상을 조작하거나 의사를 전달할 수 있다.
- 인터페이스 자체는 변경하지 않고 단순히 내부구성이나 작동방식만을 변경하는 것은 인터페이스 사용자에게 어떤 영향도 미치지 않는다.
- 대상이 변경되어도 동일한 인터페이스를 제공하기만 하면 문제없이 상호작용 할 수 있다.
구현과 분리
- 좀 더 추상적인 인터페이스
- 최소 인터페이스
- 인터페이스와 구현간에 차이가 있다는 점을 인식
느낀점
이 책에서 알려주는 객체지향 설계의 초점은 재밌게도 '객체'보다 '객체가 보내는 메시지'라는 것이 흥미로웠다.
송신자가 수신자를 관여하지 않고 메시지를 보낸다면 객체를 자율적으로 만들고, 캡슐화를 보장하고, 결합도를 낮게 만든다.
이 한문장을 유의하며 프로그래밍 해야 하겠구나 싶었다.(모든 좋은 말은 다 적어둔 느낌이다)
공용인터페이스라는 의미에 대해 아직 이해가 완벽히 된것 같지 않다.
정확히는 내가 프로그래밍 중 사적인 인터페이스
를 경험해봤나 싶어서 공용인터페이스라는 말이 좀더 어렵게 다가왔다.
정말 단순하게 생각하여
/* 공용 */
public interface Service
...
/* 사적 */
public class Service implements Service
이 되는걸까.
아니면 이 보다 더 큰 의미의 설계에서 부터 공용, 사적인 인터페이스가 적용 되는 걸까.
'IT Book > 객체지향의 사실과 오해' 카테고리의 다른 글
Ch.7 함께 모으기 (0) | 2023.06.03 |
---|---|
Ch.6 객체지도 (0) | 2023.05.29 |
Ch.4 역할, 책임, 협력 (0) | 2023.05.14 |
Ch.3 타입과 추상화 (0) | 2023.05.08 |
Ch2. 이상한 나라의 객체 (0) | 2023.04.29 |
- vuex
- 맥 error
- 객체지향의 사실과 오해
- 책리뷰
- mybatis구현
- LEVEL2
- script setup
- 리눅스마스터2급
- 프로그래머스
- 한권으로끝내기리눅스마스터2급
- it책 리뷰
- 짝지어제거하기
- 객체지향
- SpringSecurity
- 토스페이먼츠
- 타임리프
- pinia
- vue.js
- 스프링부트
- java 플레이그라운드
- JWT
- springboot
- for
- 객체 지도
- CompositionAPI
- Vue.js3
- 함께모으기
- 정수형으로 변환
- 알고리즘
- 다음 큰 숫자
- Total
- Today
- Yesterday