soominkim Study
article thumbnail
Published 2022. 11. 7. 11:48
[Java] Method (4) Java
728x90

 

오버로딩(Overloading)을 공부했다면 이제는 오버라이딩(Overriding)이다.

 

5. Overriding

상속 관계에 있는 부모 클래스에서 이미 정의한 메소드를 자식 클래스에서 같은 기능을 갖는 메소드로 다시 정의하는 것.

오버로딩도 조건이 있던 것처럼 오버라이딩 역시 조건이 존재한다.

 

조건

① 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로 메소드의 선언부는 기존 메소드와 완전히 같아야 한다.

메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있다.

② 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.

③ 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.

 

바로 코드로 살펴보자.

 

코드는 각 Parent 이름을 가진  클래스와 Child 이름을 가진 클래스가 있다.

Child 클래스는 Parent 클래스를 상속받고있다.

 

잠깐 상속의 정의를 체크하자.

상속이란 현실세계에서 부모님이 자식들에게 재산을 물려주는 것과 같다. 

부모클래스가 Text() 라는 메소드를 가지고 있으므로 자식클래스는 Text()라는 메소드를 정의하지 않아도 사용할 수 있다.

하지만 부모가 물려준 그대로 사용하지 않고싶을 때 우리는 오버라이딩(Overriding)을 정의한다.

 

아직도 갈피가 잡히지 않는다면 이렇게 생각해보자.

 

부모님이 차를 20년된 차를 선물해주었다.

20년된 차를 그대로 사용해도 되지만 잔고장도 심할 것 같고 엔진도 부실하다.

그래서 나는 이것을 내 입맛대로 튜닝하고자한다.

내가 원하는 엔진으로도 바꾸고 원하는 휠도 장착하면서 말이다.

 

하지만 내가 대형차를 선물받았는데 이것을 갑자기 소형차로 튜닝할 수 있을까?

당연히 되지 않을 뿐 더러 된다 해도 정상적으로 움직이기는 어려움이 따를 것 이다.

 

이것이 바로 오버라이딩의 조건 중 1번 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로 메소드의 선언부는 기존 메소드와 완전히 같아야 한다. 에 해당 된다.

즉 안의 부품은 바꿔도 되지만 대형차에서 소형차로 이런 차의 종류까지는 바꿀 수 없다는 것이다.

 

2번과 3번 역시 대형차를 받았는데 소형차로 바꿀 수 없고 소형차를 받았는데 대형차로 바꿀 수는 없을 노릇 아닌가.

 

오버라이딩(Overriding)를 한마디로 정리하자면

자식 클래스가 상속 받은 메소드를 상황에 맞게 변경하여 사용하기 위해서

Why?

부모 클래스의 메소드와 비슷한 일을 하는데도 불구하고 자식 클래스는 새로운 메소드를 선언해야 하기 때문이다.

 

728x90

'Java' 카테고리의 다른 글

[Java] 메모리 구조 (Static,Stack,Heap)  (0) 2022.11.07
[Java] Class 와 Instance 그리고 Object  (0) 2022.11.07
[Java] Method (3)  (0) 2022.11.05
[Java] Method (2)  (0) 2022.11.05
[Java] Method (1)  (0) 2022.11.05
profile

soominkim Study

@soominkim

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그