목표: 오버라이딩에 대하여 정확하게 알고, 오버로딩과 오버라이딩의 차이를 생각해보자.
메서드 오버로딩에 관해서는 앞서 공부한 바가 있다.
간단하게 다시 살펴보자면, 메서드 오버로딩은 코드의 중복성을 줄여 재사용성을높이며 사용자에게 매개변수의 자율성을 제공하기 위해 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것이다. 이때 각 메서드는 이름이 같고, 매개변수의 개수 또는 타입이 다르게 구현되어야 한다.
다만, 반환타입은 아무런 영향을 미치지 않는다.
다음은 오버로딩의 간단한 예시다.
add 와 sub 라는 동일한 이름의 메서드를 매개변수 0개, 2개로 각각 2개씩 나누어 오버로딩 하였다.
물론, 답은 300, 100으로 2번 반복되어 나오지만 오버로딩의 기능을 확인해 볼 수 있는 예시다.
이러한 메서드 오버로딩은 생성자에도 적용하여 사용할 수 있음을 앞서 확인했었다.
다음으로, 메서드 오버라이딩에 대하여 알아보자.
오버라이딩은 상속을 전제로 한다.
상속받은 자식 클래스는 부모(조상) 클래스의 변수나 메서드를 받아 사용하는데, 여기에서 예외를 만들고 싶을 때 사용하는 것이다.
따라서 메서드 오버라이딩을 사용하려면, 부모 클래스와 이름이 완전히 같아야 하고, 매개변수, 반환 타입 역시 같아야 한다.
즉, 선언부가 일치해야 한다.
다음은 오버라이딩의 예시다.
Point3D 클래스는 extends 를 활용하여 Point 클래스를 상속받았다는 점을 알 수 있다.
getLocation 함수를 두 클래스에 동일한 선언부로 설정한 후, return 값을 다르게 설정했다.
main 메서드에서 자식 클래스를 객체 생성했으므로, 본래 부모 클래스의 getLocation 메서드를 활용할 수 있지만, 위의 경우에는 오버라이딩을 활용했으므로, Point3D의 getLocation이 찍히게 된다.
이러한 경우에, 부모 클래스의 getLocation 메서드를 활용하고 싶다면, 위와 같이 부모클래스의 객체생성을 따로 하여 활용하거나, 자식클래스의 getLocation 메서드 안에 super.getLocation(); 을 활용하는 두 가지 방법이 있다.
끝으로, 오버라이딩과 오버로딩의 차이점을 다시 한 번 요약해보자.
본질적으로, 오버로딩은 한 클래스 내에서 중복을 제하고 코드의 재사용성을 늘리기 위한 방법이고 오버라이딩은 상속 관계에서 예외를 만들기 위해 부모 클래스 내의 메서드를 자식 클래스에 그대로 작성하는 방법이다.
따라서 오버로딩은 매개변수에 차이가 있으며, 또 반환 타입을 신경쓰지 않아도 되는 반면, 오버라이딩은 선언부가 완전히 동일해야 하므로 매개변수, 반환타입 등 역시 동일해야 한다는 점을 알 수 있다.
'Study > Java' 카테고리의 다른 글
[자바] 인터렉션 연습문제 _ 그래픽카드 (0) | 2023.12.01 |
---|---|
[자바]1130 수업 소스코드 아카아브 (0) | 2023.11.30 |
[자바] 인터페이스 예제 풀이 (0) | 2023.11.29 |
[자바] 초기화 블록과 생성자, 초기화블록의 실행 순서 (0) | 2023.11.20 |
[자바] 생성자, this 의 사용 (0) | 2023.11.17 |
댓글