공부의 정리 및 복습을 위한 기록입니다.
JAVA의 Object 클래스는 모든 클래스의 최상위 부모클래스이다.
최상위 부모클래스이기 때문에 당연히 자바에서의 모든 클래스는 오브젝트 클래스를 상속 받는다.
여기서 상속의 개념을 이미 알고있다면 extends Object를 하지 않았는데 왜 상속을 받는다고 생각할 수도 있다.
이는 자바에서 묵시적 상속을 통해서 오브젝트 클래스를 상속 받을 수 있도록 하기 때문이다. 즉 extends ....로 명시를 해주지 않는다면 모든 클래스는 오브젝트 클래스를 상속 받는다.
Object Class는 메서드로만 구성이 되어으며, 이 메서드들은 오버라이딩을 통하여 사용자가 원하는 대로 재정의 하여 사용할 수 있다.
그렇다면 오브젝트 클래스가 필요한 이유는 다음과 같다.
오브젝트 클래스는 미리 정의해놓은 이름과 기능의 다양한 메서드를 제공하기 때문에 많은 개발자들이 코딩을 하며 각각의 메서드를 정의하여 사용한다고 하면 일관성이 떨어질 수 있다. 이러한 이유 때문에 자바에서는 오브젝트 클래스와 메서드를 제공하여 공통 기능을 제공하고 일관성을 높혀준다.
다음은 오브젝트 클래스의 대표적인 메서드로
등이 있다.
위와 같이 오브젝트 클래스의 메서드를 보면 이미 정의가 되어 있는 것을 볼 수있다.
대표적으로 toString()과 equals() 메서드의 사용 예제를 코드를 보며 정리해보자.
public class ObjTest {
private String name;
private int age;
public ObjTest(String name, int age) {
this.name = name;
this.age = age;
}
우선 테스트를 위해 클래스를 하나 만들어 준 뒤
ObjTest obj1 = new ObjTest("홍길동", 30);
ObjTest obj2 = new ObjTest("홍길동", 30);
System.out.println(obj1 == obj2);
System.out.println(obj1.equals(obj2));
System.out.println(obj1.toString());
값 비교를 위해 ==와 equals 메서드를 통하여 객체의 동등 비교를 해보았을 때 값은
false
false
로 출력되며
toString 메서드를 이용하면
ObjTest@640e35f1와 같이 출력된다. 여기서 @뒤는 해시코드를 16진수 문자열로 변환 한 값을 출력한다.
위 사진에 toString() 메서드의 정의된 내용을 보면 이해하기가 쉽다.
이제 ObjTest 클래스에서 toString과 equals 메서드에 대하여 아래와 같이 재정의후 다시 한번 결과를 보려고 한다.
public class ObjTest {
private String name;
private int age;
public ObjTest(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "name : " + name + ", age : " + age;
}
@Override
public boolean equals(Object object) {
if (this == object) return true;
if (object == null || getClass() != object.getClass()) return false;
ObjTest objTest = (ObjTest) object;
return age == objTest.age && Objects.equals(name, objTest.name);
}
위와 같이 메서드 오버라이딩 후 출력 결과를 보면
false
true
name : 홍길동, age : 30
와 같이 출력 되는 것을 볼 수있다.
여기서 == 는 객체의 참조값을 비교하는 것이며,
equals 메서드는 객체의 참조값이 아닌 객체의 값을 비교하기위해 재정의를 하였기 때문에
true로 나오는 것을 볼 수 있다.
또한 toString 메서드도 ObjTest의 name, age를 반환 할 수 있게 재정의를 하였기 때문에
name : 홍길동, age : 30 와 같이 출력이 된다.
공부하며 정리와 복습을 위해 저장한 기록입니다. 틀린 부분 및 개선할 부분이 있다면 알려주시면 감사하겠습니다 !