-
[모각코] 2회차 - JAVA 복사생성자(Copy Constructor)학교생활/22-2 '모여서 각자 코딩' 2022. 10. 12. 20:53728x90
객지프 헬퍼로서 광부 문제를 풀다가..
코드를 이쁘게 짜기 위해 Pair Object 를 만들고..
더 이쁘게 짜기 위해 copy constructor 까지 만들다가..
c++ 에서 배운거 자바로 복습이나 해볼려구요
final class A{ int a; public A(int a){ this.a = a; } public A(A a){ this.a = a.a; } public int getA() { return a; } }
class A 에 기본적인 constructor 와 copy constructor 를 만들어줌
A a = new A(10); System.out.println(a.getA()); // 10 A a_copyA = new A(a); System.out.println(a_copyA.getA()); // 10
A a_copyA 는 객체 A a 를 복사함
a_copyA 는 a 를 shallow copy 했을까요 deep copy 했을까요
얕.복인지 깊.복인지 모를 a.copyA 의 필드 int a 값을 20으로 바꿔 봅시다
a_copyA.a = 20; System.out.println(a.getA()); // 10 System.out.println(a_copyA.getA()); // 20
a.getA() 는 10, a_copyA.getA() 는 20 으로 솔플하네요
깊은 복사가 되었습니다!!
https://taeinsoft.com/java/java-deep-shallow-copy/ 에서의
"""
int, float, double과 같은 기초 변수 이외의 모든 참조변수는 new 연산자를 이용하여 객체를 새로 생성하고, 내용물을 복사하게 만들어야 합니다.
"""
에서 int는 shallow copy 일 것같은 '=' 으로도 깊은 복사가 되는게 맞나? 라는 궁금증이 풀렸습니다.
이번엔 반대로 a.a 의 값을 바꿔도 a_copy.a 의 값이 바뀌지 않는지 어디한번 봅시다
a.a = 100; System.out.println(a.getA()); // 100 System.out.println(a_copyA.getA()); // 20
네 안바뀐다고 하네요
A a_copy 객체를 A a 의 필드값으로 업데이트 해봅시다
a_copyA = new A(a); System.out.println(a_copyA.getA()); // 100
네 되었다고 하네요
자바에서 .clone() 은 모종의 이유로
오버라이딩해서 메서드를 재정의 라는 것을 추천하지 않습니다.
따라서 copy constructor 로 구현하는 것을 추천합니다.
라는 것을 이번에 광부 풀면서 알게됨
지식+1
따봉
728x90'학교생활 > 22-2 '모여서 각자 코딩'' 카테고리의 다른 글
[모각코] 6회차 - clock cycle 과 instruction (0) 2022.11.15 [모각코] 5회차 - Cache 와 Redis (0) 2022.11.05 [모각코] 4회차 - SharedPreferences (0) 2022.10.31 [모각코] 3회차 - 모프 6주차 정리 (0) 2022.10.27 [모각코] 1회차 - Docker (6) 2022.09.28