메소드 오버라이딩 : 자식클래스에서 부모 클래스의 메소드를 덮어쓰기(재정의)하는 것이다.
이전 시간에 학습한 상속을 이용하여 메소드오버라이딩을 이해해보자.
상속 시간에 기본 카메라(Camera), 화재감지카메라(FactoryCam), 속도감지카메라(SpeedCam)을 생성하였다.
그리고 각각 Camera 클래스를 부모클래스로, FactoryCam과 SpeedCam 클래스를 자식클래스로 설정하였다.
그런데 각 카메라의 기능을 출력하는 메소드를 추가로 생성한다고 생각해보자.
부모클래스인 Camera 클래스 내에 showMainFeature() 메소드를 추가로 생성하였다.
showMainFeature() 호출 시 각 클래스에 정의되어있는 name 변수와 해당 카메라의 주요기능을 출력하도록 하였다.
그리고 아래와 같이 chap_07 패키지 내 _13_MethodOverriding 을 생성하여
Camera, FactoryCam, SpeedCam 객체를 생성해주었다.
showMainFeature() 메소드는 Camera 메소드 내에만 선언되어있지만
FactoryCam, SpeedCam도 자식클래스이므로 showMainFeature() 메소드가 정상적으로 실행될 것이다.
showMainFeature() 메소드를 실행하여 출력한 결과를 보면 기본 카메라(Camera), 화재감지카메라(FactoryCam), 속도감지카메라(SpeedCam)의 주요기능이 모두 동일하게 출력된 것을 확인할 수 있다.
사실상 "사진촬영, 동영상 녹화"는 부모 클래스인 기본카메라(Camera)의 주요기능이며 화재감지카메라(FactoryCam)와 속도감지카메라(SpeedCam)는 추가적인 기능을 가지고 있다.
그래서 화재감지카메라(FactoryCam), 속도감지카메라(SpeedCam)에서 showMainFeature() 메소드 호출 시 메소드 오버라이딩을 하여 주요기능을 재정의하도록 수정해보자.
메소드 오버라이딩을 하는 방법은 자식클래스 내에서 부모클래스와 똑같은 형태의 메소드를 생성하면된다.
즉 FactoryCam, SpeedCam 클래스 내에 부모클래스와 동일한 showMainFeature()를 재정의하여 원하는 내용으로 수정하면 된다.
위와 같이 메소드 오버라이딩을 통해 각각 다른 기능이 출력되도록 설정하였다.
Camera 클래스 내 showMainFeature() : this.name + "의 주요 기능 : 사진 촬영, 동영상 녹화
FactoryCam 클래스 내 showMainFeature() : this.name + "의 주요 기능 : 화재감지
SpeedCam 클래스 내 showMainFeature() : this.name + "의 주요 기능 : 속도 측정, 차량번호 인식
메소드 오버라이딩은 자식클래스에서 부모 클래스의 메소드를 재정의하는 것이다.
즉, 자식클래스에서 부모클래스의 메소드를 덮어쓰기 때문에 같은 이름의 메소드임에도 불구하고 객체마다 다른 동작을 수행할 수 있게된다.
'Spec UP - Backend > 나도코딩의 자바기본편' 카테고리의 다른 글
Chap_07. Super (0) | 2023.04.28 |
---|---|
Chap_07. 다형성 (0) | 2023.04.28 |
Chap_07. 상속 (0) | 2023.04.28 |
Chap_07. 패키지 (0) | 2023.04.28 |
Chap_07. 접근 제어자 (0) | 2023.04.27 |
댓글