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 |