안녕하세요. 이번 글에서는 얕은복사(Shallow Copy)와 깊은복사(Deep Copy)에 대해서 알아보려고합니다. 자바나 코틀린으로 개발을 하다보면 객체를 복사할 일이 생기는데 이 때 주의해서 복사하지 않으면 의도치 않은 결과를 마주할 수 있습니다. 객체를 복사하는 방법은 크게 얕은복사(Shallow Copy)와 깊은복사(Deep Copy) 두 가지 방식이 있습니다. 얕은 복사(Shallow Copy) 얇은 복사는 원본 객체에 대한 객체를 만들고 원본 객체의 주소값을 참조하는것을 의미합니다. 객체는 인스턴스화 되면서 메모리에 주소를 할당하게 되는데요 이 때 할당된 주소의 값을 참조하게 되는 것이 얕은 복사라고 합니다. 코드로 한번 어떤 의미인지 살펴보겠습니다. public class User { in..
불변성(Immutability)과 가변성(Mutability) 불변성이란 무엇일까? 함수형 프로그래밍에서는 불변성을 중요하게 생각합니다. 코틀린은 함수형 프로그래밍을 지원하는 언어로 불변성을 강제하지않고 가변을 허용하지만 불변성을 권장하고 있습니다. 불변성(Immutability)이란 함수형 프로그램에서 중요하게 다루는 부분으로 보통의 의미는 상태를 변경하지 않는 것으로 정의됩니다. 그렇다면 상태를 변경하는 것은 프로그램의 변수를 변경하거나 재할당하는 행위라고 볼 수 있지만 더 근본적으로는 컴퓨터에 저장된 메모리의 특정 공간에 저장된 값을 변경하는 행위를 의미합니다. 이런 행위는 어떤 문제가 생기길래 코틀린에서 불변성을 권장할까요? 가변성(Mutability)의 문제 불변성과 반대로 가변성은 상태를 가지..
평상시에 코틀린 파일을 디컴파일하면서 final로 선언되어있는 코드를 보면서 의문만 가지고 이유에 대해서 찾아보지 못하다가 이번 기회에 코틀린에서 default가 final인 이유에 대해서 찾아보았습니다. 제가 생각했을 때는 크게 두가지 이유가 있습니다. 첫번째는 코틀린은 함수형 프로그래밍에서 아이디어를 얻어왔고 가변을 사용했을 때 발생하는 문제점들을 줄이기 위해 불변을 사용합니다. 그래서 모든 클래스들이 기본값으로 final로 선언되어 있는 이유기도 합니다. 두번째는 상속에대한 문제입니다. 코틀린 공식 문서에 상속을 설명하는 부분을 보면 다음과 같은 문구가 있습니다. By default, Kotlin classes are final – they can't be inherited. To make ..
:question: 이 글은 Kotlin 공식 문서를 번역과 함께 추가 첨언한 글입니다. alias는 사전상의 의미로 가명, ~라는 가명으로 알려진의 뜻으로 정의되어있습니다. 코틀린에서 Type aliase는 제네릭 타입의 컬렉션 쓸 때 이름이 길게 된다면 짧은 이름으로 줄여서 사용할 수 있게 별명을 지어주는 것을 가능하게 해줍니다. typealias NodeSet = Set typealias FileTable = MutableMap 또한 고차 함수 형태도 짧은 이름으로 지어서 사용할 수 있습니다 typealias MyHandler = (Int, String, Any) -> Unit typealias Predicate = (T) -> Boolean 클래스 내부의 Inner class의 정보를 줄일 때도 ..
코틀린 1.8.0 버전이 2022년 12월 28일에 정식으로 출시되었습니다. 새로운 코틀린 버전이 출시되면서 어떤 부분이 변경되었는지 업데이트를 요약해 보았습니다. IDE 지원 kotlin-reflect 성능 개선 최적화 비활성화를 위한 컴파일러 옵션 JVM 컴파일 Target 업데이트 Java에서 Kotlin으로 TimeUnit 전환 Gradle 7.2 & 7.3 Lombok @Builder 어노테이션 지원 코틀린 멀티플랫폼 : 새로운 안드로이드 소스세트 레이아웃 기타 IDE 지원 코틀린 1.8.0 플러그인은 아래 IDE 버전에서 사용할 수 있습니다. IDE Supported versions IntelliJ IDEA 2021.3, 2022.1, 2022.2 Android Studio Electric E..
코틀린에서는 두 객체를 비교하는타입에는 2가지가 있습니다. 동등성, Structural equality (==) 동일성, Referential equality (===) 동일성은 객체가 참조하는 주소값을 비교하고, 동등성은 객체가 가지는 정보를 비교합니다. Java에서는 동일성인 ==가 코틀린의 동일성인 ===와 같은 것을 의미하고 Java 동등성인 equals는 코틀린의 동등성인 ==를 의미합니다. Kotlin Java 동등성(equality) == equals 동일성(Identify) === == 동등성 비교(Structural equality) 코틀린에서는 == 연산자나 반대인 != 연산자로 구조적 동등성을 확인 할 수 있습니다. a?.equals(b) ?: (b === null) 위 코드는 a가 ..