Hyunebee

클래스간 관계 결정 - 상속과 포함 본문

Java/Java의 정석

클래스간 관계 결정 - 상속과 포함

Hyunebee 2022. 3. 3. 17:00

상속

상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 

이러한 특성은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산과 유지보수에 크게 기여한다. 사용법은 상속받고자 하는 클래스에 extends와 상속시킬 클래스를 지정해주면 된다.

 

ex

class Child extends Parent{
    
}

이때 Parent는 조상클래스 Child는 자손클래스라고 한다.

 

다른 말로는 부모클래스 - 자식클래스, super-sub, base-derived 라고 표현하기도 한다. 

 

부모클래스와 자식클래스의 관계

 

class Parent{
    int age;
}

class Child extends Parent{
    void MethodA(){
        System.out.println("Method A");
    }
}

 

아래 코드를 보면 자식 클래스는 부모 클래스를 상속받고 있다. 우리가 상속을 받을때는 자식 클래스는 부모 클래스의 모든 멤버를 상속받는다. 하지만 이때 생성자와 초기화블럭은 상속되지 않는다. 멤버만 상속된다. -> 이렇기 때문에 항상 자식클래스는 부모클래스보다 같거나 많은 멤버수를 같는다.

 

포함

상속말고도 클래스를 재사용하는 방법중 하나는 포함관계이다. 이것은 클래스 간의 포함관계를 맺어주는 것이다. 이것을 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.

 

class House{
    Door door = new Door();
    Window window = new Window();
}

class Door{
    
}

class Window{
    
}

위에 코드처럼 내가 House클래스를 작성할때 단위구성요소로 나누어 참조변수를 사용하여 포함관계를 맺어주면 클래스 작성이 쉽고 코드도 간결해진다. 단위마다 나눠뒀기 때문에 코드관리도 쉽다. 

 

 

클래스간의 관계 결정하기

그렇다면 우리는 클래스간의 포함 - 상속 관계중 어떻게 관계를 결정할 수 있는가??

- [A]~is ~[B] : [A]~은/는 ~[B]이다. ->B는 상위클래스 A하위 클래스 

- [A]~has ~[B] : [A]~은/는 [B]을/를 가지고 있다.

위의 코드에 대입해서 살펴보자

 

-집은 창문이다.

-집은 창문을 가지고 있다.

 

이때 [A]~is ~[B]가 성립한다면 상속관계를 맺어주고 [A]~has ~[B]가 성립한다면 포함 관계를 맺어주면 된다. 그럼으로 위 코드는 상속보다는 포함관계가 어울린다. 

'Java > Java의 정석' 카테고리의 다른 글

제어자  (0) 2022.03.03
오버라이딩  (0) 2022.03.03
변수의 초기화  (0) 2022.03.02
생성자  (0) 2022.03.02
오버로딩  (0) 2022.03.01