java.lang 패키지(2) - Object 클래스(2)

2021. 12. 24. 09:58·자바/java.lang 패키지

1. 얇은 복사와 깊은 복사

- clone()은 단순히 객체에 저장된 값을 그대로 복제할 뿐, 객체가 참조하고 있는 객체까지 복제하지 않는다.

 

- 기본형 배열인 경우는 오버라이딩을 해서 문제가 되지 않지만, 객체 배열을 clone()으로 복제하는 경우에는

원본과 복제본이 같은 객체를 공유하므로 완전한 복제가 아니다. 이러한 것을 shallow copy라고 부른다.

 

- 반면에 원본이 참조하고 있는 객체까지 복제하는 것을 deep copy라고 한다.

 

 

- 아래의 코드는 shallow copy를 보여준다.

 

( c1의 객체 p의 x를 4로 바꿨지만 c2의 객체 p의 x도 영향을 주어 출력값이 4가 나왔다. )

( 그러므로, 확실하게 deep copy를 통해 옮겨주어야 한다. )

 

 

- 아래의 코드는 deep copy를 보여준다. 

 

( 이렇게 따로 Circle에 대한 참조변수를 만들고 복사해주면 된다. )

 

 

 

 

2. getClass()

- 이 메서드는 자신이 속한 클래스의 Class 객체를 반환하는 메서드이다.

 

- 다음과 같이 정의되어 있다.

 

- Class 객체는 클래스의 모든 정보를 담고 있으며, 클래스 당 1개만 존재한다.

 

- 클래스 파일이 '클래스 로더'에 의해서 메모리에 올라갈 때, 자동으로 생성된다.

 

- 먼저 기존에 생성된 객체가 메모리에 존재하는지 확인하고, 있으면 객체의 참조를 반환하고

없으면 클래스 path에 지정된 경로를 따라서 클래스 파일을 찾는다.

 

- 또한 못 찾으면 ClassNotFoundException이 발생하고, 찾으면 해당 클래스 파일을 읽어서 Class 객체를

변환한다.

 

- 즉, 클래스 파일을 읽어서 사용하기 편한 형태로 저장해 놓은 것이 클래스 객체이다.

 

 

- 아래의 코드는 Class 객체를 얻는 방법이다.

 

 

 

- 또한 아래의 코드처럼 클래스 정보를 가지고 객체 생성이 가능하다.

 

 

 

 

다음장

java.lang패키지(3) - String 클래스 (tistory.com)

 

java.lang패키지(3) - String 클래스

1. 변경 불가능한(immutable) 클래스 - 예를 들어, String 클래스의 참조변수 a와 b가 있는데, 각각 "a"와 "b"를 가지고 있다. 그런데 이 둘을 합쳐서 a 참조변수에 저장을 하면 당연히 "ab" 문자열이 저장

kind-coding.tistory.com

 

'자바 > java.lang 패키지' 카테고리의 다른 글

java.lang패키지(6) - Math 클래스  (0) 2021.12.27
java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스  (0) 2021.12.26
java.lang패키지(4) - String 클래스(2)  (0) 2021.12.26
java.lang패키지(3) - String 클래스(1)  (0) 2021.12.24
java.lang 패키지(1) - Object 클래스(1)  (0) 2021.12.22
'자바/java.lang 패키지' 카테고리의 다른 글
  • java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스
  • java.lang패키지(4) - String 클래스(2)
  • java.lang패키지(3) - String 클래스(1)
  • java.lang 패키지(1) - Object 클래스(1)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      Arrays
      다형성
      TCP 소켓 프로그래밍
      outputstream
      java.time 패키지
      선택 정렬
      코딩테스트
      알고스팟
      file
      소켓 프로그래밍
      java.lang패키지
      코딩트리조별과제
      제자리 정렬
      Collections Framework
      안드로이드 스튜디오
      serializable
      문자 기반 스트림
      map()
      안정 정렬
      역직렬화
      람다식
      InputStream
      유용한 클래스
      불안정 정렬
      중간연산
      코드트리
      자바 개념
      ServerSocket
      snail
      스트림
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    java.lang 패키지(2) - Object 클래스(2)
    상단으로

    티스토리툴바