본문 바로가기
Spec UP - Backend/나도코딩의 자바기본편

Chap_07. 상속

by TIS_Ha 2023. 4. 28.
반응형

상속: 부모클래스에서 제공되는 것을 자식 클래스에서 상속받아 사용하는 것이다.

상속은 하나의 부모 클래스로부터만 상속 받을 수 있는 제약이 있다.

상속은 자식 클래스 정의 뒤에 extends 부모클래스 명을 붙여 정의할 수 있다.

 

해당 내용을 학습하기 위해 하위패키지를 생성해보자.

참고로 인텔리제이 상단 [Code]-[Generate]-[Constructor]를 선택하거나 

인텔리제이 화면내에서 Alt+Insert 동시에 누른 후 [Constructor]를 선택하면 자동으로 생성자를 만들 수 있다.

우선 실습중인 chap_07 패키지 안에 새로운 camera 패키지를 생성하였다.

camera 패키지 내에 아래와 같이 Camera, FactoryCam, SpeedCam 클래스를 생성하였다. 

- 일반 카메라, 속도 감지 카메라, 화재 감지 카메라

위와 같이 Camera, FactoryCam,  SpeedCam을 생성하였는데

각 카메라 데이터 관리를 위하여 사진을 촬영하거나 동영상을 녹화할때 로그를 남기기로 했다고 생각해보자.

 

위 예제를 위해 chap_07 패키지 내 _12_InHeritance 클래스에서 객체를 만들어보자.

현재는 takePicture(), recordVideo() 메소드 실행 시 아무런 동작도 실행하지 않도록 설정해두었다.

그런데 Camera, FactoryCam, SpeedCam 클래스 내 아래 메소드가 실행될 때

.takePicture() 메소드 호출 시 "사진을 촬영합니다."

.recordVideo() 메소드 호출 시 "동영상을 녹화합니다." 

라고 출력되도록 수정한다고 생각해보자.

 

위 작업을 위해서는 각각의 클래스 Camera, FactoryCam, SpeedCam 내의 

.takePicture() 메소드와 .recordVideo() 메소드를 각각 수정해야하는 번거로움이 있다.

이는 작업이 번거로울 뿐 아니라 실수가 유발될 수 있는 부분이기도 하다.


이러한 문제를 개선하기 위하여 상속의 개념을 사용해보자.

.takePicture() 메소드와 .recordVideo() 메소드는 Camera, FactoryCam, SpeedCam메소드에 모두 필요한 점을 이용하는 것이다.

 

우선 상속을 위하여 Camera 클래스를 부모클래스로 설정하도록 하자.

- 부모클래스 : 기능을 물려주는 클래스

- 자식클래스 : 기능을 물려받는 클래스

참고로 자식클래스 선언 방법은 클래스 정의 부분 뒤에 "extends 부모클래스명" 을 붙여주는 것이다.

public class FactoryCam extends Camera

 

먼저 부모클래스인 Camera 클래스를 아래와 같이 수정하였다.

takePicture() 메소드 실행 시 "사진을 촬영합니다" 출력

recordVideo() 메소드 실행 시 "동영상을 녹화합니다" 출력

이번에는 자식 클래스인 FactoryCam, SpeedCam을 수정해보자

Point 1) 자식클래스는 클래스 정의 뒤에 extends 부모클래스의 이름을 정의한다.

Point 2) 자식클래스는 부모로부터 기능을 상속받을 수 있으므로 Camera 클래스와 중복된 코드를 삭제한다.

위와 같이 자식 클래스 내의 중복된 코드를 없애고 부모클래스를 설정하였다.


앞서 생성한 chap_07 패키지 내 _12_InHeritance 클래스에서 다음과 같이 실행해보자.

FactoryCam과 SpeedCam 클래스 내에 takePicture(), recordVideo() 메소드가 없음에도 위와 같이 잘 출력되는 것을 볼 수 있다.

이는 부모클래스인 Camera 클래스의 메소드를 물려받아 실행한 것이다.

FactoryCam.detectFire()나 SpeedCam.checkSpeed() 같이 자식클래스만이 가지고 있는 메소드도 정상적으로 실행되는 것을 확인할 수 있다.

반응형

'Spec UP - Backend > 나도코딩의 자바기본편' 카테고리의 다른 글

Chap_07. 다형성  (0) 2023.04.28
Chap_07. 메소드 오버라이딩  (0) 2023.04.28
Chap_07. 패키지  (0) 2023.04.28
Chap_07. 접근 제어자  (0) 2023.04.27
Chap_07. Getter & Setter  (0) 2023.04.26

댓글