일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 로켓펀치 #취준컴퍼니 #취업 #일상 #취준생
- 개발자취업
- try-catch-finally 블록
- 다중 catch 블록
- 일반 예외
- 99클럽
- 코딩테스트준비
- til
- 예외
- throws 키워드
- 실행 예외
- 예외 처리
- 항해99
- 예외클래스
- Today
- Total
innn
기본 API 클래스 - Object 클래스의 equals() 메소드 본문
Object 클래스
우리가 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않더라도 암시적으로 java.lang.Object 클래스를 상속하게 된다. 따라서 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다. Object는 자바의 최상위 부모 클래스인 셈이다.
API 도큐먼트에서 Object 클래스를 한번 찾아보자.
SUMMARY 를 보면 Object 클래스는 필드가 없고, 생성자와 메소드로 구성되어 있다. 모든 클래스의 최상위 부모가 Object 이므로 모든 클래스에서 Object의 메소드를 사용할 수 있다.
객체 비교(equals())
아래는 Object 클래스의 equals() 메소드이다.
public boolean equals(Object obj) { ... }
equals() 메소드의 매개 타입은 Object 인데, 이것은 모든 객체가 매개값으로 대입될 수 있음을 말한다. 왜냐하면 모든 객체는 Object 타입으로 자동 타입 변환될 수 있기 때문이다. Object 클래스의 equals() 메소드는 비교 연산자인 == 과 동일한 결과를 리턴한다. 두 객체가 동일한 객체라면 true를 리턴하고 그렇지 않으면 false를 리턴한다.
자바에서는 두 객체를 동등 비교할 때 equals() 메소드를 흔히 사용한다. equals() 메소드는 두 객체를 비교해서 논리적으로 동등하면 true를 리턴하고, 그렇지 않으면 false를 리턴한다. 논리적으로 동등하다는 것은 같은 객체이건 다른 객체이건 상관없이 객체가 저장하고 있는 데이터가 동일함을 뜻한다.
예를 들어 String 객체의 equals() 메소드는 String 객체의 번지를 비교하는 게 아니고, 문자열이 동일한지 조사해서 같다면 true를 리턴하고, 그렇지 않다면 false를 리턴한다. 이것이 가능한 이유는 String 클래스가 Object의 equals() 메소드를 재정의(오버라이딩)해서 번지 비교가 아닌 문자열 비교로 변경했기 때문이다. 일반적으로 Object의 equals() 메소드는 직접 사용되지 않고 하위 클래스에서 재정의하여 논리적으로 동등 비교할 때 이용된다.
equals() 메소드를 재정의할 때에는 매개값(비교 객체)이 기준 객체와 동일한 타입의 객체인지 먼저 확인해야 한다. Object 타입의 매개 변수는 모든 객체가 매개값으로 제공될 수 있기 때문에 instanceof 연산자로 기준 객체와 동일한 타입인지 제일 먼저 확인해야한다.
만약 비교 객체가 다른 타입이라면 equals() 메소드는 false를 리턴해야 한다. 비교 객체가 동일한 타입이라면 기준 객체 타입으로 강제 타입 변환해서 필드값이 동일한지 검사하면 된다. 필드값이 모두 동일하다면 true를 리턴하고 그렇지 않으면 false를 리턴하도록 했다.
다음 예제는 Member 클래스에서 equals() 메소드를 재정의한 것이다. Member 타입이면서 id 필드값이 같을 경우는 true를 리턴하고, 그 이외의 경우는 false를 리턴하도록 했다.
'JAVA > 자바' 카테고리의 다른 글
기본 API 클래스 - Object 클래스의 toString() 메소드 (0) | 2022.09.27 |
---|---|
기본 API 클래스 - Object 클래스의 hashCode() 메소드 (0) | 2022.09.27 |
API 도큐먼트 읽는 방법 (0) | 2022.09.27 |
예외 처리 (0) | 2022.09.26 |
예외 클래스 (0) | 2022.09.26 |