티스토리 뷰
스프링 부트로 상품 관리 서버를 만들던 중, 리스트(DB는 아직..)에 저장되어 있는 Product를 update하는 중이었다.
이때, indexOf()를 사용해서 기존 리스트에 있던 Product의 인덱스를 가져오는 코드를 짜고 있었는데,
계속 기존 리스트에 있던 Product를 찾지 못해, -1을 반환하는 문제가 발생하였다.
리스트에서 사용했을 때, "(가장 먼저 찾은) 동일한 요소의 인덱스를 반환"하는 indexOf()의 특성때문에,
컨트롤러에서 받아온 Product와는 id가 같더라도 참조하고 있는 주소값은 다르기 때문에( indexOf() : equals() 사용함),
무조건 -1을 반환하는 문제가 발생한 것이다.

즉, equals 메서드를 id값만 같다면 같은 인스턴스로 인식하도록 "오버라이딩" 해줘야 하는 것이다.
그렇기에 이번 포스팅에서는 오버라이딩에 대해서 정리할 것이다.
오버라이딩 : 부모 클래스로 부터 상속받은 메서드의 내용을 재정의 하는 것
물론 상속받은 메서드를 그대로 사용해도 되지만 자식클래스에서 변경해야 하는 경우가 있을 수 있다.
오버라이딩은 부모 클래스의 메서드 내용을 재정의하는 것이다.
다시 말해, 메서드 선언부는 똑같이 놔두고, 메서드의 내용만을 재정의 하는것이다
좀 더 자세히 오버라이딩 규칙을 알아보자.
1. 자식 클래스의 오버라이딩 하려는 메서드는 부모 클래스의 메서드와
- 이름이 같아야함.
- 매개변수가 같아야함.
- 반환타입이 같아야 한다.
= 메서드 선언부는 부모와 완전히 일치해야한다.
2. 접근 제어자는 조상클래스의 메서드보다 좁은 범위로 변경할 수 없다.
- ex)
부모클래스 : public void xxx( ){ . . . } ,
자식클래스 : protectecd void xxx( ){ . . . } // 에러!!-
( 참고: public -> protect, -> (default), -> private 접근 범위가 좁아진다. )
3. 부모 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다. (즉, 부모 클래스에는 없는 새로운 예외를 throws 할 수 없다)
- ex)
부모클래스 : void xxx ( ) throws IOException, SQLException { . . . }
자식클래스: void xxx ( ) throws Exception { . . . }
→ 단순 개수 문제가 아님. Exception 은 모든 예외의 최고 부모이다. 가장 많은 개수의 예외를 던질 수 있다.
4. 인스턴스 메서드를 static 메서드 또는 그 반대로 변경할 수 없다.
아래는 기본 사용 예제이다.
class Car{
void drive(){
System.out.println("기름을 써서 출발");
}
}
class EvCar extends Car{
@Override
void drive(){
System.out.println("전기를 써서 출발");
}
}
class overrridingEX {
public static void main(String[] args) {
Car car = new Car();
car.drive();
EvCar evCar = new EvCar();
evCar.drive();
}
}
결과 )
기름을 써서 출발
전기를 써서 출발
또, 내가 만난 상황에서는 이렇게 코드를 짜서 해결할 수 있었다.

→ 같은 Id를 가진 Product인 경우, 동일한 인스턴스로 인식하도록 오버라이딩 한 것이다.
참고 ↓ )
오버라이딩(overriding) + super( ) - JAVA
오버라이딩(overriding) + super( ) - JAVA
오버라이딩이란? 부모 클래스로부터 상속받은 메서드의 내용을 재정의(변경) 하는 것을 오버라이딩이라고 한다. 물론 상속받은 메서드를 그대로 사용해도 되지만 자식클래스에서 변경해야 하
dding9code.tistory.com
'Java' 카테고리의 다른 글
| 자바 - return 하면서 변수를 선언할 수 없음!! (0) | 2025.11.12 |
|---|---|
| 자바 - 제네릭 와일드 카드 기본 (0) | 2025.11.04 |
| 자바 - 커스텀 예외 만들기 (0) | 2025.11.01 |
| 자바 - enum 정리 ( enum 개념 및 예제, enum 매핑 활용 예제 ) (0) | 2025.10.30 |
| 자바 - throws 키워드 개념 및 예제 (0) | 2025.10.28 |