티스토리 뷰

BackEnd/Java&Kotilin

IS-A 와 HAS-A

Hero_O 2022. 7. 30. 10:52

 

IS-A


 IS-A  는  ~ 이다  라는 의미를 가지고 있다. 설명하면, 상위 클래스와 하위 클래스의 관계에 있을 때   IS-A  라고 할 수 있다. 코드로 보면 아래와 같다.

class Dog extends Mammalia{
		//생략.
}

class Mammalia {
	// 생략...
}

생물 분류법에서 개는 포유류이다. 위 코드에서   Dog  클래스는  Mammalia  클래스에 상속되는데  Dog  Mammalia 로 표현할 수 있다. 이 처럼 상위 클래스로 하위 클래스를 표현할 수 있는 관계를 IS-A 관계라고 하며, 자바에서 대표적으로 상속관계를 들 수 있겠다.

 

Has-A


 Has-A  는   ~을 가지다  라는 의미다. 흔히 합성(Composition) 혹은 조합이라고 불리는데 A 클래스의 필드로 B 클래스를 가지고 있을 때 A와 B를 HAS-A 관계라고 부른다. 코드로 보면 아래와 같다.

class A {
	private final B b;
	// 생략...
}

class B {
	// 생략...
}

위처럼 A가 B를 가지고 있는 관계가 Has-A 관계이다.

 

 

IS-A 와 HAS-A


  IS-A HAS-A
의미 ~ 이다. ~ 을 가지다.
코드 상속관계 포함관계
결합도 강한 결합(Tight Coupling) 느슨한 결합(Loose Coupling)

 

상속 관계는 상•하위 클래스가 강하게 묶여있다. 상위 클래스 변경에 하위 클래스는 쉽게 영향을 받게 되는 경향이 있다. 두 클래스 간의 관계가 실제로  IS-A  관계일 때만 사용하는 것이 좋다.

포함 관계는 두 클래스가 상속 관계보다는 느슨하게 묶여있다. 따라서 상속 관계보다는 코드 변경이 서로에게 영향을 줄 가능성이 상대적으로 적다. 이는 코드가 변경에 유연하고 유지보수가 쉽다는 것이다.

 

요약

💡 IS-A와 HAS-A관계는 각각 상속과 합성을 의미하는데, IS-A의 경우 클래스간의 강한 결합이 이루어지기 
때문에 상황에 맞춰 사용할 필요가 있다.

 

댓글