@Override 어노테이션에 대해서 알아보자
KUKJIN LEE • 3주 전 작성
주로 부모 클래스(또는 인터페이스)의 메서드를 자식 클래스에서 재정의할 때, 코드의 가독성을 높이고 컴파일러에게 의도를 명확하게 전달하기 위해 사용됩니다.
1. @Override
의 역할
-
부모 클래스의 메서드를 재정의(Override)할 때 사용
-
자식 클래스에서 부모 클래스의 메서드를 동일한 시그니처(메서드명, 매개변수, 리턴 타입)로 재정의할 때 사용합니다.
-
-
오버라이딩 여부를 컴파일러에게 명확히 알림
-
@Override
를 사용함으로써, 컴파일러가 이 메서드가 부모 클래스나 인터페이스에 있는 메서드를 올바르게 오버라이딩하고 있는지 확인합니다. 만약 오버라이딩에 오류가 있으면 컴파일 시점에 에러를 발생시킵니다.
-
-
가독성 및 유지보수성 증가
-
코드를 읽는 개발자가 해당 메서드가 부모 클래스의 메서드를 오버라이딩한 것임을 쉽게 알 수 있습니다. 이는 협업 시에도 유용합니다.
-
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
클래스는 부모 클래스 Animal
의 sound()
메서드를 오버라이딩하려고 했습니다. 그러나 자식 클래스에서 메서드 이름을 snd()
로 잘못 작성하여, 부모 클래스의 메서드를 정확하게 오버라이딩하지 못했습니다. 이로 인해 컴파일러는 @Override
어노테이션을 보고, 부모 클래스에 snd()
라는 메서드가 존재하지 않기 때문에 컴파일 에러를 발생시킵니다.4. @Override
어노테이션을 사용할 수 있는 곳
-
부모 클래스의 메서드 오버라이딩: 자식 클래스에서 부모 클래스의 메서드를 재정의할 때 사용.
-
인터페이스 구현: 클래스가 인터페이스의 메서드를 구현할 때도 사용할 수 있습니다.
interface Animal {
void sound();
}
class Dog implements Animal {
@Override
public void sound() {
System.out.println("개가 짖습니다.");
}
}
5. 결론
@Override
는 자바에서 부모 클래스나 인터페이스의 메서드를 오버라이딩할 때 사용되는 어노테이션으로, 코드의 가독성을 높이고 컴파일러가 올바르게 오버라이딩하고 있는지 확인하는 데 도움을 줍니다. 이를 통해 실수를 방지하고 코드의 유지보수성을 향상시킬 수 있습니다.