이전에 오버로딩과 오버라이딩에 대해 알아봤습니다. 하지만 둘 다 알게 되면서 갑자기 헷갈리기 시작합니다. 뭐가 오버로딩이고 오버라이딩이였지? 오버 로딩은 매개변수, 타입, 개수가 같아야 했나? 달라야 했나? 오버 라이딩이 부모 클래스에서 상속받은 것이었나?
이름도 비슷한 녀석들이 사람을 헷갈리게 만듭니다. 그래서 둘의 차이를 정리해보려 합니다.
그전에 오버로딩과 오버라이딩의 개념을 한마디로 표현하고자 합니다.
오버로딩은 호환성의 확장이라고 표현하고자 합니다. 뷰어 프로그램은 다양한 확장자의 파일을 우리가 읽을 수 있게 합니다. hwp, doc, elx, pdf, txt, dot 등 다양한 문서 프로그램들을 읽을 수 있습니다. 만약 뷰어 프로그램에 오버로딩이 안된다면 뷰어 for 한글과 컴퓨터, 뷰어 for 오피스 워드, 뷰어 for pdf 등등 확장자에 따른 버전이 따로 존재해야 됩니다. 오버로딩은 동일 기능의 적용가능 범위를 넓히는 행위입니다.
오버라이딩은 커스텀 마이징이라고 표현하고자 합니다. 커스텀 마이징이란 고객의 요구를 전적으로 반영해 맞춤제작하는 형식을 의미합니다. 고객이 가장 우선시 하는 요소들을 제품에 반영시키는 것이죠. 예를 들어 배그를 보면 총과 각종 파츠를 파밍하고 자신한테 필요한 부분은 장착하고 필요 없으면 버립니다.
M4를 얻었습니다. 하지만 아무런 파츠가 장착되어 있지 않습니다. 아무것도 달려있지 않은 M4는 조상 클래스에서 상속받은 매서드와 같습니다. 총이라는 고유의 기능은 있지만 내 입맛에 맞지 않습니다. 그래서 각 파츠들을 장착해 내가 쓰기 좋은 총이 되었습니다. 기존의 M4를 내게 가장 필요한 나에게 제일 우선시 되는 요소들을 추가, 수정하는 것이 오버라이딩의 개념입니다.
둘의 차이를 표로 정리하자면
오버로딩(OverLoading) | 오버라이딩(Overriding) | |
매서드명이 같아야? | O | O |
매개변수의 순서, 개수, 타입이 같아야? | X | O |
리턴타입이 같아야? | X | O |
조상으로 상속받는가? | X | O |
오버로딩과 오버라이딩의 개념적 차이를 잘 숙지한다면 둘이 헷갈리는 일은 적을 것 같습니다.
'자바' 카테고리의 다른 글
자바 변수의 초기화, 초기화 블럭 (0) | 2019.11.01 |
---|---|
클래스변수, 인스턴스변수, 지역변수 (0) | 2019.10.04 |
오버라이딩, overriding (0) | 2019.09.21 |
오버로딩, 오버라이딩 (0) | 2019.09.06 |
상속, this, super (0) | 2019.09.04 |