자바 - Object 클래스 , equals , toString

빵제이·2023년 7월 25일
0

자바

목록 보기
25/37

[ Object 클래스 ]

  • Java.lang.Object 클래스 (클래스 이름 앞에 붙는 이름은 패키지이다.)
    ' Java.lang ' = 패키지 이름, Object = 클래스
    1. 모든 클래스의 최상위 슈퍼 클래스이다.
    1. 별도의 슈퍼 클래스를 명시하지 않은 클래스들은(extends가 없는 클래스)
      모두 Object 클래스의 서브 클래스이다.
    1. 모든 것을 저장할 수 있는 Java의 만능 타입이다.
    1. Object 타입으로 저장하면 Object 클래스의 메소드만 호출할 수 있다.
      이를 해결하기 위해서 "반드시" 다운캐스팅을 해야 한다.
      (object 클래스 코드를 건들지 못하기 때문에 Override는 불가능)
/*
*  ┌--------------┐
*  │  Object      │ 슈퍼 클래스
*  │--------------│
*  │  equals()    │ 두 객체의 참조값을 비교해서 같으면 true, 아니면 false 반환
*  │  getClass()  │ 어떤 클래스인지 반환
*  │  hashCode()  │ int 타입의 해시코드값, Object 클래스는 객체의 참조값을 해시코드값으로 사용함
*  │  toString()  │ "클래스이름@참조값" 형식의 문자열을 반환
*  │  notify()    │ 스레드(thread) 관련 메소드
*  │  wait()      │ 스레드(thread) 관련 메소드
*  └--------------┘
*          ▲
*          │
*          │
*  ┌--------------┐
*  │  Person      │ 서브 클래스
*  │--------------│
*  │  @Override   │
*  │  equals()    │ 이름과 나이가 같으면 true, 아니면 false 반환 (하드코딩하지 않고, 자동완성한다.)
*  │              │
*  │  @Override   │
*  │  toString()  │ 이름과 나이를 확인할 수 있는 문자열 반환 (하드코딩하지 않고, 자동완성한다.)
*  └--------------┘
*/

[ 사람 클래스 ]

  • equals() : 모든 객체 비교는 equals()를 사용.
    이클립스 메뉴 - Source - Generate hashcode() and equals()... 클릭
    => 자동으로 비교하는 equals 를 만들어줌.

  • toString() : 객체 출력, 참조값에 들어있는 값 확인하고 싶을 때.
    이클립스 메뉴 - Source - Generate toString()... 클릭
    => 실제 들어있는 값을 출력.

public class Person {

  // Field
  private String name;
  private int age;
  
  // Constructor
    // new Person()
    public Person() {
    
    }
  // new Person("홍길동", 20)
    public Person(String name, int age) {
      this.name = name;
      this.age = age;
    }
  
  
  // Method
   @Override
    public int hashCode() {
      return Objects.hash(age, name);
    }
    @Override
    public boolean equals(Object obj) {
      if (this == obj)  // p1.equals(p1)
        return true;
      if (obj == null)  // p1.equals(null)
        return false;
      if (getClass() != obj.getClass()) // p1.equals(s1)
        return false;
      Person other = (Person) obj;
      return age == other.age && Objects.equals(name, other.name);
    }
    
    //참조값에 들어있는 값 확인하고 싶을 때. 
  	@Override
    public String toString() {
      return "Person [name=" + name + ", age=" + age + "]";
    }
  
  
  
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }

[ ex01 메서드 ]


public static void ex01() {
 
 // Object 타입으로 모든 객체를 저장할 수 있다.
 // Object 타입으로 저장한 객체를 사용할 때는 캐스팅 해야 한다.
 
}

public static void ex02() {
 
 // 동일한 객체 2개
 Person p1 = new Person("홍길동", 20);
 Person p2 = new Person("홍길동", 20);
 
 // 동일한 객체인지 판단
 boolean same = p1.equals(p2);
 // p1 과 p2 는 주소가 다른, 서로 다른 객체이다.
 // equals(); 는 주소 번지 수가 다르니, 다른 객체라고 출력된다.
 // equals 를 오버라이드 해서 주소값말고 주소 안에 있는 실제 값을 비교할 수 있도록 해주면 된다.  
 
 // 결과 확인
 System.out.println(same ? "동일한 객체" : "다른 객체");
 
}

[ ex01 메서드 ]

public static void main(String[] args) {
    
Object obj = new Person();
    ((Person) obj).setName("홍길동");
    ((Person) obj).setAge(20);
    System.out.println(((Person) obj).getName());
    System.out.println(((Person) obj).getAge());
  }
  // 위와 같이 다운캐스팅으로 바꿔 사용 가능.
profile
개인 아카이브

0개의 댓글