Hello

Java Object클래스, Object클래스 메서드

by 볼빵빵오춘기

Object클래스

모든 클래스의 최고 조상이며, 오직 11개의 메서드만을 가지고 있다.

※ notify(), wait() 등은 쓰레드와 관련된 메서드이다. 

 

Object 클래스의 메서드

  • protected Object clone()
    객체 자신의 복사본을 반환한다.

 

  • public boolean equals(Object obj)
    객체 자신과 객체 obj가 같은 객체인지 알려준다.(같으면 true)

 

  • protected void finalize()
    객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출된다.
    이 때 수행되어야하는 코드가 있을 때 오버라이딩한다.(거의 사용안함)

 

  • public Class getClas()
    객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환한다. 

 

  • public int hashCode()
    객체 자신의 해시코드를 반환한다. 

 

  • public String toString()
    객체 자신의 정보를 문자열로 반환한다. 

 

  • public void notify()
    객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨운다. 

 

  • public void notifyAll()
    객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다.

 

  • public void wait(), public void wait(long timeout), public void wait(), public void wait(long timeout, int nanos)
    다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 한다.(timeout은 천 분의 1초, nonos는 10의 9승분의 1초)

 

예제코드

예제1

더보기
public class Ex8_4 {

	public static void main(String[] args) {

	}
	
}

class Value{
	int value;
	
	Value(int value){
		this.value = value;
	}
	
	public boolean equals(Object obj) {
		return this.value == obj.value; 
		// 위의 코드에서 obj의 value를 넣으면 obj는 value를 갖고있지않아 에러가난다.
	}
}

⇒ 따라서 형변환을 해준다. 

예제2 - 예제1 형변환한 코드

더보기
public class Ex8_4 {

	public static void main(String[] args) {
		Value v1 = new Value(10);
		Value v2 = new Value(10);
		
		if(v1.equals(v2))
			System.out.println("v1, v2 same same ");
		else
			System.out.println("v1, v2 No same same ");
	}
	
}

class Value{
	int value;
	
	Value(int value){
		this.value = value;
	}
	
	public boolean equals(Object obj) {
		if(!(obj instanceof Value)) return false;
		Value v = (Value) obj; // 형변환을 해준다.
		return this.value == obj.value; 

	}
}
v1, v2 same same

⇒ 참조변수 형변환 전에는 반드시 instanceof를 해서 확인해야한다. (위에서는 Object가 매개변수로 들어가있기때문에 생략가능하다)

예제3 - 만약 형변환하지않고 equals 비교

더보기
public class Ex8_4 {

	public static void main(String[] args) {
		Value v1 = new Value(10);
		Value v2 = new Value(10);
		
		if(v1.equals(v2))
			System.out.println("v1, v2 same same ");
		else
			System.out.println("v1, v2 No same same ");
	}
	
}

class Value{
	int value;
	
	Value(int value){
		this.value = value;
	}
	
	public boolean equals(Object obj) {
//		Value v = (Value) obj; // 형변환을 해준다.
//		return this.value == obj.value; 
//    위의 코드가 아니고 아래 코드와 같다면
			return this == obj;
	}
}
v1, v2 No same same

⇒ why? 주소를 비교하기 때문이다.

위에 예제 코드는 value라는 iv에 값을 비교하도록 한것이고 여기서 주소비교로 인해 No same same 이라는 결과가 나온것이다.

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기