지금까지는 상속을 너무 좁은 의미(사전적 의미의 물려받는다는)로만 봤던 것 같다.

공부를 좀 해보다 보니 좀 더 넓은 의미로 상속을 이해해야 한다고 한다.

================


아무튼... UML을 좀 제대로 그려보기 위해 내용 정리를 해봤다.

(그림에는 빼먹었는데,

generalization은 부모쪽으로 갈수록 일반화, 자식쪽으로 가면 전문화(특수화)

realization은 위쪽의 규칙 부분이 가상화, 아래쪽을 따르는(구현) 부분이 실체화)



=============

말로 좀 더 정리를 해보자.

클래스 관계는 6가지가 있다.

has a 계열의 association, composition, aggregation, dependency

is a 계열의 generalization(클래스를 상속), realization(인터페이스를 구현)


is a 관계는 별로 어려울 것이 없고, has a 관계만 좀 명확히 분류를 해볼 필요가 있다.

레퍼런스가 유지되지 않는 것 : dependency

레퍼런스가 유지되는 것 : association, composition, aggregation


그럼 레퍼런스가 유지되는 것만 또 보자.

association은 일단 넘어가고..

composition과 aggregation의 차이는 생명주기에 있다.

composition : 주인객체와 물건객체가 생성과 소멸을 동시에 한다.

aggregation : 물건은 있을 때도 있고, 없을 때도 있다(생명주기가 다르다는 말)

============================


또 생각이 정리가 됐음. 얘네 세가지가 제일 헷갈리는 것임.

association : 독립적인 관계(예를 들면 교수와 학생. 나와 비행기 등등.. 학생은 교수에게 인사를 할 수 있고, 나는 비행기를 이용할 수 있다. 그렇지만 굳이 클래스로 정의할 때 명시해야 할 정도로 깊은 관계를 가진다고는 못한다. 즉 서로 유기적으로 결합될 필요가 없다는 뜻) <- 이해 되면 읽어볼 것

compositiion : 강한 포함관계(생명주기가 같다. 나와 머리의 관계와 같은 것. 일반적인 사람은 머리를 가지고 있음)

aggregation : 약한 포함관계(생명주기가 다르다. 나와 스마트폰의 관계라고 할 수 있음. 스마트폰은 S사를 쓸 수도 있고, L사를 쓸 수도 있음. 직접 사도 되고, 엄마가 사줘서 써도 됨. 심지어는 없어도 살 수 있음. 필요할 때 사서 쓰면 됨)


그럼 다시 한 번 짧게 정리

association : 독립적인 식별 관계

composition : 생명주기가 같은 강한 포함 관계

aggregation : 생명주기가 다른 약한 포함 관계


dependency는 그냥 이용하는 것..(parameter든, 생성이든, 리턴타입이든)


generalization은 상속(일반화<->전문화) 개념

realization은 인터페이스(가상화<->실체화) 개념

====================

보충

aggregation은 UML표준으로 채택하기엔 애매해서 권장하지 않는다는 얘기도 있음..





===========================

영상의 설명을 봐도 도움이 됨

https://www.youtube.com/watch?v=Hz6iEhC7GP8


여기도 내용이 좋다

http://geniusduck.tistory.com/28

  • 현재다 2017.08.23 08:15 신고

    정리가 잘 되어있네요.
    도움이 많이 되었습니다~!