인터페이스와 구현의 분리 원칙
객체 관점에서 생각하는 방법
휼륭한 객체란 구현을 모른 채 인터페이스만 알면 쉽게 상호작용할 수 있는 객체를 의미한다. 이 것은 객체를 설계할 때 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 명학하게 분리해서 고려해야 한다는 것을 의미한다.
인터페이스와 구현의 분리 원칙이 왜 중요한가? 그것은 소프트웨어는 항상 변경되기 때문이다. 수 많은 객체들이 물고 물리며 돌아가는 객체지향 공동체에서 어떤 객체를 수정했을 때 어떤 객체가 영향을 받는지 판단하는 것은 거의 곡예에 가깝다.
객체가 가져야 할 상태와 메서드 구현은 객체 내부에 속한다. 이 부분은 수정하더라도 갹체 외부에 영향을 미쳐서는 안된다. 객체 외부에 영향을 미치는 변경은 객체의 공용 인터페이스를 수정할 때 뿐이다.
객체지향적인 사고 방식을 이해하기 위해서는 다음의 세 가지 원칙이 중요하닥 주장한다. 이 것은 모두 인터페이스에 관련된 것이다.
- 좀 더 추상적인 인터페이스
- 최소 인터페이스
- 인터페이스 구현 간에 차이가 있다는 점을 인식
1. 좀 더 추상적인 인터페이스
좀 더 추상적인 인터페이스에 관해서는 자율적인 책임을 다루면서 이미 살펴봤다. 왕이 모자 장수에게 '목격했던 장면을 떠올려라', '떠 오르는 기억을 시간 순서대로 재구성하라', '말로 간결하게 표현하라' 와 같은 지나치게 상세한 수준의 메시지를 보내는 것은 객체의 자율성을 저해한다. 대신에 '증언하라'라는 좀 더 추상적인 수준의 메시지를 수신할 수 있는 인터페이스를 제공하면서 수신자의 자율성을 보장할 수 있다.
2. 최소 인터페이스
외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 말라는 것이다. 인터페이스를 최소로 유지하면 객체의 내부 동작에 대해 가능한 적은 정보만 외부에 노출할 수 있다. 따라서 객체의 내부를 수정하더라도 외부에 미치는 영향을 최소할 수 있다. 최소 인터페이스는 메시지를 먼저 결정하고 객체를 나중에 선택하는 책임-주도 설계 방법을 따를 때 갈성할 수 있다.
3.인터페이스 구현 간에 차이가 있다는 점을 인식
구현
객체지향의 세계에서 내부 구조와 작동 방식을 가리키는 고유의 용어는 구현(Implementation)이다. 객체를 구성하지만 공용 인터페이스에 포함되지 않는 것이 구현에 포함된다.
객체는 상태를 가진다. 상태는 어떤 식으로든 객체에 포함되겠지만 객체 외부에 노출 되는 공용 인터페이스의 일부는 아니다. 따라서 상태를 어떻게 표현할 것인가는 객체의 구현에 해당한다.
객체는 행동을 가진다. 행동은 메시지를 수신했을 때만 실행되는 일종의 메시지 처리 방법이다. 이 처리 방법을 메서드라 한다. 메서드를 구성하는 코드는 자체는 객체 외부에 노출된 공용 인터페이스의 일부는 아니기 때문에 객체의 구현 부분에 포함된다.
인터페이스와 구현의 분리 원칙
휼륭한 객체란 구현을 모른 채 인터페이스만 알면 쉽게 상호작용할 수 있는 객체를 의미한다. 이 것은 객체를 설계할 때 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 명학하게 분리해서 고려해야 한다는 것을 의미한다.
인터페이스와 구현의 분리 원칙이 왜 중요한가? 그것은 소프트웨어는 항상 변경되기 때문이다. 수 많은 객체들이 물고 물리며 돌아가는 객체지향 공동체에서 어떤 객체를 수정했을 때 어떤 객체가 영향을 받는지 판단하는 것은 거의 곡예에 가깝다.
객체가 가져야 할 상태와 메서드 구현은 객체 내부에 속한다. 이 부분은 수정하더라도 갹체 외부에 영향을 미쳐서는 안된다. 객체 외부에 영향을 미치는 변경은 객체의 공용 인터페이스를 수정할 때 뿐이다.
캡슐화
객체의 자율성을 보전하기 위해 구현을 외부로부터 감추는 것을 캡슐화라고 한다. 객체는 상태와 행위를 함께 캡슐화함으로써 충분히 협력적이고 만족스러울 정도로 자율적인 존재가 될 수 있다.
객체지향의 세계에서 캡슐화는 두 가지 관점에서 사용된다.
- 상태와 행위의 캡슐화
- 사적인 비밀의 캡슐화
상태와 행위의 캡슐화
객체는 상태와 행위의 조합이다. 객체는 스스로 자신의 상태를 관리하며 상태를 변경하고 외부에 응답할 수 있는 행동을 내부에 함께 보관한다.객체는 상태와 행동을 하나의 단위로 묶는 자율적인 실체다. 이 관점에서 캡슐화를 데이터 캡슐화라고 한다.
객체는 상태와 행위를 한데 묶은 후 외부에서 반드시 접근해야만 하는 행위만 골라 공용 인터페이스를 통해 노출한다. 따라서 데이터 캡슐화는 인터페이스와 구현분리하기 위해 전제 조건이다.
객체가 자신의 상태를 스스로 관리 할 수 있어야 하기 때문에 데이터 캡슐화는 자율적인 객체를 만들기 위한 전제 조건이기도 하다.
사적인 캡슐화
객체는 외부의 객체가 자신의 내부 상태를 직접 관찰하거나 제어할 수 없도록 막기 위해 의사소통 가능한 특별한 경로만 외부에 노출한다.
'취준 note 2023 > 객체' 카테고리의 다른 글
객체 (클래스) 배열, 멤버변수 ,필드 (1) | 2023.02.28 |
---|---|
JAVA 객체지향-클래스 인스턴스 메서드 (1) | 2023.01.21 |
객체지향의 사실과 오해 (0) | 2022.12.28 |
JAVA 객체지향-클래스 인스턴스 메서드 (2) | 2022.11.29 |
JAVA 객체지향 개념 한번에 정리하기 (0) | 2022.11.06 |