티스토리 뷰
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의 경우 클래스간의 강한 결합이 이루어지기
때문에 상황에 맞춰 사용할 필요가 있다.
'BackEnd > Java&Kotilin' 카테고리의 다른 글
[Java] 컴파일 방법과 Option (0) | 2022.08.02 |
---|---|
DAO, VO, DTO의 정의 (0) | 2022.07.31 |
[Java] 다이나믹 프록시 (Dynamic Proxy) (0) | 2022.07.29 |
JVM(Java Virtual Machine) 이란? (0) | 2022.07.26 |
메서드 오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2022.07.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 수평 분할
- ATDD
- java
- 클린 아키텍처
- 메모리 단편화
- Object Pool
- 뾰족함
- Session
- 컴포짓 패턴
- 외부 단편화
- 육각형 아키텍처
- 동적 타입 언어
- RestAssured
- OOP
- pool
- 동적 디스패치
- 정적 타입 언어
- Sticky Session
- 메모리 파편화
- Memory Fragmentation
- Clean Architecture
- 내부 단편화
- pass by reference
- SpringBoot 2.2
- pass by value
- 장애 해결기
- multimap
- 객체 풀
- 세션 불일치
- 수직 분할
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함