Programming/Java

[Java] 메소드 오버라이딩 (Method Overriding)

Isaac S. Lee 2023. 8. 2. 11:57
 

Java 메소드 오버로딩 (Method Overloading)

메소드마다 이름을 다르게 하여 기능을 명확하게 할 수도 있지만, 프로젝트가 커질수록 메소드의 개수 또한 많아지므로 모두 기억하고 사용하기 어렵다. 이때 사용할 수 있는 게 메소드 오버로

isaac-christian.tistory.com

지난번에 메소드 오버로딩(Method Overloading)을 살펴봤다.

메소드 오버로딩은 인자 리스트를 변화시키며 이름이 동일한 메소드를 여러 개 생성하는 기술이었다.

 

그렇다면 메소드 오버라이딩(Method Overriding)은 무엇일까? 이름이 비슷하긴 하지만 두 기술은 전혀 다른 기능을 제공한다.

메소드 오버라이딩은 클래스 상속 시에 발생하며, 메소드 재정의하여 상속받은 메소드를 수정하는 기술이다.

예시를 살펴보며 메소드 오버라이딩에 대해 이해해보도록 하자!

 

💡메소드 오버라이딩의 활용


public class Ex_Overriding {
	public static void main(String[] args) {
		OverrideParent hong = new OverrideParent();
		hong.name = "홍게";
		hong.hello();
		
		OverrideChild hongchild = new OverrideChild();
		hongchild.name = "홍소라게";
		hongchild.hello();
	}
}
class OverrideParent {
	public String name;
	
	public void hello() {
		System.out.printf("안녕하세요. 좋은 아침입니다. 저는 %s입니다.\n", this.name);
	}
}

class OverrideChild extends OverrideParent {
	// 메소드 오버라이드
	@Override
	public void hello() {
		System.out.printf("하이~ 난 %s야~.\n", this.name);
	}
    
	/*
	// 이렇게 사용하지 않는다.
	public void hi() {
		System.out.printf("하이~ 난 %s야~.\n", this.name);
	}
	*/
}

홍소라게는 홍게가 알려준 인사 방식이 마음에 들지 않았다.
자식 클래스는 부모 클래스가 물려준 hello() 메소드를 사용하기 싫었지만 클래스 상속은 부모가 물려준 멤버를 자식이 거부할 방법이 없다!
이럴 때 사용할 수 있는 게 메소드 재정의이다.

 

메소드 재정의(오버라이드)를 하면 홍소라게는 동일한 hello()를 2개 가지게 된다. 하지만 그렇다고 해서 에러가 발생하지는 않는다.
자식 이기는 부모 없다고 무조건 자식이 우선되며, 자식의 hello()가 호출된다.
사실 두 개의 hello() 메소드는 이름이 똑같을 뿐이지 서로 다른 메소드이다. 그럼에도 불구하고 수정했다고 표현하는 이유는 겉으로 보기에 물려 준 것을 고쳐 쓰는 것처럼 보이기 때문이다.

 

어노테이션 (Annotation)

@Override

어노테이션은 프로그램의 기능이 있는 주석이다. 위에서는 재정의 되고 있는 메서드라는 것을 확실하게 알려주는 기능을 하며, 가독성을 높여주기 위한 코드 관리 차원의 주석이다.

어노테이션은 코드 자동완성 기능을 사용했을 때 자동으로 붙는다는 특징이 있다.