Notice
Recent Posts
Recent Comments
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

DeFacto-Standard IT

일반화관계 본문

Design Pattern/References

일반화관계

defacto standard 2017. 10. 28. 17:35

일반화 관계

한 클래스가 다른 클래스를 포함하는 상위 개념일 때 두 클래스 사이에는 일반화 관계가 존재한다.

일반화 관계가 존재할 때 자식(또는 서브)이라 불리는 클래스는 부모(또는 슈퍼)라 불리는 클래스로부터 속성과 연산을 물려받을 수 있다.


"is a kind of 관계'

- '세탁기' is a kind of '가전 제품'

- 'TV' is a kind of '가전 제품'

- '식기세척기' is a kind of '가전 제품'

가전 제품을 부모 클래스라 하며

세탁기, TV, 식기세척기를 자식 클래스라 한다.


UML에서 일반화 관계는 다음과 같이 두 클래스를 연결하는 화살표의 끝에 빈삼각형 표시를 해 표현한다.

삼각형 표시가 있는 쪽은 부모 클래스, 반대쪽은 자식 클래스.

가전 제품은 세탁기, TV, 식기세척기의 공통 속성이나 연산을 제공하는 틀로도 생각할 수 있다.

 

예를 들어 세탁기, TV, 식기세척기가 모두 제조번호, 제조년도 및 제조회사와 같은 공통속성을 지녔고, turnOn, turnOff와 같은 같은 연산이 제공된다면 이와 같은 속성이나 연산은 가전 제품 클래스에 두고 상속받으면 된다.


그러나 turnOn이나 turnOff 같은 연산의 구현은 세탁기, TV, 식기세척기마다 다르다는 점에 주의해야 한다. 따라서 가전 제품 클래스는 turnOn와 turnOff 연산의 정의를 제공하지 않고 자식 클래스에 정의할 필요가 있다. 이때 부모 클래스인 가전 제품 클래스에 구현되지 않은 빈 껍데기만 있는 연산을 추상 메서드라 한다.


이와 같이 추상 메서드를 하나 이상 가지는 클래스를 추상 클래스라고 하며, 객체를 생성할 수 없다.

UML에서는 추상 클래스와 메서드를 이탤릭체로 써서 구분하거나 스테레오 타입('<<', '>>' 기호 안에 원하는 이름을 넣음)으로 표시한다.

 

public abstract class HomeAppliancies {
private int serialNo; // 제조번호
private String manufacturer; // 제조회사
private int year; // 제조년도

public abstract void turnOn();
public abstract void turnOff();
}
public class Washer extends HomeAppliancies {
public void turnOn() {
// 세탁기를 켜는 코드
}

public void turnOff() {
// 세탁기를 끄는 코드
}
}

*Freezeer, DishWasher 클래스도 비슷하게 구현 가능
*일반화 관계는 두 클래스 사이에 'is a kind of 관계'가 성립될 때 사용

'Design Pattern > References' 카테고리의 다른 글

인터페이스, 실체화 관계  (0) 2017.10.28
의존관계  (0) 2017.10.28
집합관계  (0) 2017.10.28
연관관계  (2) 2017.10.28
클래스, 관계, UML  (0) 2017.10.28
Comments