[JAVA] @Override 오버라이드 에러 발생 원인 및 해결 방법 : The method [함수명 METHOD] of type [이슈가 발생한 JAVA 파일명] must override or implement a supertype method
원본 소스 코드
package com.freewill.fleamarket.review.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.stereotype.Service;
import com.freewill.fleamarket.review.model.ReviewVO;
import com.freewill.fleamarket.review.service.ReviewService;
import com.freewill.fleamarket.review.mapper.ReviewMapper;
import java.util.List;
@Service
public class ReviewServiceImpl implements ReviewService {
@Resource(name = "reviewMapper")
private ReviewMapper reviewMapper;
@Override
public List<ReviewVO> selectReviewList() throws Exception {
return reviewMapper.selectReviewList();
}
}
이슈 문구
The method selectReviewList() of type ReviewServiceImpl must override or implement a supertype method
이슈 원인
자바 버전에 따른 @Override 어노테이션 문제
해결 방법
- Java 자바 버전을 확인한다.
- 프로젝트 JDK 버전은 최소 1.6 이상이어야 한다.
- 프로젝트에 설정된 JDK 버전과 실제 환경변수 - Path에 설정한 JDK의 버전이 동일한지 확인한다.
- 자바 버전 확인하는 방법 :
- 일치한 경우 > 2번으로 넘어가기
- 불일치한 경우 > 환경변수 재 설정하기
- @Override 어노테이션 삭제하기
- 1번에서 자바 버전을 확인했으나 환경설정에 이상이 없다면 어노테이션을 삭제한다
변경 소스 코드
package com.freewill.fleamarket.review.service;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.stereotype.Service;
import com.freewill.fleamarket.review.model.ReviewVO;
import com.freewill.fleamarket.review.service.ReviewService;
import com.freewill.fleamarket.review.mapper.ReviewMapper;
import java.util.List;
@Service("reviewService")
public class ReviewServiceImpl implements ReviewService {
@Resource(name = "reviewMapper")
private ReviewMapper reviewMapper;
public List<ReviewVO> selectReviewList() throws Exception {
return reviewMapper.selectReviewList();
}
}
내 경우는 개발 환경 세팅의 문제는 아니었고 @Override 어노테이션 문구를 삭제하니까 에러 표시가 사라진 것을 확인할 수 있었다.
*코드 출처 : https://rwd337.tistory.com/164
지워도 상관이 없었다면 @Override는 그럼 왜 작성했던 걸까?
더 보러 가기 👇
질문: @Override 는 어떨때 사용하는지 궁금합니다.
Print라는 interface를 implements 할때 @Override라는 어노테이션을 붙이던데요, 이게 왜 붙어야 하는지 어떤 역할을 해주는지가 궁금합니다..
interface를 implement했기 때문에 print 메소드가 오버라이드인것은 알겠는데 굳이 @Override 애노테이션을 왜 붙어야 하는것인지 주로 어떤이유와 상황에서 사용되는지 궁급합니다.
자바스크립트만 공부하고 리액트로 프론트업무를 하다가 스프링부트 개발로 전향하려고 나름 공부를 하고는 있는데 의문이 생기는 부분이 많습니다..ㅜㅜ 앞으로도 질문을 많이드릴것 같아 상황에 대해 주절주절 언급드렸습니다!
답변: 상속받은 메서드를 재정의할 때 메서드 이름이 틀리지 않게 쓰기 위한 어노테이션입니다~
상속받은 메서드를 재정의할 때 메서드 이름이 틀리지 않게 쓰기 위한 어노테이션입니다~
가령 부모 객체에 printerA 라는 메서드가 있고 상속을 받은 객체에서 printerA 를 재정의해서 쓰고 싶을 때 만약 printerAA 라고 오타를 입력하고 만들 수 있습니다.
이 경우 @Override 어노테이션이 붙어 있었다면 부모 객체엔 이런 메서드가 없어 하고 에러를 내 줍니다.
@Override 어노테이션이 붙어 있지 않았다면 상속 받은게 아니고 그냥 새로운 메서드를 만들어 쓴 것이기 때문에 컴파일러는 에러를 내지 않습니다.
결론적으로, 사람의 실수를 막아 주기 위한 어노테이션입니다 ^^
*출처: 인프런
@Override 는 어떨때 사용하는지 궁금합니다. - 인프런 | 질문 & 답변
Print라는 interface를 implements 할때 @Override라는 어노테이션을 붙이던데요, 이게 왜 붙어야 하는지 어떤 역할을 해주는지가 궁금합니다.. interface를 implement했기 때문에 print 메소드가 오버라이드인것
www.inflearn.com
'Dev 개발 스터디 (동면 중) > Dev_log+Study 😶🌫️' 카테고리의 다른 글
타임리프 each 문법과 for 문의 차이 (0) | 2023.02.26 |
---|---|
[JAVA] addAttribute 에러 : 모델Model 객체 사용법 (0) | 2023.02.25 |
[CRUD_게시판 만들기] 03. Delete : 글 삭제 프로세스 (0) | 2023.02.23 |
[CRUD_게시판 만들기] 02. Read : 글 조회 프로세스 (0) | 2023.02.23 |
[CRUD_게시판 만들기] 01. Create : 글 등록 프로세스 (0) | 2023.02.15 |