JAVA 웹 개발 패키지 - 패스트캠퍼스/Chapter4

Object 클래스 - toString(), equals(), hashCode(), clone()

giggs 2022. 1. 10. 08:45

Object 클래스 - 모든 클래스의 최상위 클래스

 

java.lang 패키지

  • 프로그래밍 시 import 하지 않아도 자동으로 import 됨
  • import.java.lang.*;
  • 많이 사용하는 기본 클래스들이 속한 패키지
  • String, Integer, System...

 

모든 클래스는 Object 클래스를 상속받는다

  • java.lang.Object 클래스
  • 모든 클래스의 최상위 클래스
  • 모든 클래스는 Object에서 상속받고, Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있음( final로 선언되어있지 않은 애들 제외하고)
  • 컴파일러가 extends Object를 추가함
  • class Student => class Student extends Object

 


Object 클래스의 메서드 활용

 

 

toString() 메서드

  • 객체의 정보를 String으로 바꾸어서 사용할 때 쓰임
  • String이나 Integer 클래스는 이미 재정의 되어 있음
  • toString() 메서드 재정의 예

 

 

출력 확인 : 주소 값으로 출력된다. 

h01.Book 까지는 패키지까지 포함한 클래스 풀네임

@ 뒤 1bc6a36e 는 인스턴스 메모리의 가상 값(실제 메모리 위치는 아니다)

 

String "test"; 는 주소 값이 아닌 test라고 출력! - 이유는 String클래스는 toString 이미 overriding 되어있기 때문에!

 

Book 클래스에서 object 메서드인 toString 재정의! 

BookTest 클래스에서 그냥 book 출력해도 적용되고. toString 해서 사용해도 적용돼서 출력 확인!

 


 

 

equals() 메서드

  • 두 인스턴스의 주소 값을 비교하여 true/false를 반환
  • 재정의 하여 두 인스턴스가 논리적으로 동일함의 여부를 구현함
  • 인스턴스가 다르더라도 논리적으로 동일한 경우 true를 반환하도록 재정의 할 수 있음
  • (같은 학번, 같은 사번, 같은 아이디의 회원...)

 

 

== 과 equals 메서드 원형으로 사용할 때는 주소가 같은지 안 같은지만 판단! 

 


 

 

System.out.println(sta1.equals(std2)); 의 출력 값이 true로 변경되어서 출력!

equals 재정의 해준 부분 - studentNum 같으면 논리적으로 같다고 해준다 - true -  잘 적용되었음을 확인!

 

 


hashCode() 메서드

  • hashCode()는 인스턴스의 저장 주소를 반환함
  • 힙 메모리에 인스턴스가 저장되는 방식이 hash 방식
  • hash : 정보를 저장, 검색하는 자료구조
  • 자료의 특정 값(키 값)에 대한 저장 위치를 반환해주는 해시 함수를 사용

 

 

 

equal 재정의로 studentNum 이 같은 std1과 std2 가 같다고 나온다.

하지만 아직 hashCode 재정의를 안 해주어서 그 값은 아예 다른 값 출력됨.

재정의 필요!

- String 은 이미 equals와 hasgCode 가 재정의 되어있어서 equals = true 와 같은 hashCode 출력됨을 확인!

 

 


 

 

 

 

equals 와 hashCode 재정의 해줌으로써 논리적으로 같다는 것을 표현! 

확인 완료! GOOD  :)

 

+ 진짜 가지고 있는 hashcode는 없어지는 것이 아니라 확인도 가능! 논리적으로 같다고 해주기 위해 재정의해준 것일 뿐!

 


 

 

  • 두 인스턴스가 같다는 것은?
  • 두 인스턴스에 대한 equals()의 반환 값이 true이고, 동일한 hashCode() 값을 반환
  • 논리적으로 동일함을 위해 equals() 메서드를 재정의 하였다면 hashCode() 메서드도 재정의 하여 동일한 hashCode 값이 반환되도록 한다

 


 

 

clone() 메서드

  • 객체의 원본을 복제하는 데 사용하는 메서드
  • 생성과정의 복잡한 과정을 반복하지 않고 복제할 수 있음
  • clone() 메서드를 사용하면 객체의 정보(멤버 변수 값 등...)가 동일한 또 다른 인스턴스가 생성되는 것이므로, 객체 지향 프로그램에서의 정보 은닉, 객체 보호의 관점에서 위배될 수 있음
  • 해당 클래스의 clone() 메서드의 사용을 허용한다는 의미로 cloneable 인터페이스를 명시해 줌

 

implements Cloneable - clone()메서드 사용 허용한다는 의미

 


Test ---

 

생성자처럼 정보 입력받아서 생성하는 것이 아닌. 

생성자랑은 다르게 변수 값들이나 정보가 그냥 그대로 붕어빵 찍어내듯이 그대로 복제 Clone

 


 

 

 

review

object 클래스와 object 클래스 메서드들에 대해 배웠다.

주소 값이 아닌 문자열 그대로 출력하게 해주는 toString()
논리적으로 같다고 표시해줄 때 사용하는 equals()와 hashCode()
객체의 원본을 붕어빵 찍듯이 복제할 때 사용하는 clone()

최상의 클래스의 메서드들로서 원래의 의미로 사용할 때는 재정의 필요 없이 바로 사용 가능하지만
우리가 원하는 기능으로 사용하기 위해 재정의하거나
메서드를 사용할 거라는 것을 표현하기 위해 재정의하여 사용하였다.

object 클래스에 대해 알았고 메서드들을 일부 사용해보았다.
이 메서드들이 무슨 기능을 하는지, 사용하기 위해서는 어떻게 재정의하여 사용하는지를
잘 체크해놓고 필요한 순간에 잘 활용할 수 있도록 해야겠다!