클래스 관계

Bam·2023년 9월 25일
0

소프트웨어공학

목록 보기
6/10
post-thumbnail

객체지향 프로그래밍에서는 클래스가 모여 관계를 맺고 관계를 통해 상호작용하며 시스템 기능을 제공하게 됩니다. 그래서 이러한 클래스 간의 관계를 정의하면 명확하게 클래스 사이의 상태를 파악할 수 있습니다.

클래스가 갖는 관계로는 연관 관계, 일반화 관계, 집합 관계, 합성 관계, 의존 관계, 실체화 관계가 있습니다.


연관 관계 association relationship

연관은 클래스 간에 서로 메세지를 주고받으며 사용하는 것을 의미합니다. 연관 관계에서는 한 클래스가 상대 클래스에서 제공하는 기능을 사용하게 됩니다. 연관 관계는 또 다시 몇 가지의 유형으로 나뉘어집니다.

양방향 연관 관계

양방향 연관 관계는 가장 단순한 연관 관계입니다.감독은 선수를 코칭하고, 선수는 감독에게 훈련을 받는다라는 단순한 관계입니다.

역할이 부여된 연관 관계

역할이 부여된 연관 관계는 연관 관계에게 각자에게 역할을 부여합니다.

다중 연관 관계

다중 연관 관계1:다 또는 다:다의 관계를 갖습니다. 기존의 연관 직선위에 다중 표기를 이용해서 관계를 나타냅니다.위 그림은 1명의 감독과 1명 이상의 축구 선수가 있다는 관계(1:다)를 나타냅니다.

다중 표기 multiplicity
다중 표기법은 다음 표처럼 작성합니다.

표기의미
11, 단 하나를 의미
0..* or *0을 포함한 다수를 의미. 즉, 0 이거나 1 이상
1..*0을 제외한 다수를 의미. 즉, 1 이상
0..10이거나 1
3..63에서 6까지 중 하나 (3 or 4 or 5 or 6)
2.4.62이거나 4이거나 6 (2 or 4 or 6)
1.4..61이거나 4에서 6까지 중 하나 (1 or 4 or 5 or 6)

단방향 연관 관계

단방향 연관 관계는 클래스 간 연결에 단방향 연결임을 나타내는 연관 관계입니다. 화살표를 통해 방향을 나타냅니다. 방향성으로 인해서 화살표의 시작 클래스(여기서는 감독)은 화살표가 가리키는 클래스(축구 선수)를 알지만 그 반대로는 성립하지 않습니다.

연관 클래스

연관 클래스는 연관 관계를 더 구체적으로 나타내고자할 때 클래스를 추가하는 것을 의미합니다. 점선으로 나타내며 연관 클래스는 일반 클래스처럼 사용할 수도 있습니다.


일반화 관계

일반화는 개별적이거나 특수한 것들이 일반적, 즉 보편적인 것으로 됨을 의미합니다. 클래스에서 일반화라고 하면 *공통점을 가진 여러 클래스를 모아 하나의 클래스를 만들고 공통적인 이름을 붙이는 것을 의미합니다.


위 그림처럼 자전거, 킥보드, 승용차의 공통점을 모아 탈것이라는 일반화 클래스를 만듭니다.

일반화 관계상속으로 구현됩니다. 즉 위 그림에서 자전거, 킥보드, 승용차는 탈것 클래스의 프로퍼티와 메소드를 상속받아 사용합니다.

위 그림처럼 아래에서 위로 추상화되는 것을 일반화 그 대반의 경우를 특수화라고 합니다.


집합 관계

집합 관계(aggregation relationship)는 상위 클래스가 하위 클래스로 구성되는 관계입니다. 좀 더 쉽게 말해서 자동차는 바퀴, 엔진, 핸들, 기어로 이루어졌다라고 말할 수 있습니다. 이런 관계를 집합 관계라고 부릅니다.

집합 관계의 특징은 각 객체가 별개의 생명주기를 가지고 각각 독립적으로 동작합니다. (약한 결합) 이미지 출처


합성 관계

합성 관계(composition relationship)은 집합 관계와 유사하지만 각 객체가 전체 객체에 완전한 종속 관계를 보입니다. 즉, 각 부분 객체는 독립적으로 존재할 수 없고, 전체 객체가 사라지면 부분 객체도 함께 사라집니다. (강한 결합)이미지 출처


의존 관계

의존 관계(dependency relationship)는 연관 관계와 유사합니다. 연관 관계처럼 서로 상대의 클래스를 참조하지만 의존 관계는 메소드 내에서 클래스를 참조하게 됩니다.


실체화 관계

추가적으로 실체화 관계(realization relationship)이라는 것도 있는데 이는 인터페이스 클래스를 이용합니다. 인터페이스로 추상 메소드를 만들고, 하위 클래스에서 추상 메소드를 실체화하게 됩니다.

0개의 댓글