# 주민등록번호는 같지만 개명을 하여 Person 객체 2개가 생성되는 결과가 나타났으며 '== 연산자' 로는 false 값이 반환되게 된다.
이때 Object 클래스의 equals() 메소드를 오버라이딩하여 Person 객체들의 비교값이 true 값으로 반환되게 하자.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package objectex; class Person { String name; int jumin; public Person() {} public Person(String name, int jumin) { this.name = name; this.jumin = jumin; } @Override public boolean equals(Object obj) { boolean result = false; // Person 클래스와 상속관계인 것만 들어 올 수 있도록 예외처리 if (obj instanceof Person) { // 연산 순서: Person > (Person)obj > (Person)obj.jumin if (((Person)obj).jumin == jumin) { result = true; } } return result; } } class App {} public class ObjectTest05 { public static void main(String[] args) { Person p1 = new Person("김철수", 870612); Person p2 = new Person("김수근", 870612); System.out.println("p1 == p2: " + (p1 == p2)); System.out.println("p1.equals(p2): " + (p1.equals(p2))); App app = new App(); // java.lang.ClassCastException: objectex.App cannot be cast to objectex.Person System.out.println("p1.equals(app): " + (p1.equals(app))); } } # 실행 결과 p1 == p2: false p1.equals(p2): true p1.equals(app): false | cs |
# 설명
Line 14~15: Object 클래스의 equals 메소드를 오버라이딩 한다.
Line 17: 반환값이 있는 메소드에 return 키워드를 1개 이상 사용하는 것은 권장하지 않는다.
때문에 최종 반환값을 대변할 boolean형 result 변수를 false로 선언과 동시에 초기화 해준다.
Line 20: equals() 메소드의 매개변수는 Object obj로 모든 객체 타입을 받아올 수 있는 장점이자 단점이 있다.
이때 Line 43 처럼 Person 클래스와는 무관한 App 클래스도 접근할 수 있는 단점이 생긴다.
때문에 instanceof 연산자를 통하여 Person 클래스와 상속관계인 객체만 받아 처리할 수 있도록 조건문을 걸어준다.
Line 22: 매개변수로 받아온 obj 객체는 Person 클래스로 다운캐스팅(명시적 형변환)을 해주어 변수 jumin에 접근한다.
Line 23: 주민등록번호가 일치한다면 result를 true로 바꿔준다.
'JAVA > JAVA2' 카테고리의 다른 글
JAVA2_day06 | Object 클래스의 메소드 (0) | 2018.01.17 |
---|---|
JAVA2_day06 | 다형성 연습문제 (0) | 2018.01.17 |
JAVA2_day05 | Up-Casting, Down-Casting, 다형성(Polymorphism) (0) | 2018.01.17 |
JAVA2_day05 | 패키지(Package), Object (0) | 2018.01.17 |
JAVA2_day04 | 추가공부 (예외 처리, Throwable 클래스, 스택) (0) | 2018.01.16 |