객체지향의 사실과 오해 - 인터페이스
1. 인터페이스의 사용법을 익히기만 하면 내부 구조나 동작방식을 몰라도 쉽게 대상을 조작하거나 의사를 전달할 수 있음
2. 인터페이스 자체는 변경하지 않고 단순히 내부 구성이나 작동방식만을 변경하는 것은 인터페이스 사용자에게 어떤 영향도 미치지 않는다
3. 대상이 변경되더라도 동일한 인터페이스르 제공하기만 하면 아무런 문제없이 상호작용을 할 수 있다
객체가 다른 객체와 상호작용할 수 있는 유일한 방법은 '메시지 전송'
책임은 객체가 메시지를 수신했을 때 수행해야 하는 객체의 행동이며, 실제로 객체의 공용 인터페이스를 구성하는 것은 객체가 외부로부터 수신할 수 있는 메시지의 목록
객체가 메시지를 수신했을 때 적절한 객체의 책임이 수행됨 -----> 메서드
- 객체지향적인 사고방식을 이해하기 위해서는 세 가지 원칙이 중요
1. 좀 더 추상적인 인터페이스 : 지나치게 상세한 수준의 메시지를 보내는 것은 객체의 자율성을 저해함
2. 최소 인터페이스 : 외부에서 사용할 필요가 없는 인터페이스는 최대힌 노출하지 말라
(객체 내부를 수정하더라도 외부에 미치는 영향을 최소화할 수 있음)
3. 인터페이스와 구현간의 차이가 있다는 점을 인식
: 훌륭한 객체란 구현을 모른 채 인터페이스만 알면 쉽게 상호작용할 수 있는 객체
----> 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 분리해서 고려해야함
----> '인터페이스와 구현의 분리 원칙'
----> why? 객체의 모든 것이 외부에 공개돼 있다면 아무리 작은 부분을 수정하더라도 변경에 의한 파급효과가 객체 공동체의 구석구석까지 파고들 것임
'강조'
객체가 가져야 할 상태와 메서드 구현은 객체 내부에 속함. 이 부분을 수정하더라도 객체 외부에 영향을 미쳐서는 안됨
객체 외부에 영향을 미치는 변경은 객체의 공용 인터페이스를 수정할 때만
---> 캡슐화
- 캡슐화: 객체의 자율성을 보존하기 위해 구현을 외부로부터 감추는 것
---> 객체의 상태와 행위를 캡슐화함으로써 협력적이고 자율적인 존재가 될 수 있음
객체의 책임이 자율적일수록 협력이 이해하기 쉬워지고 유연하게 변경할 수 있게 된다
1. 자율적인 책임은 협력을 단순하게 만든다
---> 책임이 적절하게 추상화됨
2. 외부와 내부를 명확하게 분리
---> 요청하는 객체가 몰라도 되는 사적인 부분이 객체 내부로 캡슐화되면서 인터페이스와 구현이 분리됨
3. 내부적인 방법을 변경하더라도 외부에 영향을 미치지 않음
---> 책임이 자율적일 수록 변경에 의해 수정되야하는 범위가 좁아지고 명확(결홥도가 낮아짐)
4. 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공
---> 설계가 유연해지고 재사용성이 높아짐
5. 객체의 역할을 이해햐기 쉬워짐
---> 객체의 응집도를 높은 상태로 유지가 쉬워짐