자바 (Java)/요약

Chpt 7. 객체 지향 프로그래밍 2 - 주제 1. 클래스 간의 관계 - 상속, 포함

학듄 2023. 10. 25. 19:35
728x90

클래스 간의 관계 맺기도 결국 객체 지향의 장점을 살리는 방법 중 하나이다.

 

1. 상속

 

1) 정의와 방법

 

상속이란 기존의 클래스를 사용해 새로운 클래스 작성하는 것이다. 상속 받고 싶은 클래스 이름 옆에 extends 상속 받을 클래스 이름을 다음과 같이 적으면 된다. 이때, 상속 받고 싶은 클래스를 자손 (Child) 클래스, 상속 받을 클래스를 부모 (Parent) 클래스라고 한다.

 

class Parent {}

class Child extends Parent {}

 

2) 특징

 

상속에는 다음과 같은 특징이 있다.

 

(1) 자손 클래스는 부모 클래스의 생성자와 초기화 블록을 제외한 모든 멤버를 상속 받는다.
(2) 멤버의 개수: 자손 클래스 >= 부모 클래스
(3) 단일 상속만 허용한다. 
(4) 자손 클래스의 변경은 조상 클래스에 영항을 미치지 못한다. [그림 1]

 

단일 상속만 허용하는 이유에는 크게 두 가지가 있다. 클래스 간의 관계가 복잡해지고 다른 클래스의 선언부가 같고 구현부가 다르면 메서드를 상속 받을 때 충돌이 발생하기 때문이다.

 

 

[그림 1]

 

[참고]

Object 클래스는 모든 클래스의 최고 조상이며 아무것도 상속하지 않는 클래스의 경우, 컴파일러가 자동으로 extends Object를 추가해준다. toString(), equals(Object o) 메서드를 일단 기억하자.

 

2. 포함

 

포함은 한 클래스의 멤버 변수로 다른 클래스의 참조 변수를 선언하는 것이다.

 

class Circle {

     Point p = new Point(); // int x, y;

     int r;

}

 

3. 클래스 간의 관계 결정

 

클래스 간의 관계를 맺어줄 때 상속인지 포함인지 헷갈리는 경우가 많은데 다음과 같이 생각하면 된다. 예를 들어 A를 원, B를 점이라고 할 때,

 

A은 B이다. => 상속 (10%)
A은 B를 갖고 있다. => 포함 (90%)

 

위 두 문장 중 더 자연스러운 것으로 선택하면 된다. 그래도 모르겠으면 대부분 클래스 간의 관계는 포함이다. 

반응형