공부 기록
[Java] 오버라이딩을 구현할 때, @Override를 꼭 써야할까? 본문
들어가며
객체지향의 4가지 특징과 인터페이스를 공부하며 메서드 오버라이딩(메서드 재정의)도 함께 공부하였다.
오늘은 오버라이딩을 구현할 때 별생각 없이 써왔던 @Override 어노테이션이 반드시 필요한지 고민하는 시간을 가졌다.
오버라이딩과 @Override 어노테이션
오버라이딩(Overriding)
메서드 오버라이딩이란 부모 클래스로부터 상속받은 메서드 혹은 인터페이스의 추상메서드를 자식 클래스 혹은 구현 클래스에서 재정의하는 것을 말한다.
메서드를 오버라이딩할 때는 다음과 같은 주의 사항이 있다.
- 부모 메소드의 선언부(리턴 타입, 메서드 이름, 매개변수)와 동일해야 한다.
- 접근 제한을 더 강하게 할 수 없다.
- 새로운 예외를 throws할 수 없다.
자바의 어노테이션(Annotation)
개념
자바 어노테이션은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종으로 보통 @ 기호를 앞에 붙여서 사용한다.
용도
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
- 소프트웨어 개발툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
- 실행 시(런타임 시) 특징 기능을 실행하도록 정보를 제공
@Override 어노테이션
자바는 개발자의 실수를 줄여주기 위해 정확히 오버라이딩이 되었는지 체크해 주는 @Override 어노테이션을 제공한다. @Override를 붙이면 컴파일 단계에서 정확히 오버라이딩이 되었는지 체크하고, 문제가 있다면 컴파일 에러를 출력한다.
class Parent {
public void hello(String name) {
System.out.println("안녕하세요, 저는 " + name + "입니다.");
}
}
class Child extends Parent{
@Override
public void hello() {
System.out.println("안녕!");
}
}
위 코드를 보면 부모 클래스의 hello메서드에는 매개변수가 있지만 자식 클래스에서는 매개변수가 없다.
이때, @Override 어노테이션을 붙이면 자식 클래스의 hello 메서드는 부모 클래스에 없는 메서드이기 때문에 컴파일 에러를 표시한다.
만약 @Override를 붙이지 않는다면 메서드의 이름은 동일하지만 매개변수가 없기 때문에 다른 메서드가 된다. 따라서 Child 객체를 생성하고 hello() 메서드와 hello(String name) 메서드를 모두 호출할 수 있다.
그렇다면, @Override어노테이션이 반드시 필요할까?
@Override어노테이션을 사용하지 않는다고 해서 문제가 발생하지는 않지만, @Override를 작성했을 때 어떤 메서드를 오버라이딩 했는지 직관적으로 알 수 있고, 코드를 작성할 때 실수를 방지할 수 있기 때문에 사용하는 것이 좋다고 생각한다.
나가며
그동안 고민 없이 @Override를 사용했는데 내가 쓰는 어노테이션에 대해 생각해볼 수 있었다.
무엇을 쓰던 '이유'가 있어야 한다는 송아쌤의 말을 다시 한번 곱씹는 시간이 되었다!
참고자료
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 인터페이스(Interface) (0) | 2024.01.03 |
---|---|
[Java] Java와 객체 지향 프로그래밍 (0) | 2024.01.02 |