프로그래밍 언어/JAVA

JAVA) 자바 오버라이딩(Overriding)

luana_eun 2022. 2. 25. 18:04
728x90

오버라이딩 개념

오버라이딩은 "재정의". 기존의 것을 새롭게 정의하는것을 의미한다. 

기존 것은 바로 부모 클래스를의미한다. 

즉, 자바에서 오버라이딩은 부모가 가지고 있는 것을 가져와서 내꺼로 새로 만드는 것이다. 

 

 

오버라이딩을 하기 전 알아야 하는 개념

자식객체로 A메서드를 호출했는데 자식한테는 없고, 부모에게 있으면 부모의 A를 호출한다. 

(마치 미성년자가 잘못한걸 해결할 능력이 없어서 부모를 부르는것과 같음..ㅎ) 

B객체로 method_A를 호출했는데 B한테 해당메소드가 없어서 A클래스로 가서 찾아서 출력했다. 

이처럼 자식은 자신한테 없으면 상위클래스로 가서 찾는 특징이 있다. 

 

 

오버라이딩 사용 이유

중복을 제거하기 위해. 

클래스 A과 B가 똑같이 [펜을 만드는 작업]을 수행한다고 가정해보자. 

만약 둘다 완전히 똑같은 펜을 만든다고 하면 B는 부모인 A의 작업을 그냥 가져다 쓰기만 하면된다. 

 

하지만 만약 같은 펜인데, A는 색깔 하나있는 펜이고, B는 거기에 지우개까지 달린 펜을 만들고싶다면?

A와 B를 볼때 [색깔을 하나 넣는다]는 둘다 똑같지만 B는 추가로 [지우개 추가] 기능이 필요하다. 

그렇다고 B에서 [색깔 추가]기능을 또 쓰기에는 중복이 되고, 비효율적이다. 

그래서 부모의 [색깔추가]메서드를 오버라이딩하여 B가 하고싶은대로 재정의 하는것이다.  

 

 


오버라이딩 작성 규칙

1) 오버라이딩하는 원본 메서드의 이름이 같아야한다.

   이름이 다르면 오버라이딩이아니라 그냥 다른 메서드가 되는것이다. 

2) 원본 메서드의 리턴타입과 오버라팅 메서드의 리턴타입이 같아야한다. 

3) 매개변수의 개수, 타입, 순서가 같아야한다. 

 

 


예시

주석으로 실행순서를 표시한대로 설명(컴퓨터 전체화면으로 보는거 추천)

 

=> 이렇게 만드는 기능을 ChildClass에서 한번 더 만들지 않고, super.MakePen()으로 구현하여 중복을 없앴고,

     부모의 기능을 가져다가 지우개를 추가하는 재정의를 하는것이 '오버라이딩' 이다. 

 

                                             

728x90