상속은 IS-A 관계에서만!

LSM ·2022년 2월 26일
0

1. 배경 지식

이번 글에서는 상속이 어떨 때 사용되어져야 하는 가에 대해 이야기해 보는 시간을 가질 것이다!! 그렇다면 상속이라는 개념을 먼저 알고 가야한다.

상속이란?

보다 먼저, 상속을 사용하는 이유는 결국 더 빠르고, 유지 보수가 쉽고, 중복이 적고, 통일성이 있는 프로그램을 만들기 위해서이다.

그래서 상속(Inheritance)이란!

현실 세계에서는 부모님이 자식들에게 재산을 물려주는 것과 비슷하다.

Java에서는 상속받는 클래스를 자식 클래스, 하위 클래스 또는 서브 클래스라고 부른다.

상속을 해주는 클래스를 부모 클래스, 상위 클래스 또는 슈퍼 클래스라고 한다.

상속의 대상 :

자식 클래스가 부모 클래스로부터 상속을 받게 되면 부모 클래스의 필드와 메서드를 물려받게 된다.

단, 접근제어자가 private을 갖는 필드나 메소드는 상속이 불가하고, 패키지가 다를 경우 접근제어자가 default인 경우도 상속이 불가하다.

즉 상속에 대상에 접근제어자 역시 고려 대상이다!

상속의 장점

중복된 코드를 줄일 수 있고, 유지 보수가 편리하며, 통일성이 있고 다형성을 구현할 수 있다.

다형성은 상속으로 부터 오버라이딩을 통해 발생한다!

상속의 방법

상속받을 자식 클래스 뒤에 extends 키워드를 사용하고 부모 클래스를 적어주면 된다.

public class Dog extends Animal { ... }


2. 상속 IS-A , HAS-A 관계

상속의 무분별한 사용 !

상속을 단순히 코드의 재사용을 줄이기 위한 목적으로 이해하는 사람들이 많다!

물론, 코드의 재사용을 줄이기 위해 사용되어지기는 하지만 제일 고려될 사항은 아니다!

하위 클래스가 상위 클래스에 종속되기 때문에 이질적인 클래스 간에는 상속을 사용하지 않는 것이 좋다.

단순히 코드를 재사용할 목적으로 서로 관련이 없는 개념의 클래스를 상속 관계로 사용하는 것은 추천하지 않는다!

IS-A 관계

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

IS-A 관계(is a relationship, inheritance)는 일반적인 개념과 구체적인 개념의 관계이다.

예시
사람은 동물이다.
소는 동물이다
새는 동물이다.

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

HAS-A 관계

HAS-A 관계에서는 상속을 사용하지 않는다.

HAS-A 관계(has a relationship, association)는 일반적인 포함 개념의 관계이다.

예시로,

과목 클래스를 포함하는 학생 클래스의 경우 과목 클래스의 코드를 재사용 하기 위해 상속을 사용하지는 않는다!


3. 상속의 올바른 사용!

앞서 말했듯,

상속을 코드 재사용의 개념으로 이해하면 안된다!

상속을 사용하면 클래스간 결합도가 높아져 상위 클래스를 수정해야 할 때 하위 클래스에 미치는 영향이 매우 크다.

즉 의미상 관계있고 상하 개념이 분명한 객체를 나타내고 연결하기 위한 수단으로 상속이 사용되어야지 잘못된 용도로 사용된다면 개발 중 의미상 부적합한 코드가 생성 될 것이다!

결론은, 상속은 IS-A 관계에서 사용해야 한다!


4. 출처 자료

출처: https://zangzangs.tistory.com/44 [장장스]

profile
개발 및 취준 일지

0개의 댓글