해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.
- 모든 클래스의 조상
- 필드 없이 메소드들만 갖고 있음
- 모든 클래스들에 상속됨
- 필요에 따라 오버라이드하여 사용
- Object 인스턴스 선언하여 클래스 살펴볼 것
- @IntrinsicCandidate : HotSpot VM (현재 대다수 JVM) 에 의한 최적화
- 작성된 코드를 보다 효율적인 내부적 동작으로 덮어씀
- native : C, C++ 등 다른 언어로 작성된 코드를 호출하여 성능 향상
toString 메소드
- println 메소드로 객체 출력시 기본적으로 이 메소드의 결과값 출력
- IntelliJ 코드 생성 메뉴에서 선택
equals 메소드
- 인스턴스 내용을 비교하려면 클래스마다 오버라이드해야 함
hashCode 메소드
- 기본적으로는 각 인스턴스 고유의 메모리 위치값을 정수로 반환
clone 메소드
- 인스턴스가 스스로를 복사하기 위해 사용
- Cloneable 인터페이스 구현 권장
- ★ 깊은 복사는 직접 오버라이드하여 구현해주어야 함 (*얕은 복사와 깊은 복사의 개념 잘 알아놓기!)
- 원시값을 많이 포함하는 인스턴스의 경우 super.clone()을 사용하면 편리
▼ Cloneable 인터페이스 구현 안한 경우
cloneable을 implement하지 않은 클래스에서 super.clone()을 사용하면 런타임 오류 발생
▼ Cloneable 인터페이스 구현한 경우 (얕은 복사)
위에서 implements Cloneable만 추가되었음
원시 자료형들은 제대로 복사가 되었지만 참조 자료형들은 그 주소를 복사하였기 때문에 따라옴
(참조 자료형은 원본의 값을 바꾸면 복제본도 똑같이 값이 바뀜)
▼ Cloneable 인터페이스 구현 + 수동적으로 참조형의 값을 하나하나 복사 (깊은 복사)
원본의 값을 복제본에 복제하고 원본의 값을 바꾸어도 복제본의 값이 같이 바뀌지 않음