목차
개요
카카오테크캠퍼스 백엔드 과정 강의를 듣다가 HAS-A 관계와 IS-A관계에 관한 내용이 나와서 또 다른 관계는 없을까 라는 생각에 공부해보게 되었다.
객체지향 프로그래밍에서는 클래스 간의 상호작용과 협력을 나타내는 여러 가지 관계가 존재한다. 이 글에서는 이러한 관계들을 알아보고, 코드의 재사용성과 응집도, 그리고 유지 보수성을 높이는 데 도움이 되는 설계 원칙을 소개한다.
IS-A 관계 (상속) - 강한 결합
IS-A 관계는 클래스 간의 상속 관계를 의미한다.
하위 클래스가 상위 클래스의 특별한 종류로 간주되며, 상위 클래스의 속성과 메서드를 물려받는다.
이 관계를 통해 코드의 재사용성을 높일 수 있고, 상속 계층을 통해 객체 간의 일반화와 특수화를 구조화할 수 있다.
HAS-A 관계 (연관) -느슨한 결합
HAS-A 관계는 한 클래스가 다른 클래스의 인스턴스를 참조하고 있는 경우를 나타낸다.
- Aggregation (집합): 클래스 간의 약한 연관 관계로, 포함하는 객체와 포함된 객체가 독립적인 생명 주기를 갖는다.
- Composition (합성): 클래스 간의 강한 연관 관계로, 포함하는 객체와 포함된 객체가 동일한 생명 주기를 갖는다.
HAS-A 관계를 사용하여 클래스 간의 협력을 나타낼 수 있다.
USES-A 관계 (의존)- 상황에 따라 다르다
USES-A 관계는 한 클래스가 다른 클래스의 메서드를 사용하거나, 다른 클래스를 인자로 받아 작업을 수행하는 경우를 의미한다.
이 관계는 두 클래스 간의 간접적인 연관 관계로, 의존성이 강할수록 결합도가 높아져 수정이 어려워질 수 있다.
낮은 결합도를 유지하려면 인터페이스를 사용하여 의존성을 관리하는 것이 좋다.
REALIZES-A 관계 (실체화) - 인터페이스=느슨한 결합
REALIZES-A 관계는 인터페이스와 그 인터페이스를 구현한 클래스 간의 관계다.
이 관계는 클래스가 인터페이스의 명세를 충족시키기 위해 해당 인터페이스의 메서드를 구현함을 의미한다.
인터페이스를 사용하면 구현과 명세를 분리하여, 다양한 구현체를 사용할 수 있게 되고, 유연한 설계를 구현할 수 있다.
DEPENDS-ON 관계 (종속)- 상황에 따라 다르다
DEPENDS-ON 관계는 한 클래스가 다른 클래스의 상수, 정적 변수, 정적 메서드를 사용하는 경우의 관계다.
이 관계는 두 클래스 간의 강한 결합을 나타낼 수 있으며, 종속성이 높을 경우 코드 변경이 어려워질 수 있다.
종속성을 줄이기 위해서는 상수나 정적 메서드를 적절하게 분리하여 사용하는 것이 좋다.
마무리
외우기 보다는 이해하고 있는것이 좋다. 나도 처음에는 튀어나오는 강한 결합 느슨한 관계.. 등 단어들에 대해서 두려움을 가지고 있었는데 이렇게 개념을 정리해놓은 것을 보고 이해하려하지말고 상속이 뭔지 인터페이스는 뭔지 직접 구현하다보면 금방 감이 잡힌다.
'Java' 카테고리의 다른 글
JVM스택메모리 구조 이해를 위한 바이트코드 예시 (0) | 2024.06.25 |
---|---|
JVM에서 자바 메서드와 네이티브 메서드 실행의 차이점 (0) | 2024.06.24 |
Optional: 안정적인 Null 처리 그리고 orElse(), orElseGet(), orElseThrow() 에 대한 이해 (0) | 2023.10.24 |
문자열 조작에 있어서 오버헤드 발생 이유 (StringBuffer, StringBuilder 차이) (0) | 2023.04.14 |
자바표준(JLS)으로 알아보는 기본 생성자, 캡슐화, 유연성, 로직 중앙화 (0) | 2023.04.12 |