삽질의 현장/- Java

[삽잡이::java] 나만의 스타일로! 오버라이딩(Overriding)

shovelman 2016. 7. 19. 21:58


이리 저리, 요리 조리

복잡한 생각들과 어떻게 해결할까 하는 고민들로

머리가 뽀글뽀글해지기 시작하면...

모든 사람들이 다들 그러실지는 모르겠으나

삽잡이는 판단력이 흐려지는 듯합니다. 하하...


그래서 그런지 정신없이 코딩을 하다보면,

중복되는 코드들이 너무도 많이 속출되고,

내가 정녕 객체지향적인 코드를 작성하고 있나 싶을정도로

스파게티 코드들을 만들고 있더군요...


그래서, 멀어져가는 정신을 끄댕겨잡고(?) 머리도 식히고 정리할겸!

 오버라이딩 대해서

생각해보는 시간을 가지고자합니다.


부모로부터 불려받은 메서드를

나만의 스타일로 재정의하는 작업을

오버라이딩이라고 부릅니다.


예전에 면접보러가서 

오버로딩오버라이딩에 대해서 바꿔서 말했던 추억이 생각나군요...

하하하...


아무튼... 

오버라이딩을 사용하는 이유는 뭘까요?

객체지향적 관점에서 재사용은 매우 중요합니다.

굳이 있는 코드를 여러 군대에서 반복하여 작성하지 말고,

동일한 기능을 뽑아 한 곳에 정의해두고 

이를 상속받아 사용하는 것입니다.



뻔한 예시겠지만,

축구선수, 농구선수, 야구선수

이와 같은 세가지 종목의 선수들은 

모두 운동선수라는 공통 주제를 가지고 있습니다.


운동선수는 소통을 위해 소리도 지리고,

달리기도하고, 때리기(?)도 하고, 점프도 합니다.

하하하... 


이와 같이 공통적인 기능들에 대해서

굳이 축구선수, 농구선수, 야구선수

따로 따로 기능을 정의할 것이 아닌



운동선수라는 클래스에 정의를 해두고

각각 선수들이 이 운동선수를 상속받아 자신들에 맞게 사용하게되면

굳이 중복되는 코드 작성이 필요 없이

효율적으로 코드를 재사용할 수 있게 됩니다.


축구선수는

해딩을 위해 점프를 합니다.

그리고 슛을 때리지(?)요.


농구선수는

공을 잡기 위해 높이 점프를 합니다.

그리고 상대편의 공을 블락하고자 때립(?)니다.


야구선수는

공을 잡아 아웃시키기 위해 점프를 합니다.

그리고 투수의 공을 멀리 날리기 위해 배트를 사용하여 때립(?)니다.

조금... 억지지만... 하하하... 


이처럼 축구선수, 농구선수, 야구선수들은 모두

점프를 하고, 때리지만 조금씩 성격이 다른 점프와 때리기(?)를 합니다.

그런데, 소리를 지르고 달리는 행위들은 똑같지요.


이와 같이

운동선수와 같은 부모 클래스의 기능을 상속받아

자신에게 어울리도록 변경할 수 있으며(오버라이딩)

코드 추가 없이 부모의 메서드를 그대로 사용할 수도 있습니다.(상속)


'최대한 중복을 피하고 재사용하자.'

일상생활에서 코딩을 하며 머리로는 알지만

막상 실천하기 힘든...

그래도 지키기 위해 노력해야하는 중요한 다짐이자 약속입니다.


정신잡고 코딩하자 삽잡이~~