본문 바로가기
객체지향

객체지향의 사실과 오해(5-2)

by browoo97 2022. 3. 31.

객체 인터페이스

일반적으로 인터페이스란 어떤 두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있게 이어주는 방법이나 장치를 의미한다. 프로그래밍의 인터페이스 또한 똑같다. 개발자들이 미리 약속된 애플리케이션 프로그래밍 인터페이스를 통해 다른 사람이 작성한 코드와 상호작용한다.

 

인터페이스는 다음과 같은 세 가지 특징을 지닌다.

 

1. 인터페이스의 사용법을 익히기만 하면 내부 구조나 동작 방식을 몰라도 쉽게 대상의 조작하거나 의사를 전달할 수 있다.

2. 인터페이스 자체를 변경하지 않고 단순히 내부 구성이나 작동 방식만을 변경하는 것은 인터페이스 사용자에게 어떤 영향도 미치지 않는다.

3. 대상이 변경되더라도 동일한 인터페이스를 제공하기만 하면 아무런 문제 없이 사용작용할 수 있다. - ex) 하나의 자동차를 운전하기 위해 인터페이스에 능숙하다면 어떤 자동차라도 운전할 수 있다.

 

메세지가 인터페이스를 결정한다.

객체가 다른 객체와 사용작용할 수 있는 유일한 방법은 '메세지 전송'이다. 따라서 객체의 인터페이스는 객체가 수신할 수 있는 메시지의 목록으로 구성되며 객체가 어떤 메시지를 수신할 수 있는지가 객체가 제공하는 인터페이스의 모양을 빚는다. 인터페이스는 외부에서 접근 가능한 공개된 인터페이스와 내부에서만 접근할 수 있는 감춰진 인터페이스로 구분된다. 내부에서만 접근 가능한 사적인 인터페이스와 구분하기 위해 외부에 공개된 인터페이스를 공용 인터페이스라고 한다. 

 

공용 인터페이스건 사적 인터페이스건 상관 없이 모든 인터페이스는 메시지 전송을 통해서만 접근이 가능하다. 단지 그저 메세지 송신자가 다른객체인지, 객체 자신인지만 다를 뿐이다.

때문에 먼저 메시지를 결정하고 이 메시지를 수행할 객체를 나중에 결정하기 때문에 메시지가 수신자의 인터페이스를 결정할 수밖에 없다.

결과적으로 객체가 협력에 참여하기 위해 수행하는 메시지가 객체의 공용 인터페이스의 모양을 암시한다. 

 

인터페이스와 구현의 분리

메시지로 구성된 공용 인터페이스는 객체의 외부와 내부를 명확하게 분리한다. 객체지향의 힘은 대부분의 객체의 외부와 내부를 구분하는 것에서 나온다. 그 이유를 살펴보자.

맷 와이스펠드는 객체지향적인 사고 방식을 이해하기 위해서는 다음의 세 가지 원칙이 중요하다고 주장한다.

 

1. 좀 더 추상적인 인터페이스

2. 최소 인터페이스

3. 인터페이스 구현 간에 차이가 있다는 점을 인식

 

첫 번째 원칙은 왕이 모자 장수에게 '증언하라'는 요청 대신 '순서대로 재구성하라', '말로 간결하게 표현하라'와 같은 지나치게 상세한 요청을 보내는 것은 자율성을 저해하기 때문에 좀 더 요청을 추상적으로 하라는 이야기로 살펴보았다.

 

두 번째 원칙은 외부에서 사용하지 않는 인터페이스는 최대한 노출하지 말라는 것이다. 인터페이스를 최소로 유지하면 객체의 정보를 가능한 적은 정보만을 외부에 노출하여 내부를 수정하더라도 외부에 미치는 영향을 최소화할 수 있다.

 

세 번째 원칙은 객체의 외부와 내부를 명확하게 분리하기 위해 인터페이스와 구현으로 나누어져 있다는 것을 뜻한다.

객체의 내부 구조와 작동 방식을 가르키는 용어를 구현이라고 한다. 객체는 행동을 가지며 행동은 메시지를 수신했을 때만 실행되는 메시지 처리 방법이다. 이 처리 방법을 앞서 말한 메서드라고 한다.

 

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

소프트웨어는 항상 변경되기 때문에 수많은 객체들이 물고 물리며 돌아가는 객체지향 공동체에서 어떤 객체를 수정할 경우 수정의 의한 파급효과가 크다.

 

인간의 두뇌가 한 번에 생각할 수 있는 양에는 한계가 있으며로 변경이라는 강력한 적과의 전쟁에서 승리하기 위한 마지막 생존 전략은 변경하더라고 무방한 안전지대와 변경했을 경우 외부에 영향을 미치는 위험지대를 구분하는 것이다. 여기서 안전 지대가 객체의 내부인 구현이고 위험 지대가 객체의 외부인 공용 인터페이스이다. 이는 객체를 자율적인 존재로 만드는 데도 기여한다.

 

인터페이스와 구현을 분리한다는 것은 변경될 만한 부분을 객체의 내부에 꽁꽁 숨겨 놓는다는 것을 의미한다. 일반적으로 이 원칙을 수행하기 위한 객체 설계 방법을 캡슐화라고 한다.  

 

댓글