Local blog for Korean speaking developers
이제 Android Pie SDK에서 Kotlin 지원이 강화되었습니다
Friday, October 5, 2018
<블로그 원문은
이곳
에서 확인하실 수 있으며 번역 리뷰에는 김태호(Google)님이 참여해 주셨습니다.>
게시자: James Lau, 제품 관리자(
@jmslau
)
자바 프로그래밍 언어를 사용하다 보면, null인 값의 멤버에 접근하려다 NullPointerException을 발생시키는 실수를 흔히 하곤 합니다. Kotlin은 null값을 가질 수 있는 유형과 null값을 가질 수 없는 유형을 명시적으로 구분하여 이러한 예외가 발생하지 않게끔 합니다. 즉, 코드에서 잠재적으로 NullPointerException을 발생시킬 수 있는 부분을 제거하고 앱의 전반적인 품질을 개선하는 데 도움을 줍니다. 또한, Kotlin 코드에서 Java 프로그래밍 언어로 작성한 API를 호출하는 경우에는 API에 포함된 null 허용 여부에 대한 어노테이션을 활용해 함수의 매개변수와 반환 타입의 null 허용 여부를 확인합니다. 주석에 없는 매개변수와 반환 유형은
플랫폼 유형
으로 취급되며, 이는 Kotlin의 null 안전 보증을 약화합니다.
Android 9 발표
에서, 가장 자주 사용되는 API에 대한 null 허용 여부 어노테이션이 포함된 새로운 Android SDK를 출시했습니다. 따라서 Kotlin 코드에서 새로운 Android SDK에 포함된 API를 호출할 때 null 허용 여부를 보다 명확히 확인할 수 있습니다. 자바 프로그래밍 언어를 사용하더라도, 앞에서 소개한 어노테이션을 사용하면 Android Studio에서 null 허용 여부 규칙을 위반하는 사례를 손쉽게 찾을 수 있습니다.
심각한 변화는 아닙니다
일반적으로 Kotlin에서 null 허용 여부 계약을 위반하면 컴파일 오류가 발생합니다. 그러나 새로운 어노테이션을 포함한 API가 기존 코드와 확실히 호환될 수 있도록 Kotlin 컴파일러 팀이 제공한 내부 메커니즘을 사용하여 해당 API를 ‘최근에 어노테이션이 추가된 API’로 표시합니다. 이러한 API들은 Kotlin 컴파일러에서 오류를 일으키는 대신 경고만 발생시키며, 이를 위해 Kotlin 1.2.60 이상을 사용해야 합니다.
지금은 새로 추가된 null 허용 여부 어노테이션이 경고만 발생시키지만, 내년에 출시되는 Android SDK부터 심각도 수준을 ‘오류’로 높일 계획입니다. 이는 코드를 업데이트할 시간을 충분히 제공하기 위해서입니다.
"Kotlin을 지원하는" SDK의 사용 방법
Android Studio에서
Tools > SDK Manager
로 이동합니다. 왼쪽 메뉴에서
Android SDK
를 선택하고 SDK Platform 탭이 열려 있는지 확인합니다.
Android Studio에서 SDK Manager를 사용하여 API 레벨 28 수정 버전 6용 SDK 설치
Android 8.+ (P)를 확인하고 OK를 클릭합니다.
Android SDK Platform 28 수정 버전 6
이 아직 설치되지 않았다면 이를 설치합니다. 그런 다음, 프로젝트의 컴파일 SDK 버전을 API 28로 설정하고 null 허용 여부 어노테이션이 포함된 새로운 Android Pie SDK를 사용하기 시작합니다.
프로젝트 구조 대화상자를 사용하여 프로젝트의 컴파일 SDK 버전을 API 28로 변경
Android Studio의 Kotlin 플러그인이 최신이 아닌 경우 업데이트해야 할 수도 있습니다.
Tools > Kotlin > Configure Kotlin Plugin Updates
로 이동해서 Kotlin 플러그인의 버전이 1.2.60 이상인지 확인합니다.
설정이 완료되면, Android SDK에서 null 허용 여부 규칙을 위반하는 코드가 있을 경우 빌드에서 경고가 나타나게 됩니다. 이런 경고의 예시는 다음과 같습니다.
Android SDK에서 코드가 최근에 추가된 null 허용 여부 계약을 위반할 경우 Kotlin 컴파일러에서 표시되는 샘플 경고.
또한 잘못된 null 허용 여부 상태로 Android API를 호출하면 Android Studio의 코드 에디터에서 경고가 표시되기 시작합니다. 예시는 다음과 같습니다.
android.graphics.Path API에서 최근에 null이 아닌 유형으로 주석이 추가된 매개변수에 대해 null 참조를 전달할 경우 Android Studio의 경고.
Java 프로그래밍 언어에서 null 허용 여부 어노테이션 활용
코드가 Java 프로그래밍 언어로 작성되었더라도 새로운 null 허용 여부 어노테이션을 활용할 수 있습니다. 기본적으로 Android Studio에서 null 허용 여부 계약 규칙을 위반하면 아래와 같은 경고를표시합니다.
Java 프로그래밍 언어로 작성된 코드가 null 허용 여부 규칙을 위반할 경우 Android Studio에서 경고 표시
이 검사를 활성화되었는지 확인하려면 IDE의 설정 페이지로 이동해서 "Constant conditions & exceptions" 검사를 찾고 해당 항목이 선택되어 있는지 확인합니다.
Settings의 Inspections 페이지에서 Constant conditions & exceptions 코드 검사가 활성화되어 있는지 확인합니다.
Java 프로그래밍 언어를 사용할 경우 null 허용 여부 규칙을 위반하더라도 컴파일러 경고나 오류가 발생하지 않습니다. 이 문제를 강조하는 방법은 IDE 내에서 코드를 검사하는 것뿐입니다.
프로젝트 전체에 대해 코드 검사를 실행하고 집계된 결과를 확인할 수도 있습니다.
Analyze > Inspect Code…
를 클릭하여 코드 검사를 수행합니다.
다음 단계
Android SDK API로 개발자에게 노출되어 있는 부분은 매우 크고, 현재까지는 API의 일부에만 주석을 추가했기에 앞으로 가야 할 길이 멉니다. 앞으로 출시될 Android SDK에는 기존 Android API에 null 허용 여부 어노테이션을 추가할 뿐 아니라, 새 API에도 해당 어노테이션을을 포함하여 출시할 것입니다.
Kotlin을 사용하는 개발자를 위해 "Kotlin을 지원하는" Android SDK,
AndroidX
(
Jetpack
의 일부)의 null 허용 여부 어노테이션,
Android KTX
를 통해 지속적으로 Android API를 개선하고 있습니다. 아직 Kotlin을 사용해보지 않으셨다면 한번 사용해보시기 바랍니다. Kotlin은 코드를 간결하게 해줄 뿐만 아니라 앱의 안정성도 개선합니다.
Kotlin으로 즐겁게 개발해 보시기 바랍니다!
Tag
ad
AdMob
admob_sdk
Advanced Power Searching
Android
Android App Quality
android back button
Android back end
Android navigation
Android Player API
android server
android up button
androidL
androidtv
androidwear
App Translate Service
Audio Focus
Chrome
Chromecast
Code-in 2012
Core App Quality Guidelines
Daydream
design
designing for Tablets
designsprint
dialog
Drive SDK
Game Developers Conference
GCi
GCi 참가자
GCPNEXT16
GDA
GDC
gdg
gdgkorea
Go
Google Cast
Google Code-in
Google Play
Google Play 스토어
Google Search
Google Summer of Code
Google+ Sign-In
Google+ Sign-In Bootcamps
Google+ 로그인
Google+ 로그인 부트캠프
googleanalytics
googleio
GooglePlay #AndroidDevStory #PlayStore #MaterialDesign #AndroidStudio #DeveloperConsole
GSOC
hackathon
HackFair 출품작
In-app Billing
io
io2014
ioapp
iobytes
ioextended
IRC Talk
IRC 서버
java7
kitkat
launch
Marshmallow
materialdesign
mobile ad
mobile_ads_sdk
multiscreen
NaCl
Native YouTube Player API
NRRN 사용 제한
Power Searching
product launch
SD 카드에 앱 설치
SecureKeyFactory
ux
webview
YouTube
YouTube Android Player API
YouTube API
YouTube API 3.0
YouTube API Update RSS Feed
광고
구글 HackFair
구글 Summer of Code
구글 개발자 사이트 홍보
구글 개발자 아카데미
구글 개발자 온라인 강좌
구글 검색
구글 고급 파워 서치
구글 드라이브 앱
구글 부트캠프
구글 아카데미
구글 코드인
구글 클라우드 플랫폼
구글 플러스 로그인
구글 핵페어
구글로 로그인하기
네이티브 클라이언트
데이드림
멀티 모바일
멀티 플랫폼
모바일 광고
수익화
스마트 브라우저
안드로이드
안드로이드 4.2
안드로이드 Back 버튼
안드로이드 Up 버튼
안드로이드 개인 정보 보호 정책
안드로이드 네비게이션
안드로이드 데이드림
안드로이드 디자인
안드로이드 방향탐색
안드로이드 보안
안드로이드 사용자 데이터
안드로이드 서버 백엔드
안드로이드 앱 품질
안드로이드 원격 제어
안드로이드 태블릿 디자인
안드로이드 현지화
안드로이드 화면 보호기
애드몹
애플리케이션 SD카드 설치
애플리케이션 개발 주민등록번호 사용 제한
애플리케이션 외부 저장 장치
앱 품질 체크리스트
오픈 소스
오픈소스 프로그램
웹 DMB
유튜브
유튜브 API
유튜브 API 3.0
유튜브 API 업데이트
유튜브 모바일
유튜브 안드로이드 플레이어 API
인앱 결제
인터넷상 주민등록번호 수집 이용 제한
주민등록번호 사용제한
추천이미지
출시
크롬브라우저
태블릿 디자인
태블릿용 앱
파워서치
한국 구글 개발자
한국 구글 개발자 사이트
핵심 앱 품질 가이드라인
핵심 태블릿 앱 품질 체크리스트
핵페어
핵페어 출품작
Archive
2019
Feb
Jan
2018
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2017
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2016
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2015
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2014
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2013
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Apr
Mar
Feb
Jan
2012
Dec
Nov
Oct
Sep
Aug
Jul
Jun
May
Mar
Feb
Jan
2011
Dec
Nov
Feed
Google
on