Kotlin 1.4 호환성 가이드
언어의 현대성 유지 및 _편안한 업데이트_는 Kotlin 언어 설계의 근본적인 원칙 중 하나입니다. 전자는 언어 발전을 방해하는 구문은 제거해야 한다고 말하며, 후자는 코드 마이그레이션을 최대한 원활하게 하기 위해 이러한 제거는 사전에 잘 고지되어야 한다고 말합니다.
대부분의 언어 변경 사항은 이미 업데이트 변경 로그나 컴파일러 경고와 같은 다른 채널을 통해 발표되었지만, 이 문서는 모든 변경 사항을 요약하여 Kotlin 1.3에서 Kotlin 1.4로 마이그레이션하기 위한 완벽한 참고 자료를 제공합니다.
기본 용어
이 문서에서는 여러 종류의 호환성을 소개합니다.
- 소스: 소스 비호환(source-incompatible) 변경은 이전에 (오류나 경고 없이) 잘 컴파일되던 코드가 더 이상 컴파일되지 않도록 합니다.
- 바이너리: 두 바이너리 아티팩트는 서로 교환해도 로딩 또는 링크 오류가 발생하지 않으면 바이너리 호환(binary-compatible)된다고 말합니다.
- 동작: 변경 사항이 적용되기 전과 후에 동일한 프로그램이 다른 동작을 보이면 동작 비호환(behavioral-incompatible)이라고 말합니다.
이러한 정의는 순수 Kotlin에 대해서만 주어진 것임을 기억하십시오. 다른 언어 관점(예: Java)에서의 Kotlin 코드 호환성은 이 문서의 범위를 벗어납니다.
언어 및 표준 라이브러리
in
중위 연산자 및 ConcurrentHashMap
과의 예기치 않은 동작
이슈: KT-18053
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4는 Java로 작성된
java.util.Map
구현체에서 오는 자동 연산자contains
를 금지합니다.지원 중단 주기:
- < 1.4: 호출 위치에서 문제가 있는 연산자에 대한 경고 도입
>=
1.4: 이 경고를 오류로 상향 조정-XXLanguage:-ProhibitConcurrentHashMapContains
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
public inline 멤버 내부에서 protected 멤버에 대한 접근 금지
이슈: KT-21178
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4는 public inline 멤버에서 protected 멤버에 대한 접근을 금지합니다.
지원 중단 주기:
- < 1.4: 문제가 있는 경우 호출 위치에서 경고 도입
- 1.4: 이 경고를 오류로 상향 조정
-XXLanguage:-ProhibitProtectedCallFromInline
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
암묵적 리시버를 사용하는 호출의 계약
이슈: KT-28672
구성 요소: 핵심 언어
비호환 변경 유형: 동작
요약: 1.4에서는 암묵적 리시버를 사용하는 호출에 계약(contracts)을 통한 스마트 캐스트를 사용할 수 있습니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-ContractsOnCallsWithImplicitReceiver
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
부동 소수점 숫자 비교의 일관성 없는 동작
이슈: KT-22723
구성 요소: 핵심 언어
비호환 변경 유형: 동작
요약: Kotlin 1.4부터 Kotlin 컴파일러는 부동 소수점 숫자를 비교하기 위해 IEEE 754 표준을 사용합니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-ProperIeee754Comparisons
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
제네릭 람다의 마지막 표현식에 스마트 캐스트 없음
이슈: KT-15020
구성 요소: 핵심 언어
비호환 변경 유형: 동작
요약: 1.4부터 람다의 마지막 표현식에 대한 스마트 캐스트가 올바르게 적용됩니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
결과를 Unit으로 강제 변환하기 위해 람다 인수의 순서에 의존하지 않음
이슈: KT-36045
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 람다 인수는
Unit
으로의 암시적 강제 변환 없이 독립적으로 해결됩니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
Raw 타입과 정수 리터럴 타입 간의 잘못된 공통 상위 타입으로 인해 불안정한 코드 발생
이슈: KT-35681
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 raw
Comparable
타입과 정수 리터럴 타입 간의 공통 상위 타입이 더 구체적입니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
동일한 타입 변수가 다른 타입으로 인스턴스화되어 발생하는 타입 안정성 문제
이슈: KT-35679
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 Kotlin 컴파일러는 동일한 타입 변수를 다른 타입으로 인스턴스화하는 것을 금지합니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
교차 타입에 대한 부정확한 서브타이핑으로 인한 타입 안전성 문제
이슈: KT-22474
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4에서는 교차 타입에 대한 서브타이핑이 더 정확하게 작동하도록 개선됩니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
람다 내 빈 when
표현식에서 타입 불일치 없음
이슈: KT-17995
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 빈
when
표현식이 람다의 마지막 표현식으로 사용되면 타입 불일치가 발생합니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
가능한 반환 값 중 하나에 정수 리터럴이 있는 조기 반환 람다에 대해 Any로 타입 추론
이슈: KT-20226
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 조기 반환이 있는 경우 람다에서 반환되는 정수 타입이 더 구체적입니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
재귀 타입이 있는 스타 프로젝션의 올바른 캡처
이슈: KT-33012
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 재귀 타입에 대한 캡처가 더 정확하게 작동하여 더 많은 후보가 적용 가능해집니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
부적절한 타입과 유연한 타입 간의 공통 상위 타입 계산이 부정확한 결과를 초래합니다
이슈: KT-37054
구성 요소: 핵심 언어
비호환 변경 유형: 동작
요약: Kotlin 1.4부터 유연한 타입 간의 공통 상위 타입이 런타임 오류로부터 보호하기 위해 더 구체적입니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
널러블 타입 인수에 대한 캡처된 변환 부족으로 인한 타입 안정성 문제
이슈: KT-35487
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 캡처된 타입과 널러블 타입 간의 서브타이핑이 런타임 오류로부터 보호하기 위해 더 정확해집니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
검사되지 않은 캐스트 후 공변 타입에 대한 교차 타입 유지
이슈: KT-37280
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 공변 타입의 검사되지 않은 캐스트는 검사되지 않은 캐스트의 타입이 아닌, 스마트 캐스트를 위해 교차 타입을 생성합니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
this
표현식 사용으로 인한 빌더 추론에서 타입 변수 누출
이슈: KT-32126
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터
sequence {}
와 같은 빌더 함수 내에서this
를 사용하는 것은 다른 적절한 제약 조건이 없는 경우 금지됩니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
널러블 타입 인수가 있는 반공변 타입에 대한 잘못된 오버로드 확인
이슈: KT-31670
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 반공변 타입 인수를 받는 함수의 두 오버로드 함수가 타입의 널러블 여부(예:
In<T>
및In<T?>
)에 의해서만 다른 경우, 널러블 타입이 더 구체적인 것으로 간주됩니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
중첩되지 않은 재귀 제약 조건이 있는 빌더 추론
이슈: KT-34975
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 전달된 람다 내에 재귀 제약 조건에 의존하는 타입을 가진
sequence {}
와 같은 빌더 함수는 컴파일러 오류를 발생시킵니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
성급한 타입 변수 고정으로 인해 모순된 제약 조건 시스템 발생
이슈: KT-25175
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 특정 경우에 타입 추론이 덜 성급하게 작동하여 모순되지 않는 제약 조건 시스템을 찾을 수 있습니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-NewInference
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다. 이 플래그는 여러 새로운 언어 기능도 비활성화합니다.
open 함수에 tailrec
수정자 금지
이슈: KT-18541
구성 요소: 핵심 언어
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 함수는
open
및tailrec
수정자를 동시에 가질 수 없습니다.지원 중단 주기:
- < 1.4:
open
및tailrec
수정자를 함께 가진 함수에 대해 경고 보고 (프로그레시브 모드에서는 오류).>=
1.4: 이 경고를 오류로 상향 조정.
동반 객체 클래스 자체보다 동반 객체의 INSTANCE
필드가 더 가시적임
이슈: KT-11567
구성 요소: Kotlin/JVM
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 동반 객체가 private인 경우 해당
INSTANCE
필드도 private이 됩니다.지원 중단 주기:
- < 1.4: 컴파일러가 지원 중단(deprecated) 플래그가 있는
INSTANCE
객체를 생성>=
1.4: 동반 객체INSTANCE
필드에 적절한 가시성 적용
반환 전에 삽입된 외부 finally 블록이 finally가 없는 내부 try 블록의 catch 간격에서 제외되지 않음
이슈: KT-31923
구성 요소: Kotlin/JVM
비호환 변경 유형: 동작
요약: Kotlin 1.4부터 중첩된
try/catch
블록에 대해 catch 간격이 올바르게 계산됩니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-ProperFinally
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
공변 및 제네릭 특수화된 오버라이드를 위해 반환 타입 위치에서 인라인 클래스의 박싱된 버전 사용
이슈: KT-30419
구성 요소: Kotlin/JVM
비호환 변경 유형: 동작
요약: Kotlin 1.4부터 공변 및 제네릭 특수화된 오버라이드를 사용하는 함수는 인라인 클래스의 박싱된 값을 반환합니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경
Kotlin 인터페이스에 위임할 때 JVM 바이트코드에서 확인된 예외를 선언하지 마십시오
이슈: KT-35834
구성 요소: Kotlin/JVM
비호환 변경 유형: 소스
요약: Kotlin 1.4는 Kotlin 인터페이스에 대한 인터페이스 위임 시 확인된 예외를 생성하지 않습니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-DoNotGenerateThrowsForDelegatedKotlinMembers
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
단일 가변 인자(vararg) 매개변수를 사용하는 메서드에 대한 시그니처 다형성 호출의 동작 변경 (인수를 다른 배열로 래핑하는 것을 방지하기 위해)
이슈: KT-35469
구성 요소: Kotlin/JVM
비호환 변경 유형: 소스
요약: Kotlin 1.4는 시그니처 다형성 호출에서 인수를 다른 배열로 래핑하지 않습니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경
KClass가 제네릭 매개변수로 사용될 때 어노테이션의 잘못된 제네릭 시그니처
이슈: KT-35207
구성 요소: Kotlin/JVM
비호환 변경 유형: 소스
요약: Kotlin 1.4는 KClass가 제네릭 매개변수로 사용될 때 어노테이션의 잘못된 타입 매핑을 수정합니다.
지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경
시그니처 다형성 호출에서 spread 연산자 금지
이슈: KT-35226
구성 요소: Kotlin/JVM
비호환 변경 유형: 소스
요약: Kotlin 1.4는 시그니처 다형성 호출에서 spread 연산자(
*
)의 사용을 금지합니다.지원 중단 주기:
- < 1.4: 시그니처 다형성 호출에서 spread 연산자 사용 시 경고 보고
>=
1.5: 이 경고를 오류로 상향 조정-XXLanguage:-ProhibitSpreadOnSignaturePolymorphicCall
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
꼬리 재귀 최적화 함수의 기본값 초기화 순서 변경
이슈: KT-31540
구성 요소: Kotlin/JVM
비호환 변경 유형: 동작
요약: Kotlin 1.4부터 꼬리 재귀 함수의 초기화 순서는 일반 함수와 동일합니다.
지원 중단 주기:
- < 1.4: 문제가 있는 함수에 대해 선언 위치에서 경고 보고
>=
1.4: 동작 변경-XXLanguage:-ProperComputationOrderOfTailrecDefaultParameters
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
const
가 아닌 val
에 대해 ConstantValue 속성을 생성하지 마십시오
이슈: KT-16615
구성 요소: Kotlin/JVM
비호환 변경 유형: 동작
요약: Kotlin 1.4부터 컴파일러는
const
가 아닌val
에 대해ConstantValue
속성을 생성하지 않습니다.지원 중단 주기:
- < 1.4: IntelliJ IDEA 검사를 통해 경고 보고
>=
1.4: 동작 변경-XXLanguage:-NoConstantValueAttributeForNonConstVals
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
open 메서드의 @JvmOverloads
에 대한 생성된 오버로드 함수는 final
이어야 합니다
이슈: KT-33240
구성 요소: Kotlin/JVM
비호환 변경 유형: 소스
요약:
@JvmOverloads
가 적용된 함수의 오버로드 함수는final
로 생성됩니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경-XXLanguage:-GenerateJvmOverloadsAsFinal
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
kotlin.Result
를 반환하는 람다는 이제 언박싱된 값 대신 박싱된 값을 반환합니다
이슈: KT-39198
구성 요소: Kotlin/JVM
비호환 변경 유형: 동작
요약: Kotlin 1.4부터
kotlin.Result
타입의 값을 반환하는 람다는 언박싱된 값 대신 박싱된 값을 반환합니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경
널 체크 예외 통합
이슈: KT-22275
구성 요소: Kotlin/JVM
비호환 변경 유형: 동작
요약: Kotlin 1.4부터 모든 런타임 널 체크는
java.lang.NullPointerException
을 throw합니다.지원 중단 주기:
- < 1.4: 런타임 널 체크는
KotlinNullPointerException
,IllegalStateException
,IllegalArgumentException
,TypeCastException
등과 같은 다른 예외를 throw합니다.>=
1.4: 모든 런타임 널 체크는java.lang.NullPointerException
을 throw합니다.-Xno-unified-null-checks
플래그를 사용하여 1.4 이전 동작으로 일시적으로 되돌릴 수 있습니다.
배열/리스트 연산 contains
, indexOf
, lastIndexOf
에서 부동 소수점 값 비교: IEEE 754 또는 전체 순서
이슈: KT-28753
구성 요소: kotlin-stdlib (JVM)
비호환 변경 유형: 동작
요약:
Double/FloatArray.asList()
에서 반환되는List
구현은contains
,indexOf
,lastIndexOf
를 구현하여 전체 순서 동등성(total order equality)을 사용합니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경
컬렉션 min
및 max
함수의 반환 타입을 점진적으로 널러블이 아닌 것으로 변경
이슈: KT-38854
구성 요소: kotlin-stdlib (JVM)
비호환 변경 유형: 소스
요약: 컬렉션
min
및max
함수의 반환 타입은 1.6에서 널러블이 아닌 것으로 변경됩니다.지원 중단 주기:
- 1.4:
...OrNull
함수를 동의어로 도입하고 영향을 받는 API를 비권장(deprecate)합니다 (이슈에서 자세한 내용 참조).- 1.5.x: 영향을 받는 API의 비권장 수준을 오류로 상향 조정
>=
1.6: 영향을 받는 API를 널러블이 아닌 반환 타입으로 재도입합니다.
appendLine
을 선호하여 appendln
비권장
이슈: KT-38754
구성 요소: kotlin-stdlib (JVM)
비호환 변경 유형: 소스
요약:
StringBuilder.appendln()
은StringBuilder.appendLine()
을 선호하여 비권장(deprecated)됩니다.지원 중단 주기:
- 1.4:
appendln
의 대체 함수로appendLine
을 도입하고appendln
을 비권장합니다.>=
1.5: 비권장 수준을 오류로 상향 조정
부동 소수점 타입을 Short 및 Byte로 변환하는 것 비권장
이슈: KT-30360
구성 요소: kotlin-stdlib (JVM)
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 부동 소수점 타입을
Short
및Byte
로 변환하는 것이 비권장됩니다.지원 중단 주기:
- 1.4:
Double.toShort()/toByte()
및Float.toShort()/toByte()
를 비권장하고 대체를 제안합니다.>=
1.5: 비권장 수준을 오류로 상향 조정
유효하지 않은 startIndex
에서 Regex.findAll
빠르게 실패
이슈: KT-28356
구성 요소: kotlin-stdlib
비호환 변경 유형: 동작
요약: Kotlin 1.4부터
findAll
은findAll
진입 시점에startIndex
가 입력 문자 시퀀스의 유효한 위치 인덱스 범위에 있는지 확인하도록 개선되며, 그렇지 않은 경우IndexOutOfBoundsException
을 throw합니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경
비권장된 kotlin.coroutines.experimental
제거
이슈: KT-36083
구성 요소: kotlin-stdlib
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 비권장된
kotlin.coroutines.experimental
API가 표준 라이브러리에서 제거됩니다.지원 중단 주기:
- < 1.4:
kotlin.coroutines.experimental
은ERROR
수준으로 비권장됩니다.>=
1.4:kotlin.coroutines.experimental
은 표준 라이브러리에서 제거됩니다. JVM에서는 별도의 호환성 아티팩트가 제공됩니다 (이슈에서 자세한 내용 참조).
비권장된 mod
연산자 제거
이슈: KT-26654
구성 요소: kotlin-stdlib
비호환 변경 유형: 소스
요약: Kotlin 1.4부터 숫자 타입에 대한
mod
연산자가 표준 라이브러리에서 제거됩니다.지원 중단 주기:
- < 1.4:
mod
는ERROR
수준으로 비권장됩니다.>=
1.4:mod
는 표준 라이브러리에서 제거됩니다.
Throwable.addSuppressed
멤버 숨기기 및 대신 확장 함수 선호
이슈: KT-38777
구성 요소: kotlin-stdlib
비호환 변경 유형: 동작
요약:
Throwable.addSuppressed()
확장 함수가 이제Throwable.addSuppressed()
멤버 함수보다 선호됩니다.지원 중단 주기:
- < 1.4: 이전 동작 (이슈에서 자세한 내용 참조)
>=
1.4: 동작 변경
capitalize
는 이중음자를 제목 대소문자로 변환해야 합니다
이슈: KT-38817
구성 요소: kotlin-stdlib
비호환 변경 유형: 동작
요약:
String.capitalize()
함수는 이제 세르보크로아티아 가이 라틴 알파벳의 이중음자를 제목 대소문자(Dž
대신DŽ
)로 대문자화합니다.지원 중단 주기:
- < 1.4: 이중음자는 대문자(
DŽ
)로 대문자화됩니다.>=
1.4: 이중음자는 제목 대소문자(Dž
)로 대문자화됩니다.
도구
Windows에서 구분 문자가 포함된 컴파일러 인수는 큰따옴표로 전달해야 합니다
이슈: KT-41309
구성 요소: CLI
비호환 변경 유형: 동작
요약: Windows에서 구분 문자(공백,
=
,;
,,
)를 포함하는kotlinc.bat
인수는 이제 큰따옴표("
)가 필요합니다.지원 중단 주기:
- < 1.4: 모든 컴파일러 인수는 따옴표 없이 전달됩니다.
>=
1.4: 구분 문자(공백,=
,;
,,
)를 포함하는 컴파일러 인수는 큰따옴표("
)가 필요합니다.
KAPT: 속성에 대한 합성 $annotations()
메서드 이름이 변경됨
이슈: KT-36926
구성 요소: KAPT
비호환 변경 유형: 동작
요약: KAPT가 속성에 대해 생성하는 합성
$annotations()
메서드 이름이 1.4에서 변경되었습니다.지원 중단 주기:
- < 1.4: 속성에 대한 합성
$annotations()
메서드 이름은<propertyName>@annotations()
템플릿을 따릅니다.>=
1.4: 속성에 대한 합성$annotations()
메서드 이름은get
접두사를 포함합니다:get<PropertyName>@annotations()