본문 바로가기
  • 1+1=3
독서/개발관련

[객체지향의 사실과 오해] 3장 - 타입과 추상화

by 여스 2021. 12. 24.
반응형

72페이지~105페이지 읽음.

 

추상화

지하철 노선도를 보면 추상화 이해가 쉽다.  어떤 목적을 잘 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다. 차이점을 버리고 이반화를 통해 단순화하고, 불필요한 세부사항을 제거함으로써 이뤄진다.

 

객체와 타입

이상한 나라의 앨리스에서, 트럼프 병사들을 보면서 앨리스는 '그저 다 트럼프일 뿐이야!'라고 생각한다. 트럼프라는 개념을 이용해서 추상화를 한 것이다. 여기서 개념을 바로 '타입'이라고 한다.

객체를 다른 객체와 분류하는 기준은 무엇인가? 동일한 행동을 하면 같은 타입이다. 즉 타입은 데이터가 아니라 행동에 의해 결정된다. 동일한 행동은 동일한 책임을 의미하며, 동일한 책임이란 동일한 메시지 수신을 의미한다. 다만, 내부의 표현방식은 다르기에 메시지를 처리하는 방식은 다른데, 이는 다형성과 관련있다.(다형성이란 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력). 암튼, 동일한 메시지를 서로 다른 방식으로 처리하기 위해서는 객체들은 동일한 메시지를 수신할 수 있어야 하기에, 결과적으로 다형적인 객체들은 동일한 타입(또는 타입계층)에 속하게 된다.

객체를 행동에 따라 분류하기 위해서, 책임을 결정하고 그 책임을 수행하는데 적합한 데이터를 결정한 후, 데이터를 외부인터페이스 뒤로 캡슐화해야 한다. 이게 책임주도설계(Responsibility-Driven Design)라 한다.

 

타입 계층

이상한 나라의 앨리스에서, 트럼프는 트럼프인간을 포괄하는 일반적인 개념이다. 트럼프인간은 트럼프보다 좀 더 특화된 행동을 하는 특수한 개념이다. 이 관계를 일반화/특수화 관계라 한다. 다시말하면, 트럼프는 슈퍼타입, 트럼프인간은 서브타입이며, 슈퍼타입의 행위는 서브타입에 상속된다.

 

정적모델과 동적모델

앨리스는 케이크 먹거나 음료수를 먹으면 키가 변한다. 즉 시간에 따라 상태가 변하지만, 앨리스는 앨리스이다. 식별성은 동일하게 유지된다. 즉 타입은 시간에 따라 변하는 앨리스의 상태를 시간과 무관한 정적인 모습으로 다룰 수 있게 해준다. 즉 타입은 앨리스의 상태에 있는 복잡성을 더하는 시간이라는 요소를 제거함으로써 시간에 독립적인 정적인 모습으로 앨리슬 생각할 수 있도록 해준다. 바로 이런 관점에서 타입은 추상화이다.

 

그렇다면 동적인 모델은 뭘까. 객체가 특정시점에 어떤 상태를 가지는지 보여주는 것을 객체의 스냅샷이라고 한다. 스냅샷은 UML에서 객체 다이어그램이라고도 불린다. 스냅샷처럼 실제로 객체가 살아움직이는 동안 어떻게 변하고 어떻게 행동하는지 표착하는 것을 동적모델(dynamic model)이라고 한다.

반대로 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현하는 것을 타입모델(type diagram)이라고 하며, 정적 모델(static model)이라고도 한다.

 

프로그래밍할 때 클래스 만드는 것은 시스템을 정적인 관점에서 접근하는 것이고, 앱 실행해서 디버깅하는 것은 동적인 모델을 탐험하고 있는 것이다.

 

클래스

정적인 모델은 클래스를 이용해 구현된다. 그러므로 클래스와 타입은 동일하지 않다. 타입은 객체를 분류하기 위해 사용되는 개념이며, 클래스는 단지 타입을 구현할 수 있도록 하는 방식 중 하나일 뿐이다.

 

반응형

댓글