[Java] Object 클래스: equals(), hashCode(), toString() 메소드와 instanceof 연산자 알아보기

김하밍·2024년 3월 11일

Java

목록 보기
30/46

Object 클래스

  • 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 안더라도 암시적으로 java.lang.Object 클래스를 상속하게 됩니다.
  • 자바의 모든 클래스는 Object 클래스의 자식 클래스 입니다.

오버라이딩해서 사용해야하는 메소드 3가지

  1. equals()
  2. hashCode()
  3. toString()

equals()

: 두 객체가 논리적으로 동등한지 true, false로 반환해주는 Object의 메소드 입니다.

  • id.equals(member.id) 처럼 사용합니다.
  • 논리적으로 동등하다는 의미는 같은 객체이건 다른 객체이건 상관없이 객체가 저장하고 있는 데이터가 동일함 을 의미합니다.
  • String 클래스에서 재정의한 equals() 메소드는 문자열 리터럴이 동일한지 아닌지를 비교하는 의미로 재정의하여 사용되고 있기 때문에 다릅니다.
  • 모든 타입들은 Object 타입으로 자동 타입 변환 후에 필요한 대로 사용하기 위해서 강제 타입 변환도 이루어질 수 있습니다.

hashCode()

: 특정 인스턴스를 생성할 때마다 해당 인스턴스를 식별할 수 있는 유일한 코드 (매번 다른 메모리에 할당되는)

보통의 클래스 이름 뒤에 s가 붙어서 복수형이 되면 헬퍼 클래스이다.

ex) Objects.hash(author, title)
-> 같은 문자열이 입력되면 같은 해시코드를 만들어주는 역할을 하는 메소드

Book b1 = new Book("자바 기본문법", "컴퓨터");
Book b2 = new Book("자바 기본문법", "컴퓨터");
Book b3 = new Book("자바 객체지향", "컴퓨터");
Book b4 = new Book("자바 객체지향", "컴퓨터");

/* 출력
229281895
229281895
217455518
217455518
*/

toString()

: 클래스이름@16해진수해시코드 와 같은 객체의 문자 정보를 나타냅니다.

  • 원하는 형태의 문자열 출력을 위해서 재정의하여 사용합니다.
  • 해당 클래스에 재정의해놓은 toString() 메소드는 메인함수에서 메소드를 제외한 해당 클래스의 객체만을 호출하더라도 Java에서의 객체 출력의 기본 동작으로 인해 자동으로 호출됩니다.

Instanceof 연산자

객체가 어떤 클래스인지, 어떤 클래스를 상속받았는지 확인하는데 사용하는 연산자 입니다.
즉, 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 해당 연산자를 사용합니다.


[참고]

[Java] 상속에서의 타입변환과 다형성


profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글