@Override 어노테이션에 대해서 알아보자

KUKJIN LEE's profile picture

KUKJIN LEE3주 전 작성

주로 부모 클래스(또는 인터페이스)의 메서드를 자식 클래스에서 재정의할 때, 코드의 가독성을 높이고 컴파일러에게 의도를 명확하게 전달하기 위해 사용됩니다.

 

1. @Override의 역할

  1. 부모 클래스의 메서드를 재정의(Override)할 때 사용

    • 자식 클래스에서 부모 클래스의 메서드를 동일한 시그니처(메서드명, 매개변수, 리턴 타입)로 재정의할 때 사용합니다.

  2. 오버라이딩 여부를 컴파일러에게 명확히 알림

    • @Override를 사용함으로써, 컴파일러가 이 메서드가 부모 클래스나 인터페이스에 있는 메서드를 올바르게 오버라이딩하고 있는지 확인합니다. 만약 오버라이딩에 오류가 있으면 컴파일 시점에 에러를 발생시킵니다.

  3. 가독성 및 유지보수성 증가

    • 코드를 읽는 개발자가 해당 메서드가 부모 클래스의 메서드를 오버라이딩한 것임을 쉽게 알 수 있습니다. 이는 협업 시에도 유용합니다.

 

2. 사용 예시

class Animal {
    public void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("개가 짖습니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.sound();  // "개가 짖습니다." 출력
    }
}
Dog 클래스는 Animal 클래스의 sound() 메서드를 오버라이딩하고 있습니다. @Override 애노테이션은 Dog 클래스의 sound() 메서드가 부모 클래스의 sound() 메서드를 올바르게 재정의하고 있음을 표시합니다.
 

3. @Override의 장점

  • 오타 방지: 만약 메서드 이름을 잘못 입력했거나, 매개변수나 리턴 타입이 부모 클래스의 메서드와 일치하지 않는 경우 컴파일 시점에서 에러를 발생시켜 실수를 방지할 수 있습니다.

class Animal {
    public void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    @Override
    public void snd() {  // 오타가 있을 경우
        System.out.println("개가 짖습니다.");
    }
}
 Dog 클래스는 부모 클래스 Animalsound() 메서드를 오버라이딩하려고 했습니다. 그러나 자식 클래스에서 메서드 이름을 snd()로 잘못 작성하여, 부모 클래스의 메서드를 정확하게 오버라이딩하지 못했습니다. 이로 인해 컴파일러는 @Override 어노테이션을 보고, 부모 클래스에 snd()라는 메서드가 존재하지 않기 때문에 컴파일 에러를 발생시킵니다.
 

4. @Override 어노테이션을 사용할 수 있는 곳

  1. 부모 클래스의 메서드 오버라이딩: 자식 클래스에서 부모 클래스의 메서드를 재정의할 때 사용.

  2. 인터페이스 구현: 클래스가 인터페이스의 메서드를 구현할 때도 사용할 수 있습니다.

interface Animal {
    void sound();
}

class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("개가 짖습니다.");
    }
}
 

5. 결론

@Override는 자바에서 부모 클래스나 인터페이스의 메서드를 오버라이딩할 때 사용되는 어노테이션으로, 코드의 가독성을 높이고 컴파일러가 올바르게 오버라이딩하고 있는지 확인하는 데 도움을 줍니다. 이를 통해 실수를 방지하고 코드의 유지보수성을 향상시킬 수 있습니다.

 

New Tech Posts