콜렉션의 깊은 복사를 하는 방법은 대표적으로 일급 컬렉션을 만들어서 방어적 복사를 구현하는 것
생성자로 받은 가변 데이터들을 외부에서 변경하는 것을 막기 위해 복사본을 이용하는 방법
아래의 3가지를 수행해주어야 완벽한 방어적 복사가 될 수 있다.
import org.junit.jupiter.api.Test
class Car(val name: String = "", var position: Int = 0)
class Cars(val cars: List<Car>)
class DeepCopyTest {
@Test
fun listCopyTest() {
val carList = mutableListOf(Car("carA"))
val cars = Cars(carList) // carA, carB
carList.add(Car("carB")) // carA, carB
}
}
여기 또한 얕은 복사를 했기 때문에 carList.add 를 수행하면 cars 객체 또한 같이 바뀌게 된다.
class Cars(cars: List<Car>) {
val cars: List<Car> = cars.toList()
}