Object 클래스와 오버라이딩

이명신·2023년 1월 30일
0

java

목록 보기
2/2

이번 포스팅에서는 java의 모든 class의 최상의 class인 Object Class와 자주 사용하는 method들 그리고 그 method들을 어떻게 오버라이딩해서 사용하는지에 대해 알아보겠습니다.

Object

Object 클래스는 java에서 사용되는 모든 클래스의 최상의 클래스입니다.
클래스를 작성할 때 Object class를 상속받지 않아도 자동으로 상속이 된 상태입니다.

	class Practice {}
	class Practice extends Object {}
  • 위 두 코드는 같은 코드입니다.

Object methods

모든 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 기능을 제공하고 있으니 이를 사용하면 더 쉽고 빠르게 오버라이딩 구현이 가능합니다.

0개의 댓글