출처 | https://www.youtube.com/watch?v=teABcIl_GBM&list=PLOSNUO27qFbtjCw-YHcmtfZAkE79HZSOO&index=30
Object 클래스는 모든 자바 클래스가 상속하는 최상위 클래스이다.
Object 클래스는 모두 11개의 메소드를 정의하고 있으며 이 메소드들은 자바의 모든 클래스가 갖는 기능이다.
자바의 모든 클래스가 상속 받아 갖는 Object 클래스에 대한 목적과 기능을 이해하는 것이 중요하다.
Object 클래스를 통해 상속 받는 메소드의 의미를 이해해야 그 의미에 맞게 재정의 할 수 있다.
toString() 메소드는 해당 클래스에 대한 설명을 문자열 타입
으로 반환하는 메소드다.
자바의 모든 클래스는 스스로에 대한 정보를 읽기 쉬운 형태로 제공 할 수 있으며 이 기능이 toString() 메소드이다.
클래스를 정의할 때 그 클래스를 나타내는 주요 정보를 이용해 toString() 메소드를 재정의한다.
자바의 모든 클래스는 비교가 가능해야 하며, 비교는 해당 클래스의 속성을 기준으로 한다.
자바에서 비교는 동일 비교
와 동등 비교
로 구분된다.
equals()
메소드는 인스턴스 객체와 파라미터로 전달되는 객체를 같은지 비교한다.
해시코드
는 객체를 식별하는 정수값을 의미한다. hashCode()
메소드는 이 정수값을 반환하는 메소드다.
Clone() 메소드는 인스턴스 객체의 복제를 위한 메소드로 해당 인스턴스 객체를 복사하여 그 참조값을 반환한다.
클래스의 복제를 가능하게 하기 위해서는 Cloneable 인터페이스를 재정의 해야한다.
Cloneable 인터페이스를 구현 하지 않은 클래스의 인스턴스의 clone() 메소드를 호출하면 CloneNotSupportedException 예외가 발생한다.
객체의 복사는 단순히 같은 참조 정보를 복사하는 형태와 동일한 객체의 인스턴스를 복사하는 것의 차이를 이해해야한다.
Object 클래스의 clone() 메소드는 protected 접근 권한을 갖고 있으며 이를 재정의하는 클래스는 이를 public 접근 권한으로 재정의하여 어디서나 복제가 가능하도록 한다.
객체의 복제는 얕은 복사(Shallow Copy)
와 깊은 복제(Deep copy)
가 있다.
내가 원하는건 카피값을 만들어서 새로운 작업을 하고 싶은건데, 만약에 name = "Edward"를 참조하는 새로운 필드가 존재한 상태로 clone하게 된다면 참조하는게 달라져 원본 값이 바뀐다.
또 다른 필드가 있다고 가정한다면, 참조 변수가 다른 필드의 값을 가지고 있다면, 원본과 달라지게 된다.