To Dare Is To Do!
오버라이딩을 구현할 때 @Override 어노테이션은 반드시 필요할까? 본문
어노테이션이란?
- 사전적 의미로 주석을 의미하는 어노테이션은 자바에서 코드 사이에 쓰이며 특별한 의미와 기능을 수행할 수 있도록 추가적인 정보를 제공하는 기술이다.
- 대표적으로 코드 작성 시 문법 에러를 체크하도록 정보를 제공하거나 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
오버라이딩을 구현시 override 어노테이션의 유무는 어떤 차이가 있을까?
class Parent {
public void hello(String name) {
System.out.println("안녕하세요, 저는 " + name + "입니다.");
}
}
class Child extends Parent{
// @Override가 없다면?
public void hello() {
System.out.println("안녕!");
}
}
위의 코드에서 부모 객체는 name이라는 매개변수를 받는 메서드 hello()를 가지며 부모 객체를 상속 받은 자식 객체에서는 같은 이름의 hello()라는 메서드를 가지고 있다.
이를 실행해보면
public class Prac {
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
p.hello("손흥민");
c.hello();
}
}
<결과>
안녕하세요, 저는 손흥민입니다.
안녕!
Parent의 hello()와 Child의 hello()는 별개의 메서드로 취급되어 각각의 결과를 확인할 수 있다.
이번에는 코드에 @Override 어노테이션를 추가해보니
class Parent {
public void hello(String name) {
System.out.println("안녕하세요, 저는 " + name + "입니다.");
}
}
class Child extends Parent{
@Override //@Override 어노테이션이 있다면?
public void hello() {
System.out.println("안녕!");
}
}
"Method does not override method from its superclass"와 같은 컴파일 에러메시지를 통해 부모 클래스의 메서드와 자식 클래스의 메서드가 일치하지 않는다는 경고를 확인할 수 있었다.
정리해 보면 오버라이딩을 구현할 때 @Override 어노테이션을 사용한다면 컴파일 오류의 발생 여부에 따라 내 의도대로 메서드가 오버라이드 되었는지 확인할 수 있는 안전장치의 역할을 기대할 수 있을 것이다.
'Spring' 카테고리의 다른 글
HTTP Method (1) | 2023.11.06 |
---|---|
Spring 3계층 속 DI (0) | 2023.11.05 |
직접 만들고 뜯어본 Controller (1) | 2023.11.03 |
스프링의 꽃, 3계층 (0) | 2023.10.31 |
DI와 IoC (0) | 2023.10.31 |