새소식

Java/제대로 파는 자바

[제대로 파는 자바 (Java)-by 얄코] Object

  • -

해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.

 

 

 

 

 

  • 모든 클래스의 조상
  • 필드 없이 메소드들만 갖고 있음
    • 모든 클래스들에 상속됨
    • 필요에 따라 오버라이드하여 사용
  • Object 인스턴스 선언하여 클래스 살펴볼 것
    • @IntrinsicCandidate : HotSpot VM (현재 대다수 JVM) 에 의한 최적화
      • 작성된 코드를 보다 효율적인 내부적 동작으로 덮어씀
    • native : C, C++ 등 다른 언어로 작성된 코드를 호출하여 성능 향상
      • Java Natice Interface 사용

 

 


 

toString 메소드

  • 기본적으로는 클래스명과 해시값을 반환

 

 

  • println 메소드로 객체 출력시 기본적으로 이 메소드의 결과값 출력
  • IntelliJ 코드 생성 메뉴에서 선택

 

 


 

equals 메소드

  • 기본적으로는 == 과 같이 레퍼런스 비교

 

기존 equals 사용시 주소값 다르면 무조건 false

 

 

 

 

  • 인스턴스 내용을 비교하려면 클래스마다 오버라이드해야 함

equals 오버라이드

 

 

x값과 y값이 서로 같은지 비교하도록 equals를 오버라이드 하였으므로 다른 결과값을 가짐

 

 


 

hashCode 메소드

  • 기본적으로는 각 인스턴스 고유의 메모리 위치값을 정수로 반환

각각 고유의 해시값을 가짐

 

 

String클래스는 문자열 값이 같으면 boolean값은 false지만 해시값은 같도록 되어있음/ 문자열은 값 같으면 equals값 true

 

 

 

 

x와 y값을 사용한 값을 반환하도록 hashCode를 오버라이드하였음

 

 

hash코드를 오버라이드하여 기본 toString에도 영향을 끼쳤음

 

 


 

clone 메소드

  • 인스턴스가 스스로를 복사하기 위해 사용
  • Cloneable 인터페이스 구현 권장
  • ★ 깊은 복사는 직접 오버라이드하여 구현해주어야 함 (*얕은 복사와 깊은 복사의 개념 잘 알아놓기!)
  • 원시값을 많이 포함하는 인스턴스의 경우 super.clone()을 사용하면 편리

 

 

▼ Cloneable 인터페이스 구현 안한 경우

cloneable을 implement하지 않은 클래스에서 super.clone()을 사용하면 런타임 오류 발생

 

 

 

 

▼ Cloneable 인터페이스 구현한 경우 (얕은 복사)

위에서 implements Cloneable만 추가되었음

 

 

 

원시 자료형들은 제대로 복사가 되었지만 참조 자료형들은 그 주소를 복사하였기 때문에 따라옴
(참조 자료형은 원본의 값을 바꾸면 복제본도 똑같이 값이 바뀜)

 

 

 

 

 

 

▼ Cloneable 인터페이스 구현 + 수동적으로 참조형의 값을 하나하나 복사 (깊은 복사)

 

 

 

super.clone()을 통하여 원시타입 값들을 복사하고 나서 제대로 복사되지 않은 참조타입은 수동으로 요소들을 하나하나 복사하였음

 

 

 

 

 

 

원본의 값을 복제본에 복제하고 원본의 값을 바꾸어도 복제본의 값이 같이 바뀌지 않음

원본

 

복제본

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.