03 타입과 추상화
추상화를 통한 복잡성 극복
추상화는 복잡한 것을 이해하기 쉽게 단순화하는 것이다. 복잡성을 해결하기 위해 추상화는 두 차원에서 이뤄진다.
- 사물들 간의 공통점은 뽑고, 차이점은 버리기 (일반화하기)
- 중요한 부분을 강조하기 위해 불필요한 세부 사항은 제거하기
객체지향과 추상화
1. 이상한 나라의 트럼프
ex) 앨리스에 나오는 등장인물 중 트럼프 모습을 하고 있는 정원사, 병사들, 신하, 왕자와 공주 등이 있다. 이들 모두 객체이다.
2. 추상화하여 그룹화하기
- 정원사, 병사들, 신하, 왕자와 공주는 '트럼프'라는 공통점을 가지고 있으며, 이들 모두를 트럼프라는 개념으로 단순하게 바라볼 수 있다.
- 정원사, 병사들, 여왕이라는 차이점은 무시하고, 공통점만 취하여 모두 트럼프라는 그룹으로 묶는다. 하얀 토끼는 토끼라는 그룹으로 묶을 수 있다.
3. 개념
위의 예시에서 인물들을 트럼프라는 개념으로 추상화하고 그룹으로 분류했다.
개념이 객체에 적용됐을 때 객체를 개념의 인스턴스라고 한다. (ex)정원사 = 트럼프의 인스턴스, 병사 = 트럼프의 인스턴스)
- 개념의 세 가지 관점
- 심볼 : 개념을 가르키는 명칭 (ex)트럼프)
- 내연 : 개념의 정의 (ex)트럼프의 내연 : 몸이 사각형이고 납작하다.)
- 외연 : 개념에 속하는 모든 객체의 집합 (ex)트럼프의 외연 : 정원사, 병사, 왕자와 공주 등)
- 개념을 이용해서 객체를 분류하는 건 추상화의 두 차원을 모두 사용한다.
- 트럼프라는 개념은 차이점은 버리고, 공통점만 취하여 일반화했다.
- 트럼프라는 개념은 중요한 특징인 ''몸이 사각형이고 납작하다"에만 집중하고, 그 외의 불필요한 사항은 제거했다.
타입
- 타입=개념
- 객체와 타입
- 객체가 어떤 타입에 속하는지 결정하는 것은 객체의 행동이다.
- 객체의 내부는 외부로부터 감춰진다.
- 다형성
- 같은 타입에 속한 객체의 행동은 동일하지만 다른 데이터를 가질 수 있다. 즉, 내부의 상태는 다르더라도 동일한 메시지를 수신하고 처리할 수 있다.
- 정리하자면 같은 타입에 속한 객체는 동일한 요청에 대해 서로 다른 방식으로 처리할 수 있다. 이를 다형성이라고 한다.
- 캡슐화
- 행동만을 외부에 노출하고 데이터는 내부로 감춘다.
타입의 계층
객체가 동일한 타입으로 분류되기 위해선 공통의 행동을 가져야 한다고 했다. 안타깝게도 앞의 예시에서 말한 등장인물은 트럼프와 유사하지만 행동은 트럼프와 동일하지 않다.
트럼프의 내연은 '몸이 사각형이고 납작하다'이지만 걸어다닐 순 없다. 따라서 트럼프 인간이라는 타입으로 분류해야 한다.
트럼프는 트럼프 인간을 포괄하는 일반적인 개념이며, 트럼프 인간은 트럼프보다 좀 더 특화된 행동을 하는 특수한 개념이다.
- 일반화/특수화 관계
- 트럼프는 트럼프 인간을 포괄하는 일반적인 개념이며, 트럼프 인간은 트럼프보다 좀 더 특화된 행동을 하는 특수한 개념이다.
- 트럼프 : 일반화, 트럼프 인간 : 특수화
- 슈퍼타입과 서브타입
- 일반적인 타입을 슈퍼 타입, 특수한 타입을 서브 타입이라고 한다. 서브 타입은 슈퍼타입을 대체할 수 있다.
- 일반화 역시 추상화를 사용한다
- 트럼프 인간 : 공통점만 취하고, 차이점은 제거했다.
- 트럼프 : 트럼프 인간을 더 단순하게 일반화했다.
정적 모델
타입은 동적으로 변하는 앨리스의 상태와 무관하게 정적인 모습으로 만들어준다.
- 타입은 추상화를 사용한다. 타입을 이용하면 객체의 동적인 특성을 추상화할 수 있다.
- 객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체의 행동이다. 타입을 구현할 수 있는 한 가지 방법이 클래스다.
마무리
이 장을 통해서 객체 설계 시 객체의 행동을 추상화하여 타입을 결정하고, 타입을 기준으로 객체를 분류한다는 것을 알게 되었다. 다시 말하자면, 객체지향 패러다임에서는 동적인 객체들을 추상화하여 정적인 타입으로 만든다. 또 그 타입은 일반화하여 슈퍼 타입, 특수화하여 서브 타입으로 나눌 수 있다.
중요한 건 객체들의 다양한 행동들을 어떻게 추상화할 것인지이다. 이건 직접 객체 설계를 해보며 부딪혀봐야 알 수 있을 것 같다. 어쨌든 책에서 계속 강조하는 '항상 상태는 숨기고 행동을 기준으로 설계해야 한다'를 기억하자.
'스터디' 카테고리의 다른 글
[모던 자바 인 액션] 3장. 람다, 함수형 인터페이스, 메서드 참조 (0) | 2023.06.28 |
---|---|
[객체지향의 사실과 오해] 4. 역할, 책임, 협력 (0) | 2023.06.24 |
[모던 자바 인 액션] 1,2장. Java 8의 변화, 동작 파라미터화 (0) | 2023.06.23 |
[ 객체지향의 사실과 오해 ] 2. 객체의 구성 (상태, 행동, 식별자) (0) | 2023.06.09 |
[ 객체지향의 사실과 오해 ] 1. 객체란 무엇인가 (0) | 2023.06.02 |
댓글