[Java]공부 Object 클래스

ohjihyung·2022년 6월 16일
0

오브젝트 클래스는 여러가지의 기능들이 있지만
대표적으로 사용되는 것은 .toString() , .hashCode(), .equals() 가 있다

오브젝트 클래스 사용 예 1

Object 클래스

class TestA  /*extends Object*/{ 
	//사용자 정의 클래스 
}
public class objectClassTest {
	public static void main(String[] args) {
		Object obj1 = new Object();  // 오브젝트 클래스
		Object obj2 = new Object();
		Object obj3 = obj1;
		System.out.println(obj1.toString());
		System.out.println(obj1.hashCode());
		System.out.println(obj2.toString());
		System.out.println(obj2.hashCode());
		System.out.println(obj1.equals(obj2));
		System.out.println(obj1.equals(obj3));
		TestA oba1 = new TestA(); // 사용자 정의 클래스
		TestA oba2 = new TestA();
		TestA oba3 = oba1;
		System.out.println(oba1.toString());
		System.out.println(oba1.hashCode());
		System.out.println(oba2.toString());
		System.out.println(oba2.hashCode());
		System.out.println(oba1.equals(oba2));
		System.out.println(oba1.equals(oba3));
	}
}

실행결과

java.lang.Object@2f92e0f4
798154996
java.lang.Object@28a418fc
681842940
false
true
ObjectClass.TestA@1f32e575
523429237
ObjectClass.TestA@279f2327
664740647
false
true

알게 된점

  • 사용자 클래스 TestA는 아무것도 작성하지 않았는데 작동이 됨 -- Object 클래스를 상속받는다는 것을 알 수 있음
  • 따라서 모든 객체를 오브젝트로 관리 할 수 잇다 라는 것을 알 수 있다

오브젝트 클레스 사용 예2

import java.util.Objects;
class TestB /*extends Object*/{ 
int a;
	void methodB() {
		System.out.println("TestB 기능 !" + a);
	}
	/*
	@Override
	public int hashCode() {
		return Objects.hash(a);
	}
	*/

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		TestB other = (TestB) obj;
		return a == other.a;
	}

	@Override
	public String toString() {
		return "TestB[ a =" + a +"]";
	}


}

public class objectClassTest2 {
	public static void main(String[] args) {
	    TestB oba1 = new TestB();
		oba1.a = 10;
		TestB oba2 = new TestB();
		oba2.a = 10;
		Object obj1 = oba1; // 업케스팅
		Object obj2 = oba2; // 업케스팅
		
		System.out.println(obj1);  // toString
		System.out.println(obj2);
		
		System.out.println(obj1 == obj2);  // false 가 나옴 , toString을 통해 비교하는게 아니라 
										   // 각각의 id를 통해 비교하는거임
		                                   // 객체가 동일하냐?
		
		System.out.println(obj1.equals(obj2)); // 객체가 동등하냐? 
	                                           // equals  =  == 
		System.out.println(obj1.hashCode());
		System.out.println(obj2.hashCode());
		
		
		                                       
	}
}

출력결과

TestB[ a =10]
TestB[ a =10]
false
true
681842940
1392838282

알게된점

  • 객체 자체를 출력하면 기존 내장된 toString() 이 실행되는것을 볼 수 있다
    • 이를 통해 객체간 어드 객체에 속해있는지 확인을 할 수 있는 용도로 사용된다.!
  • 다른 객체의 비교를 할 때 == 은 두개의 객체가 동일하냐? 각각의 ID를 통해 비교하는 것이며
  • 객체1.equals(객체2) 는 객체가 동등하냐 라는 것을 통해 비교하는 것이다
    • 기본적으로 .equals는 "==" 와 같은 의미로 false값이 나오지만 Object클래스의 equals를 오버라이딩하면 계속적으로 비교하면서 최종적으로 내용물을 비교하기에 true 값이 나온다
  • hashCode() 도 비슷한 원리다
    • Object 클래스에 내장된 함수를 오버라이딩하지않고 그냥 사용하면 서로 다른 해쉬코드가 나오지만 오버라이딩을 하게 되면 같은 값이 나오는것을 확인할 수 있었다.
profile
웹 개발자의 기초부터 심화까지

0개의 댓글