티스토리 뷰

[Object 클래스의 기본 메소드]

 

1. toString()

: 해당 클래스의 객체를 문자열로 반환

 

객체명을 출력하거나, 객체에 문자열을 더하여 출력하면 해당 객체의 toString 메소드가 자동으로 호출된다.

toString 메소드를 작성하지 않은 경우에는 (패키지명).(클래스명)@(객체의주소) 가 출력되고, 작성한 경우에는 toString 메소드의 해당 내용이 출력된다.

 

ex)

package ObjectExs;

public class ObjectEx1 {
	public static void main(String[] args) {
		ObjectEx1 obj = new ObjectEx1();
		obj.toStringFunc(obj);
	}

	public void toStringFunc(ObjectEx1 obj) {
		System.out.println(toString());
        System.out.println(obj);			// obj.toString()이 자동 호출
		System.out.println("hello "+obj);	// obj.toString()이 자동 호출
	}
	
	public String toString() {
		return "Obj 객체의 toString 메소드 실행";
	}
}

실행 결과>

Obj 객체의 toString 메소드 실행

Obj 객체의 toString 메소드 실행

hello Obj 객체의 toString 메소드 실행

 

 

 

2. Equals()

: 두 객체의 값이 같은지를 판단함

 

Object 클래스 내의 Equals 메소드는 주소가 같은지를 비교한다.

하지만, String 객체의 Equals 메소드는 오버라이딩이 되어 있어서 내용이 같은지를 비교한다.

Wrapper 클래스의 equals 메소드도 오버라이딩이 되어 있어서 내용이 같은지를 비교한다.

 

ex)

package ObjectExs;

public class EqualsEx {

	public static void main(String[] args) {
		String str1 = new String("Hello Java");
		String str2 = "Hello Java";
		
		// 주소 비교
		if(str1 == str2)
			System.out.println("str1과 str2는 서로 같다");
		else
			System.out.println("str1과 str2는 서로 다르다");	// 실행
		
		// 내용 비교
		if(str1.equals(str2))
			System.out.println("str1과 str2는 서로 같다");	// 실행
		else
			System.out.println("str1과 str2는 서로 다르다");
		
		
		Value1 va1 = new Value1(10);
		Value1 va2 = new Value1(10);
		
        // 주소 비교
		if(va1.equals(va2))
			System.out.println("va1과 va2는 서로 같다");
		else
			System.out.println("va1과 va2는 서로 다르다");	// 실행
		
        
        Value2 va3 = new Value2(10);
        Value2 va4 = new Value2(10);
        
        // 내용(값) 비교
        if(va3.equals(va4))
        	System.out.println("va3과 va4는 서로 같다");		// 실행
        else
        	System.out.println("va3과 va4는 서로 다르다");
            
	}
}


class Value1{
	int a;
	
	public Value1(int a) {
		this.a=a;
	}
}

class Value2{
	int a;
	
	public Value2(int a) {
		this.a=a;
	}
	
	// equals 메소드 오버라이딩
	public boolean equals(Object obj) {
		if(obj != null && obj instanceof Value2) {
			return a == ((Value2)obj).a;
		}
		else
			return false;
	}
}

실행 결과>

str1과 str2는 서로 다르다
str1과 str2는 서로 같다
va1과 va2는 서로 다르다
va3과 va4는 서로 같다

 

Value1 클래스에서는 equals 메소드의 오버라이딩이 되어 있지 않으므로 주소가 비교된다.

그렇기 때문에 va1과 va2는 서로 (주소가) 다르다 고 출력된다.

Value2 클래스에서는 equlas 메소드가 해당 값을 비교하도록 오버라이딩 해주었다.

그러므로 va3과 va4는 서로 (값이) 같다 고 출력된다.

 

 

 

3. hashCode()

: 객체의 주소를 정수형으로 반환

 

단, String 객체의 hashCode 메소드는 두 객체의 내용이 같으면 같은 주소를 반환하도록 오버라이딩 되어 있다!

 

반응형

댓글