티스토리 뷰
반응형
타입에 관련된 중요한 사실
- 타입은 데이터가 어떻게 사용되느냐에 관한 것이다.
- 숫자는 연산, 문자열은 문자 관련 연산
- 타입에 속한 데이터를 메모리에 어떻게 표현하는지는 외부로부터 철저하게 감춰진다.
- 개발자는 해당 데이터 타입의 표현방식을 몰라도 데이터를 사용하는데 지장이 없다.
객체와 타입
-
객체의 오해
- 객체를 타입에 따라 분류하고 그 타입에 이름을 붙이는 것은 결국 프로그램에서 사용할 새로운 데이터 타입을 선언하는 것과 같다.
- 이 말로 봤을 때, 객체가 데이터라는 오해를 불러일으킬 수 있다. 전에도 봤듯이 객체에서 중요한 것은 객체의 행동이다.
- 객체를 창조할 때 객체가 이웃하는 객체와 협력하기 위해 어떤 행동을 해야할 지 결정하는 것이다. 즉, 객체는 데이터가 아니라는 것이다.
-
객체의 타입에 중요한 원칙
- 어떤 객체가 어떤 타입에 속하는지 결정하는 것은 객체가 수행하는 행동에 있다.
- 객체의 내부적인 표현은 외부로부터 철저하게 감춰진다. 즉, 객체의 타입은 객체의 내부 표현과는 아무런 상관이 없다.
행동이 우선이다.
- 객체의 동일한 타입 기준
- 어떤 객체들이 동일하게 행동한다면 그 객체들은 동일한 타입으로 본다.
- 객체들이 동일한 데이터를 가지고 있다고 해서 동일한 타입이 아니다. 우리의 관심사는 데이터가 아닌 것이다. 그저 행동일뿐!
- 객체를 결정짓는 것은 행동이다. 데이터는 단지 행동을 따를 뿐이고..
객체 동일한 타입과 다형성
- 다형성이란, 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력을 뜻한다. (다음 장에 자세히 다룰 것이다.)
- 객체의 동일한 타입을 풀이하면,
- 동일한 타입 -> 동일한 책임 -> 동일한 메시지 수신
- 동일한 메시지를 수신할 수 있다는 것은 내부 표현 방식에 상관없이 동일한 요청을 처리할 수 있다는 다형성과 연관되었다라는 것을 알 수 있다.
일반화/특수화 관계
- 일반화와 특수화 관계도 행동의 관점에서 살펴볼 수 있다.
- 행동의 관점에서 일반화/특수화 관계
- 일반적인 타입 : 특수한 타입이 가진 모든 행동들 중에서 일부 행동만을 가지는 타입을 말한다.(앨리스에서 트럼프)
- 특수한 타입 : 일반적인 타입이 가진 모든 타입을 포함하지만 거기에 더해 자신만의 행동을 추가하는 타입을 말한다.(앨리스에서 트럼프 인간)
- 일반적인 타입은 특수한 타입에 비해 더 적은 행동을 가지고 있다. 그에 반해 특수한 타입은 일반적인 타입보다 많은 행동을 가지고 있고 일반적인 타입이 가진 행동을 동일하게 수행할 수 있다.
슈퍼타입과 서브타입
- 슈퍼타입(일반적인 타입), 서브타입(특수한 타입)
일반화는 추상화를 위한 도구이다.
- 목적에 따라 불필요한 특성을 배제하고 좀 더 포괄적인 의미를 지닌 특성에만 집중한다.
- 앨리스의 경우 트럼프 인간을 보고 좀 더 포괄적으로 표현하기 위해 불필요한 특성인 인간의 특성을 배제하고 트럼프의 특성에만 집중한 것이다.
타입의 목적
- 시간에 따라 변하는 상태를 무시하고 정적인 모습으로 다룰 수 있게 해준다.
- 상태가 아무리 변해도 해당 객체는 다른 객체와 구별할 수 있는 식별성은 동일하게 유지된다.
- 즉, 정적인 모습으로 객체의 식별을 가능하게 해준다.
타입은 추상화이다.
- 어떤 시점에서 객체에 관해 생각해볼 때 불필요한 시간이라는 요소와 상태 변화라는 요소를 제거하고 철저하게 정적인 관점에서 객체의 모습을 묘사하는 것을 가능하게 해준다.
- 모든 상태와 모든 행동을 독립적으로 표현하여 그저 객체의 모습만을 보여준다.
클래스와 타입
- 클래스와 타입은 명백히 다르다.
- 클래스는 타입을 구현한 것이다.
- 타입은 객체를 분류하기 위해 사용하는 개념이다.
반응형
'객체지향' 카테고리의 다른 글
[객체 지향] 객체 지도 (0) | 2020.03.05 |
---|---|
[객체지향] 책임과 메시지 그리고 캡슐화 (0) | 2020.03.03 |
[객체지향] 역할, 책임, 협력(2) (0) | 2020.02.26 |
[객체지향] 상태, 행동, 식별자 (0) | 2020.02.24 |
[객체지향] 역할, 책임, 협력(1) (0) | 2020.02.24 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- springboot
- java
- 인프런
- 자바8
- 스프링부트
- Effective Java
- ifPresent
- try catch finally
- 정적팩터리메서드
- 연관관계
- try with resources
- 복사 팩토리
- junit
- flatMap
- 빌더 패턴
- 점층적 생성 패턴
- 팩토리 메소드 패턴
- java8
- 김영한
- 생성자
- mustache
- @Lazy
- 이펙티브자바
- effectivejava
- Spring
- JPA
- jdk버전
- 빈 순환 참조
- 이펙티브 자바
- package-private
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함