Overriding? Overloading?
다향성에 대해서 설명해보세요.
객체지향 프로그래밍의 특징 중 하나인 다형성(polymorphis)은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해 주고, 같은 클래스 내에 코드의 길이를 줄여주는 것까지 도와주는 고마운 개념입니다. 이런 특징 덕분에 소프트xx마에스트로, Nxx엔터, 티xx스터 등 기술면접을 실시하는 여러 회사에서 단골 주제로 등장하기도 합니다. 다형성은 한 번에 와 닿기 힘든 개념인 만큼, 여러 번 반복해서 공부할 필요가 있는 주제라고 생각합니다.
일단 관용적인 개념의 다형성은 같은 모양의 코드가 다른 행위를 하는 것을 나타냅니다. 우리가 핸드폰에 있는 키패드로 다이얼을 누르기도 하고, 문자를 하기도 하며, 심지어 게임을 하는 것까지 가능한 것처럼 모양은 같은데 다른 기능을 수행하는 것은 디바이스 기반의 다형성의 한 예라고 할 수 있습니다.
같은 맥락에서 자바 프로그래밍에 이 다형성의 개념을 녹여내는 방법은 두 가지가 있습니다. 비슷한 이름이지만 전혀 다른 개념이니 (마치 자바와 자바스크립트처럼?) 헷갈리지 않도록 주의해야 합니다.
#Overriding
오버 라이딩은 슈퍼클래스를 상속받은 서브 클래스에서 슈퍼 클래스의 (추상) 메소드를 같은 이름, 같은 반환 값, 같은 인자로 메소드 내의 로직들을 새롭게 정의하는 것을 말합니다. 이를 이용하면 하나의 슈퍼 클래스를 상속받는 여러 서브 클래스들이 같은 이름에 다른 기능을 하는 메소드를 정의하고 사용하게끔 할 수 있습니다. 오버 라이딩을 이용해서 같은 이름이지만 구현하는 클래스마다 다른 역할을 하는 메소드를 정의하고 있죠? 마치 키패드라는 모양을 가졌지만 게임을 하고, 문자를 보내는 것처럼 말이죠.
#Overloading
오버 로딩은 하나의 클래스에서 같은 이름의 메소드들을 여러 개 가질 수 있게 합니다. 단, 메서드 인자들은 달라야 합니다. ( 반환 타입은 같아도 되고 달라도 됩니다. ) 인자들의 타입이나 개수가 다르면 메소드 이름이 같더라도 어떤 메소드를 호출할지 컴파일러가 알 수 있기 때문입니다. 그런데 왜 굳이 이렇게 같은 클래스 내에서 메소드 이름을 같게 주는 것일까요? 유사한 일을 수행하면서 인자만 다른 메소드들에 대해 각기 다른 이름을 준다면 사용하기 매우 불편할 것입니다. 마치 키패드에 문자용 키패드를 따로 만들고, 게임용 키패드를 따로 만드는 것처럼 비효율적인 것이죠.
다형성의 개념을 물어보는 질문들은 보통 OOP가 왜 다형성을 왜 구현했는지, 어떻게 구현했는지 물어보는 게 핵심이고 추가적으로 오바라이딩과 오버로딩의 특징에 대해서 잘 알고 있냐는 확인하는 질문이기도 합니다.
때문에 아래 링크들에 대해서 자세히 공부해보시면 더 큰 도움이 될 거라 생각합니다.
https://opentutorials.org/module/516/6127
아래 URL은 광고입니다. 도움이 되셨다면 클릭 부탁드려요 :D
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다.