[Java] 클래스 관계 HAS-A (포함) / IS-A (상속) 정리

2022. 6. 29. 01:27·Java/자바 이론
목차
  1. 1. HAS-A (포함) 관계
  2. 2. IS-A (상속) 관계
  3. 3. HAS-A vs IS-A ?

클래스는 객체지향 프로그래밍에서 중요한 개념이다.

클래스의 Has-a, Is-a 관계에 대해 알아보자.


1. HAS-A (포함) 관계

출처 : https://zangzangs.tistory.com/44

 

HAS-A는 포함관계를 의미한다.  ( ~는 ~을 가지고 있다.)

다른 클래스의 기능(변수 혹은 메서드)을 받아들여 사용한다. (ex강사님이 펜을 사용해 칠판을 적는 것)

 

 - 받아들인 객체의 자원(메소드/변수)을 사용할 수 있다.

 - 어떤 클래스 A가 또 다른 클래스인 B가 가진 기능을 사용하고 싶을때 B 클래스를 포함하면 B 클래스의

   기능을 사용할 수 있다.  


2. IS-A (상속) 관계

출처 : https://stackoverflow.com/questions/2218937/has-a-is-a-terminology-in-object-oriented-language

IS-A는 말 그대로 'A는 B이다' 와 같다. 

클래스의 상속은 IS-A관계에서 사용하는 것이 가장 효율적이다.

 

ex) 경찰차는 차다.

      트럭은 차다.

      버스는 차다.

 

즉, 추상화한 클래스를 구체화하는 상황에서 상속을 사용한다.

상속을 사용하면 많은 장점이 있지만, 하위 클래스가 상위 클래스에 종속되기 때문에 IS-A관계가 아닌 클래스에서는 상속을 사용하지 않는 것이 좋다.

상속을 사용하면 클래스간 결합도가 높아져 상위 클래스를 수정해야 할 때 하위 클래스에 미치는 영향이 크다. 단순히 코드를 줄이기 위해 서로 관련 없는 클래스를 상속 관계로 사용하는 것은 좋지 않다.


3. HAS-A vs IS-A ?

IS-A 관계를 통해 생성된 클래스 및 객체는 상속 관계에서 둘은 밀접하게 결합되므로 부모 또는 기저 클래스의 명세에 변경이 발생하면 코드가 손상될 위험이 있습니다. 대신에 이러한 밀접한 관계는 클래스 계층구조에서 좀 더 안정적인 기반을 마련한다는 의미이기도 합니다. 게다가 상위 클래스의 기능을 하위 클래스가 물려받아 사용할 수 있는 장점도 있습니다.

 

반면 HAS-A 방식으로 생성된 클래스 및 객체는 느슨하게 결합됩니다. 이는 상속에 비해서 명세에 변경이 발생하더라도 구성 요소를 쉽게 변경할 수 있다는 의미입니다(코드의 손상이 적거나 없다는 의미입니다). 이러한 점에서 더 많은 유연성을 제공합니다. 하지만, HAS-A 방식은 상속보다 항상 낫다고 말할 정도로 단순한 문제가 아니며 실상은 더 복잡합니다.

 

결론 : 객체의 결합도와 응집도를 고려하여 클래스의 관계를 설계한다. 

모듈의 독립성은 모듈의 결합도(Coupling)과 응집도(Cohesion)로 측정한다.
결론적으로는 모듈의 독립성을 높이기 위해서는 모듈 간의 상호 의존 정도를 나타내는 결합도를 낮추고 모듈이
독립적으로 자체 기능만을 수행하도록 응집도를 높여야 한다.

* 객체를 만들 때 쓸 사람을 정해놓고 쓰는 것은 안좋은 코딩이다.

* 객체를 만들 때는 항상 독립적으로 만들어야 한다. (=결합도가 낮아야한다.)

* 객체를 쓰는 사람은 다 쓸 수 있게 만들어야 한다.

* 항상 데이터 클래스를 독립적으로 만들고 데이터 관리클래스에서 관리한다.


참고 블로그 : 

https://minusi.tistory.com/entry/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5%EC%A0%81-%EA%B4%80%EC%A0%90%EC%97%90%EC%84%9C%EC%9D%98-has-a%EC%99%80-is-a-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

https://zangzangs.tistory.com/44

'Java > 자바 이론' 카테고리의 다른 글

[Java] 자바 super 키워드 & super() 메서드  (0) 2022.06.30
[Java] 자바 클래스 상속의 장점과 특징  (2) 2022.06.30
[Java] 클래스 내부 구성 요소 3가지 (필드, 생성자, 메서드 + This)  (0) 2022.06.27
[Java] String 객체 특징 ( ==와 equals의 차이점 )  (1) 2022.06.23
[Java] 자바 메모리 영역 Static, Stack, Heap  (4) 2022.06.23
  1. 1. HAS-A (포함) 관계
  2. 2. IS-A (상속) 관계
  3. 3. HAS-A vs IS-A ?
'Java/자바 이론' 카테고리의 다른 글
  • [Java] 자바 super 키워드 & super() 메서드
  • [Java] 자바 클래스 상속의 장점과 특징
  • [Java] 클래스 내부 구성 요소 3가지 (필드, 생성자, 메서드 + This)
  • [Java] String 객체 특징 ( ==와 equals의 차이점 )
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바 스프링
    react
    Python
    자바스크립트
    JDBC
    Spring
    상속
    스택
    IS-A
    react-native-chart-kit
    자바
    Express
    node.js
    DI
    오블완
    REST API
    그리디
    큐
    파이썬
    티스토리챌린지
    오라클
    Java
    React Native
    서블릿
    포스트맨
    쓰레드
    JSP
    React Native Chart
    리액트 네이티브
    next-intl
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Java] 클래스 관계 HAS-A (포함) / IS-A (상속) 정리
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.