본문 바로가기
알아두면쓸데있는신기한잡학사전/고군분투흔적들

[Design Pattern] 일반화 관계

by 대범하게 2021. 4. 14.
반응형

일반화 관계

 

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

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

 

'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{
	public int serialNo;
	public String manufacturer;
	public int year;
	
	public abstract void turnOn();
	public abstract void turnOff();
}

public class Washer extends HomeAppliancies { //Freezer와 DishWasher 클래스도 구현 가능

	public void turnOn() {
		//세탁기를 켜는 코드
	}

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

 

Keypoint_ 일반화 관계는 두 클래스 사이에 'is a kind of 관계'가 성립될 때 사용한다. 

 

※ StarUML에 대해 간단히 알아보쟈~

 

Association: 연관 관계

Aggregation: 집합 관계

Composition: 집합 관계

Dependency: 의존 관계

Generalization: 일반화 관계

Interface: 인터페이스와 실체화 관계

반응형