오늘은 객체 지향에서 equals에 대해 알아보자.
아래 코드를 살펴보자.
package org.opentutorials.javatutorials.progenitor;
class Student{
String name;
Student(String name){
this.name = name;
}
public boolean equals(Object obj) {
Student _obj = (Student)obj;
return name == _obj.name;
}
}
class ObjectDemo {
public static void main(String[] args) {
Student s1 = new Student("egoing");
Student s2 = new Student("egoing");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
}
}
위 코드의 실행결과는 다음과 같다.
false
true
object는 student의 부모타입인데, 이걸 풀어서 설명하면
Object라는 데이터 타입에 obj라는 변수에 s2의 변수를 대입하려고 하는데, 그 s2의 데이터 타입이 student이다.
그러나 ojbect는 student가 가지고 있는 name라는 변수값에 접근할 수 없다. object라는 데이터 타입에는 name이라는 멤버가 없기 때문이다.
부모타입은 자식타입 행세를 할 수 없다!
따라서
System.out.println(s1 == s2); 에 대해서는 false가 나오고
System.out.println(s1.equals(s2)); 에 대해서는 true가 나오는 것이다.
s1, s2는 다른 데이터 타입이라서 같을 수 없지만
equals를 통해 overiding 하면 true가 될 수 있다.