이번 포스팅에서는 java의 모든 class의 최상의 class인 Object Class와 자주 사용하는 method들 그리고 그 method들을 어떻게 오버라이딩해서 사용하는지에 대해 알아보겠습니다.
Object 클래스는 java에서 사용되는 모든 클래스의 최상의 클래스입니다.
클래스를 작성할 때 Object class를 상속받지 않아도 자동으로 상속이 된 상태입니다.
class Practice {}
class Practice extends Object {}
모든 class에서는 기본적으로 Object의 메서드들을 사용할 수 있습니다.
많은 methods가 있지만 이번에는 자주 사용하는 equal, toString 에 대해 알아보겠습니다.
equals : 객체끼리 비교하는 함수
toString : 객체를 string class type으로 변경해주는 함수
이것들을 오버라이딩 해주지 않고 바로 사용한다면 어떤일이 일어날까요?
예시 코드를 한번 보겠습니다.
public class Student{
String name;
String number;
int birthYear;
public static void main(String[] args){
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "123";
s1.birthYear = 1995;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "123";
s2.birthYear = 1995;
if(s1.equals(s2)){
System.out.println("s1 == s2");
}
else
System.out.println("s1 != s2");
}
}
}
이 코드를 실행시키면 s1 != s2 가 나옵니다. 왜 그럴까요? 두 객체의 필드값이 동일하긴 하지만 다르게 생성되었으니 기본적으로 서로 다른 객체이기 때문입니다. 필드값이 동일하다면 equal 이 true를 반환하길 원한다면 오버라이딩을 해주면 됩니다.
@Override
public booleans equals(Object obj){
if(this == obj)
return true;
if(obj == null)
return false;
if(getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if(number == null) {
if(other.number != null)
return false;
} else if (!number.equals(other.number))
return false;
return true;
}
그 다음 프로그램을 실행하면 s1 == s2 가 출력됩니다.
다음은 toString 입니다. 그냥 바로 System.out.println(s1.toString()) 을 사용해도 값은 나오지만 우리가 원하는 값은 아닙니다. equal과 마찬가지로 오버라이딩이 필요합니다.
@Override
public String toString(){
return "Student {name=" + name + ", number=" + number + ", birthYear=" + birthYear + "} ";
}
이후에 프로그램을 실행한다면
"Student {name=홍길동, number=123, birthYear=1995}" 값이 출력됩니다.
오늘은 Object class란 무엇이고 어떤 역할을 하는지에 대해 배웠고 다른 클래스에서 Object 클래스의 메서드를 오버라이딩 해 사용하는 예제 코드를 살펴 보았습니다. equal과 toString 두가지에 대해서만 다뤘지만 더 많은 메서드들이 존재합니다.
Object에서 제공하는 여러 메서드를 알고 있으면 class 생성시 불필요한 코드를 작성할 필요 없이 오버라이딩하여 사용할 수 있습니다. 즉 빠르고 간결한 코딩이 가능해집니다.
또한 많은 IDE은 Object class에 대해 자동 overriding 기능을 제공하고 있으니 이를 사용하면 더 쉽고 빠르게 오버라이딩 구현이 가능합니다.