Minwoo Dev.

[Java] 메서드 오버라이딩(method overriding) 본문

Java

[Java] 메서드 오버라이딩(method overriding)

itisminu 2024. 5. 10. 17:13
728x90
반응형
SMALL

메소드 오버라이딩(method overriding)

오버라이딩이란 부모 클래스에서 상속받은 메서드를 수정하고 싶을 때, 해당 메서드를 재정의하는 것이다.


public class test{

    public static void main(String[] args) {
        B b = new B();
        b.SayHi();
    }

}

 class A{
    private int val;
    public void SayHi(){
        System.out.println("HIII!!!");
    }
}

class B extends A{
    
}

 

위와 같이 A라는 클래스가 존재한다고 하자.

A 클래스를 상속받아서 SayHi()를 실행한다면 무엇이 출력되는가 ?

 

부모 클래스의 메서드를 상속받은 것이기 때문에 그대로 HIII!!!가 출력된다.

 

만약, 상속받은 자식 클래스에서 SayHi()의 기능을 수정하고 싶다면 어떻게 해야하겠는가 ?

 

함수를 새로 하나 정의하는 방법이 있을 것이다.

public class test{

    public static void main(String[] args) {
        B b = new B();
        b.SayHi2();
    }

}

 class A{
    private int val;
    public void SayHi(){
        System.out.println("HIII!!!");
    }
}

class B extends A{
    public void SayHi2(){
        System.out.println("Hello!!");
    }
}

 

위처럼 코드를 작성한다면 우리가 원하는대로 Hello!!!가 출력된다.

 

위의 방식이 깔끔해 보이는가 ?

아니다, 우리는 새로운 것을 추가하는 것을 최소화시켜야 한다.

 

이러한 방법은 메모리 상에 하나의 함수를 추가하는 것이기 때문에 비효율적이다.

 

 

우리는 메서드 오버라이딩(method overriding)을 사용해야 한다.

 

즉, A라는 클래스를 상속받아서 SayHi라는 메서드를 Hello!!!가 출력되도록 바꾸고 싶다면 오버라이딩을 사용해야 한다.

 

오버라이딩(overriding)은 재작성할 메서드의 형식과 동일하게 작성한다.

package chapter06;

public class test{

    public static void main(String[] args) {
        B b = new B();
        b.SayHi();
    }

}

 class A{
    private int val;
    public void SayHi(){
        System.out.println("HIII!!!");
    }
}

class B extends A{
    public void SayHi(){ // 오버라이딩
        System.out.println("Hello!!");
    }
}

 

위 코드를 보면 A 클래스를 B 클래스가 상속하였고, 상속받은 B 클래스에서 A 클래스의 SayHi()와 동일한 형식으로 메서드를 작성하여 안의 내용만 변경한 것을 확인할 수 있다.

 

 

이러한 과정을 우리는 오버라이딩(overriding)이라고 한다.

 

 

 

추가적으로, Java IDE 중 IntelliJ에서는 @override 라는 어노테이션을 사용한다.

적어주지 않아도 오버라이딩하는 데에는 문제가 없지만, 특정 개발 분야에 따라 명시해줘야 하는 곳도 있기 때문에 기입해주는 것이 좋다.

728x90
반응형
LIST