인프런 커뮤니티 질문&답변
equals의 재정의(overriding)에 대해서
해결된 질문
작성
·
37
·
수정됨
0
먼저, 이렇게 양질의 강의 올려주셔서 정말 감사드립니다. 잘 듣고 있습니다.
49강의 실습에서 equals 메소드를 재정의한다고 말씀하셨습니다.
그런데, MyString은 Object로부터 equals(Object)를 상속 받았고, 강의에서 보여주신 코드에서는 equals(MySring)을 정의했으므로, 메소드 시그니처가 달라 재정의(overriding)보다는 overloading이 더 적절한 표현이 아닌가 싶어서 질문드립니다. 실제로 인텔리제이에서 equals(MyString)에 @Override 어노테이션을 붙이려하면 아래의 사진과 같은 오류가 발생합니다.

아니면 제가 재정의에 대해서 오해하고 있는 부분이 있는걸까요?
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. IIIllIllII님, 강의와 관련된 질문에 대해 설명드리겠습니다.
질문해주신 내용에서는 메소드 재정의(Overriding)와 오버로딩(Overloading)에 대한 이해가 핵심입니다.
메소드 재정의(Overriding):
Overriding은 상위 클래스에서 정의된 메소드를 하위 클래스에서 동일한 파라미터 목록(시그니처)으로 다시 정의하는 것입니다.
- 기본적으로
Object클래스에서equals메소드는equals(Object obj)로 정의되어 있습니다. 따라서 이 메소드를 재정의하려면 동일하게equals(Object obj)라는 시그니처를 가져야 합니다.
메소드 오버로딩(Overloading):
Overloading은 같은 이름의 메소드를 여러 개 두되, 매개 변수의 타입이나 개수가 달라야 할 경우 사용됩니다. 이런 경우에는 메소드의 이름은 같지만 시그니처가 다릅니다.
- 질문에서 언급하신
equals(MyString)은 기존equals(Object)와 시그니처가 다르기 때문에 재정의가 아닌 오버로딩으로 봐야 합니다.
오류 발생:
@Override어노테이션은 정확히 재정의하는 경우에만 사용할 수 있습니다.equals(MyString)는equals(Object)와 다르기 때문에 어노테이션을 붙일 수 없고,Overriding이 아닌Overloading입니다.
해당 강의나 실습에서 equals 메소드를 재정의할 때, 반드시 equals(Object) 시그니처를 사용하여야 합니다. 그렇지 않으면 오버로딩이 됩니다.
관련된 질문과 강의에서 실습한 다른 부분도 검토해보시면 더 깊은 이해를 하실 수 있을 것입니다. 유사한 질문과 관련 자료는 다음과 같습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





