[Java] @Override 꼭 적어야 하나?

2023. 5. 4. 20:59·개발/JAVA
728x90
반응형

정해진 인터페이스를 구현하는 경우 인터페이스가 가진 메소드들은 꼭 @Override 를 적어 재정의를 해줘야 한다.

 

이처럼 Override는 재정의를 위해 덮어쓴다는 표현이다.

 

그렇다면 구현이 아닌 확장의 경우도 꼭 적어야 할까라는 생각이 든다.

 

extends(확장)의 경우 부모가 가진 메소드를 굳이 재정의 해주지 않아도 사용할 수 있다.

하지만 부모가 가진 메소드를 내 입맛대로 바꾸면서 재정의를 하려고 한다면 @Override를 적어줘야 한다.

 

아래와 같이 똑같은 코드인데 @Override가 있고 없음에 따라 결과가 달라질 수 있다.

class Hi {
    public void say() {
        System.out.println("안녕");
    }
}

class Bye extends Hi {
    public void say(String name) {
        System.out.println(name + "아 잘가");
    }
}

위 처럼 같은 say 메소드지만 상속을 받는 Bye클래스에서의 say는 매개변수를 필요로 한다.

이는 오버로딩(Overloading)이다.

결국 Hi 클래스의 say 메소드와 Bye 클래스의 say 메소드 둘다 사용할 수 있다.

하지만 여기서 @Override가 들어가게 되면?

class Hi {
    public void say() {
        System.out.println("안녕");
    }
}

class Bye extends Hi {
    @Override
    public void say(String name) {
        System.out.println(name + "아 잘가");
    }
}

@Override는 내 입맛대로 바꿔 재정의 하는 것이라고 앞서 말했다.

하지만 위 코드는 매개변수가 있고 없고의 차이로 인해 아예 다른 메소드가 되어 버렸다.

그렇기 때문에 컴파일 오류가 난다.

그래서 @Override를 하려고 한다면 아래와 같이 형식을 맞춰줘야 한다.

 

class Hi {
    public void say(String name) {
        System.out.println("안녕");
    }
}

class Bye extends Hi {
    @Override
    public void say(String name) {
        System.out.println(name + "아 잘가");
    }
}

이렇게 되면 Hi 클래스의 say 메소드를 Bye 클래스의 say 메소드로 재정의 하였기 때문에

Bye 클래스의 say메소드만  사용할 수 있게 된다.

 

이처럼 @Override가 있냐 없냐에 따라 코드의 컴파일 여부를 결정지을 수 있다.

 

사소한것 처럼 보여도 전혀 사소하지 않은 부분이었다.

728x90
반응형

'개발 > JAVA' 카테고리의 다른 글

[Java] 필드 주입시 생성자에 this 꼭 써야할까?  (0) 2023.06.05
[Java] 인터페이스가 가진 객체지향의 특징  (0) 2023.05.03
[Java] List<T> list = new ArrayList<>();  (0) 2023.04.25
[JAVA] 입력 받은 숫자가 소수인지 판단하는 문제 뜯어보기  (0) 2023.04.06
[JAVA] java 기본개념 (+ jshell)  (0) 2023.04.04
'개발/JAVA' 카테고리의 다른 글
  • [Java] 필드 주입시 생성자에 this 꼭 써야할까?
  • [Java] 인터페이스가 가진 객체지향의 특징
  • [Java] List<T> list = new ArrayList<>();
  • [JAVA] 입력 받은 숫자가 소수인지 판단하는 문제 뜯어보기
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    하이퍼레저
    mysql
    CSS
    node.js
    erc20
    블록체인
    js
    go
    html
    ERC721
    nodejs
    명령어
    30일챌린지
    도커
    go언어
    컨테이너
    React
    프로그래머스
    node
    30일 챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[Java] @Override 꼭 적어야 하나?
상단으로

티스토리툴바