자바기반 언어 스몰토크의 다섯가지 기본 특성 (앨랜 케이)
- 모든것이 객체이다.
- 프로그램은 여러 가지의 객체들로 구성되고, 각 객체들은 상호간에 메시지를 보내어 일을 수행한다.
- 각 객체는 다른 객체들로 이루어진 자신의 메모리를 갖는다.
- 모든 객체는 자신의 타입이 있다.
- 특정 타입에 속하는 모든 객체는 동일한 메시지를 받을 수 있다.
(Grady Booch) -> 객체는 상태(state) 와 행동 (behavior)및 정체성(identiy)을 갖는다.
실제로 OOP언어 에서는 class 는 = type으로 생각한다.
동일하나 속성(데이터 요소)와 동일환 행동(기능성)을 갖는 객체들을 나타낸 것이 클래스이므로, 클래스는 하나의 데이터 타입이다.
구현부분 감추기
일반적으로 감추어진 부분은 객체 내부의 민감한 부분이므로, 타인이 부주의 하게 변경 하였을경우의 영향도를 미치기 때문에 public , pirivate, protected 이러한 접근 지시자를 이용하영 방지한다.
구현부분의 재사용
기존 클래스들을 조립 (compose)하여 새로운 클래스를 만드는 것으로 이러한 개념을 컴포지션(composition)이라 한다.(컴포지션이 동적으로 생성되면 집합연관(aggregation) 이라 한다.) 예를 들어 자동차는 엔진을 갖는다. 와 같이 컴포지션은 'has-a' 관계라고 한다.
UML을 그릴때 까맣게 칠한 다이아몬드로 컴포지션을 표시하며 자동차 쪽은 하나의 객체를 나타낸다. 이러한 연관 관계를 (association)를 나타낼 때 줄만 긋는 단순한 형태로 사용
(다이아몬드가 있는 쪽을 전체(whole), 그 반대쪽부분은 부분(part)라 한다.)
컴포지션을 이용하면 코드의 유여녀성이 굉장이 좋아진다. 새로운 클래스에 포함되는 멤버 객체들은 대게 private(클래스 내부에서만 사용 가능한 형태)로 지정하므로, 그 클래스를 사용하는 다른 프로그래머가 접근 할 수 없게 되어, 기존의 이를 사용하는 멤버에게 영향이 끼치지 않는다.
상속
자식클래스는 부모클래스와 동일한 인터페이스를 가지므로 부모와 같은 타입이 된다. 결과적으로는 부모클래스는, 자식클래스의 객체로 대체 할 수 있다. 이를 대체 원리(Substiitution priciple)이라한다. 이런 상속관계를 'is-a' 관계라 부른다.
UML을 그릴때는 부모클래스 부분을 빈 촉의 화살표로 지정한다.
'IS-A' 관계일때는 부모 클래스의 함수들이 자식 클래스에 똑같이 오버라이딩 되었을경우 (pure subsitiution) 순수 대체라고 한다.
하지만 자식 클래스에는 새로운 인터페이스를 추가 할 경우가 많으며, 추가 변경 할 경우도 있다. 이럴 경우를 'IS-LIKE-A' 관계라 한다.
자식 타입의 객체가 부모 타입으로 참조하는 것을 업 캐스팅이라고 한다.
'프로그래밍 > 초보자를 위한 Java프로그래밍' 카테고리의 다른 글
Thinking in JAVA 3. 연산자 (0) | 2021.10.01 |
---|---|
Thinking in JAVA 2. 모든 것이 객체다. (0) | 2021.10.01 |
자바 Map (0) | 2021.10.01 |
자바 Map 객체 값 비교하기 (0) | 2021.10.01 |
HashMap 객체 정렬하기 (0) | 2021.10.01 |