JAVA_Object 클래스와 toString(), equals()

JW__1.7·2022년 8월 2일
0

JAVA 공부일지

목록 보기
18/30
  • Object는 모든 걸 저장할 수 있다.
  • Object에 저장된 객체는 캐스팅해서 사용한다.
  • 객체 정보 확인을 위해서는 toString() 메소드를 만든다.
  • 객체 정보 비교를 위해서는 equals() 메소드를 만든다.
  • source 메뉴에 가면 toString(), equals()를 자동으로 만들어 준다.

Object 클래스

  • 패키지 : java.lang
  • 모든 클래스의 슈퍼 클래스
    • 모든 클래스는 명시하지 않아도 강제로 Object 클래스를 상속 받음
    • 모든 클래스의 타입으로 사용할 수 있음
    • 모든 클래스가 사용할 수 있는 공통 메소드를 가지고 있음
package ex01_object_class;
public class Person {
	
	public void eat() {
		System.out.println("먹는다");
	}
}
package ex01_object_class;
public class Main {

	public static void main(String[] args) {

		// Object 클래스는 모든 객체(변수)를 저장할 수 있다.
		Object p = new Person();
		
		// Object 클래스 타입의 객체는 항상 다운캐스팅해서 사용해야 한다.
		if(p instanceof Person) {
			((Person) p).eat();
		}	// 먹는다	
	}
}

객체 정보를 문자열로 변환하는 toString()

  • Object 클래스의 toString() 메소드
    • 클래스의 이름과 객체의 해시코드를 @로 연결한 문자열을 반환
    • 객체의 해시코드를 통해서 객체의 참조값을 확인 가능
    public String toString() {
    		return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
     }
  • toString() 메소드가 사용되는 경우
    • System.out.println()과 같은 출력 메소드에 객체가 전달되는 경우
    • 문자열 연산에 객체가 사용되는 경우
    User user = new User();
    System.out.println(user);     // User@7637f22 → System.out.println(user.toString());
    String message = "Hello " + user;
    System.out.println(message);  // Hello User@7637f22 → String message = "Hello" + user.toString();

toString() 오버라이드

  • Object 클래스의 toString() 메소드는 객체의 필드 정보를 출력하지 못함
  • 객체의 필드 정보를 출력할 수 있도록 toString() 메소드를 오버라이드 하는 것이 일반적

Object 클래스의 equals()

  • Object 클래스의 equals() 메소드는 객체의 참조값을 비교해서 같으면 true를 반환

equals() 오버라이드

  • Object 클래스의 equals() 메소드는 객체의 필드값을 비교하지 못하므로 오버라이드해서 필드값을 비교할 수 있도록 처리
package ex01_object_class;
public class Person {
	
    private String name;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
    
    public void eat() {
		System.out.println("먹는다");
	}
	
    @Override
	public String toString() {
		return "이름 : " + name;	
        // System.out.println(person);에서 사용됨
	}
    @Override
	public boolean equals(Object anObject) {	// p1.equals(p2)에서 사용됨
		Person p = (Person) anObject;
		return name.equals(p.name);
	}
}
package ex01_object_class;
public class Main {
	public static void main(String[] args) {
		
        // Object 클래스는 모든 객체(변수)를 저장할 수 있다.
		Object p = new Person();
		
		// Object 클래스 타입의 객체는 항상 다운캐스팅해서 사용해야 한다.
		if(p instanceof Person) {
			((Person) p).eat();			// 먹는다
		}
		
		// 새로운 Person(toString() 확인용)
		Person person = new Person();
		person.setName("James");
		
		System.out.println(person);		// 이름 : James
		
		
		// 새로운 Person(equals() 확인용)
		// name이 같으면 동일한 객체로 인식하기
		Person p1 = new Person();
		Person p2 = new Person();
		p1.setName("kim");
		p2.setName("kim");
		System.out.println(p1.equals(p2));	// 동일한 name은 true
	}
}       

반환값

먹는다
이름 : James
true

0개의 댓글