본문 바로가기

프로그래밍기초

C++ , JAVA 등 언어 공통) overriding 재정의, 오버라이딩이란?

오버라이딩은 오버로딩이란 단어도 비슷해서 자주 비교해서 출제되요

그러니깐 오버라이딩 보기전에 오버로딩이 헷갈리시다면 오버로등 게시글을 보고 오시는걸 추천합니다

 

오버라이딩 들어가기전에 확실하게 잡고있어야할 개념입니다

 

overriding 오버라이딩이란?

오버라이딩은 상속의 개념에서 자연스럽게 넘어가면 이해하기 편해요

저번 게시글에서 메이플 캐릭터를 예시로 상속에 대해서 얘기했었는데

오버라이딩은 결국 상속을 조금더 편하게 사용하기 위해서 나온거랍니다

 

 

자 부모 클래스 캐릭터와 자식 클래스 전사와 도적이 있습니다

그런데 좀 생각해보면 도적은 보통 민첩이 높아서 날라다니거나 걷는 속도가 훨씬 빠르잖아요

지금은 부모인 캐릭터 클래스로부터 물려받아서 전사나 도적이나 둘다 속도가 10이잖아요

자식이라 똑같이 물려받으니깐~

 

도적에게만 움직이는 속도를 높여주고 싶다! 이런경우가 있겠죠

이럴때 필요한게 ovverriding 오버라이딩 즉 재정의 기능입니다

 

즉 부모 속성은 무시하구 내 속성을 적용할 수 있게 해줘 ~~ 이게 바로 오버라이딩입니다

오버라이딩은 부모가 가지고 있는 함수를 재정의 함으로써 적용시킬수 있습니다

 

구글에서 정리가 아주 잘된 짤을 가지고왔습니다.

 

자 오버라이딩을 볼께요 (오버로딩은 전 포스팅에서 상세하게 다뤘으니 생략)

hound 가 있고 dog 가 있어요 당연히 사냥개는 개의 한 종류니까 보무가 개가 되겠죠?

 

개의 공통적인 특성 중에 bork 기능이 있고 당연히 사냥개는 짖는걸 물려받아서 할수 있어요

그런데 부모 클래스에 짖는 기능에는 woof~ 라고 짖는다고 구현했는데 사냥개 짖는 소리를 들어보니

bowl~~ 이렇게 짖네요 사냥개에게 부모인 개의 짖는 행위는 물려받되, 부모꺼를 무시하고

내 짖는 소리를 새로 적용하고 싶어 이런상황이 된거죠

 

그러면 저렇게 부모와 똑같은 함수를 작성해준 후에 안에 자식에게 맞는 코드를 새로 작성해줍니다

그림에서는 woof를 bowl 로 바꿔주었습니다. 이렇게 수정을 위해서도 또는 아예 새로운 기능을 덮어버리는 용도로도

오버라이딩이 사용이 됩니다

하여튼 ~ 이렇게 바꿔주게 되면, 나중에 bark 함수를 호출했을때

 

결과 값은 woof가 아닌  bowl 이 됩니다.

즉 오버라이딩 장점은 잘 만들어진 클래스를 상속 받아서 일부 메소드만 수정해 사용할수있다는것!

 

오버로딩은 이렇게 함수나 메서드를 쌓아올려도 매개변수 타입에 따라서 또는 매개변수의 

개수에 따라 자동으로 구분되는 거라면?? 오버라이딩은 있던 함수를 새로고침하는거 즉 나한테 맞게 

커스텀마이징을해서 쓴다는것

부모나 조상 클래스가 가지고 있는 함수를 불러오고 싶을 때는 super라는 키워드를 사용해서

불러올 수도 있습니다.

오버라이딩은 이렇게 특정 자식 클래스에게 부모/조상 클래스를 무시하고 자신의 기능을 우선시 하기

위해서 쓰이지만 추상 클래스와 찰떡으로, 개발시 재정의를 강제함으로써 기준을 세울 수 있게 해주는 

또 다른 이점을 제공하기도 해요

그거는 추상 클래스를 다룰 때 한번 더 언급을 하도록 하겠습니다.

 

조상 클래스의 메서드를 자손 클래스에 맞게

변경할 수 있게 하는 것이 오버라이딩이다