Post

JAVA - Override

JAVA - Override

1. @Override란?

Java에서 @Override상위 클래스나 인터페이스로부터 상속받은 메서드를 재정의(Override)할 때 사용하는 **애너테이션(annotation)**이다.

1
2
3
4
@Override
public void run() {
    // 부모 클래스의 run() 메서드를 재정의
}

2. 왜 사용하는가?

✅ 컴파일러에게 재정의임을 명시

  • 상위 클래스 또는 인터페이스에 동일한 시그니처의 메서드가 없으면 컴파일 에러 발생.
  • 오타, 시그니처 불일치 등 실수를 컴파일 타임에 잡아준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Animal {
    public void speak() {
        System.out.println("Animal speaks");
    }
}

class Dog extends Animal {
    @Override
    public void speak() {
        System.out.println("Dog barks");
    }

    // 아래는 오타가 있어 컴파일 에러 발생
    /*
    @Override
    public void speek() {
        System.out.println("Wrong method name");
    }
    */
}

3. 인터페이스 구현 시에도 사용

자바 6부터는 인터페이스 구현 시에도 @Override 사용 가능하다.

1
2
3
4
5
6
7
8
9
10
interface Clickable {
    void onClick();
}

class Button implements Clickable {
    @Override
    public void onClick() {
        System.out.println("Button clicked");
    }
}

4. 안 써도 되는가?

기능적으로는 안 써도 동작은 한다. 하지만 실수를 방지하고 코드 가독성을 높이기 위해 항상 명시적으로 사용하는 것이 권장된다.


5. 사용 시 주의할 점

  • 접근 제어자 범위를 줄일 수 없다. (protectedprivate 불가)
  • 반환 타입이 다르면 재정의가 아니다.
  • 부모 클래스에 해당 메서드가 없으면 컴파일 에러 발생.

6. 정리

항목설명
의미부모 클래스나 인터페이스의 메서드를 재정의할 때 사용
이점컴파일 타임 체크, 가독성 향상, 실수 방지
의무 여부필수는 아니지만 권장
대상클래스 상속 메서드, 인터페이스 메서드 모두 가능
This post is licensed under CC BY 4.0 by the author.