1. Aggregation
위와 같이 코드를 작성했다고 생각해보자.
각 변수들이 어떤 객체들이 참조하고 있는지 그림으로 그려보았는데, 보면 참조변수 steven이 참조하는 Director 객체를 두개의 서로 다른 객체로부터 참조되고 있는게 보인다. (Director 객체인 steven이 단 하나의 영화에만 속해있는 게 아니라 여러 영화에 속해 있는 상태)
이렇게 여러개의 객체가 하나의 같은 객체를 참조하고 있는 걸 Aggregation 이라 부른다.
자 그럼 이제, secondMovie 객체를 삭제했다고 가정해보자.
secondMovie 객체가 없어지면 당연히 그 객체가 다른 객체를 참조하고 있던 그 관계? 또한 사라진다.
하지만 위 그림을 보면 알 수 있듯, secondMovie 가 삭제되었지만 그 객체가 참조하고 있던 Director 나 Actor 객체는 사라지지 않는다.
2. Composition
반면에 다음과 같은 사정일 경우 Composition 이라고 부른다.
회색 객체와 다른 둘의 객체는 굉장히 밀접한 관계로 연결되있는 상태다.
보면 하나의 객체가 다른 두개의 객체를 참조하고 있는 상태인데, 위 Aggregation 보기와 달리 이 참조되고 있는 두 개의 객체는 회색 객쳬외에는 참조되고 있지 않는 상태다. 즉 회색객체하고만 참조관계가 이루어져 있는 상태.
이 때, 회색 객체를 지운다면 참조관계도 없어지지만 더 이상 어디에도 참조되지 않는 두 객체는 자동적으로 메모리에서 삭제가 된다. 이렇게 관계맺고 있는 무언가가 사라졌을 때, 관계대상이 같이 사라지는 경우를 Composition 이라 부른다.
보면 객체 Person이 다른 객체 skill을 참조하고 있다. 그림으로 다시 보자면,
이런 느낌. 이경우 skill 이 Person으로 부터 참조를 받지 않는다면 다른곳으로부터 참조받는 곳이 없으니 바이바이...
출처:
내용 / 도움준 곳: 학교 교수님 (Christian Kohls) 강의
'언어 > Kotlin' 카테고리의 다른 글
Kotlin : 인터페이스 (Interface) (0) | 2022.11.07 |
---|---|
Kotlin : 추상클래스 (Abstract class) (0) | 2022.11.05 |
Kotlin : Movie Maker 에서 Object 키워드 사용해보기 (1) | 2022.11.03 |
Kotlin : Type-compatibility (ft. Upcast, Downcast) (1) | 2022.10.31 |
Kotlin : Supertypes and Subtypes (0) | 2022.10.30 |