Understand Kotlin Coroutines on Android (Google I/O'19)

YIGIT BOYAR : 안녕하세요 모두들 환영합니다

내 이름은 Yigit Boyar입니다 저는 Android 팀의 엔지니어입니다 이봐 요, 제 이름은 세르게이입니다 그리고 저는 같은 팀에서 일합니다 숀 매 퀸런 : 안녕하세요, 저는 션입니다

나는 Android 개발자입니다 YIGIT BOYAR : 오늘 우리는 coroutines에 대해 이야기 할 것입니다 안드로이드에,하지만 우리가 그것에 대해 이야기하기 전에, 우리가 왜 일부 코 루틴을 필요로하는지 알아 내려고합시다 그리고 그것을 이해하기 위해, 어떻게 잊어 버립시 다 당신은 안드로이드에 AI 코드를 씁니다

이것이 우리가 작성하고자하는 꿈의 코드입니다 우리는 함수 호출은 네트워크 요청을합니다 도대체 무엇이 사용자를 얻고 텍스트 필드에 설정합니다 이것은 당신이 쓰고 싶은 것입니다,하지만 당신이 그것을 쓰면, 네트워크를 만들 수 없기 때문에 예외가 발생합니다

요청을 주 스레드에서 쉬운 우리는 코드를 스레드 안에 넣고 코드를 실행합니다 이제 textView가 불평 할 것입니다 백그라운드 스레드에서 UI 스레드를 만질 수는 없습니다

그리고 OK, 우리는 이런 종류의 코드를 작성할 것입니다 비동기로 만들 수 있습니다 콜백을 제공하고, 백그라운드 스레드에서 그립니다 UI 스레드에서 콜백을 호출합니다 이 코드는 코드를 작성하는 경우를 제외하고는 잘 작동합니다

이처럼, 당신은 메모리 부족 예외가 발생합니다 콜백을 왼쪽이나 오른쪽으로 새어 나올 것입니다 이것에 대한 해결책도있다 구독에 대한 이해를 가질 수있는 곳 이 체인을 유지합니다 그리고 당신이 멈 추면 언제든지 구독을 취소하십시오

그 중 하나가 작동하지만, 당신은 이런 식으로 끝납니다 그건 그렇고, 나는 이걸 만들지 않을거야 3 년 전, 우리가 Architecture Components를 시작했을 때, Google App 코드를보고있었습니다 그리고 나는 26 라인을 가진 하나의 어플리케이션을 발견했다 [INAUDIBLE]을 (를) 등록하십시오

Google에서 일어난다면 모든 곳에서 발생합니다 우리는 항상 최고의 코드를 작성하지는 않습니다 그러나 이것에 대한 해결책도 있습니다 RxJava와 같은 것을 사용한다면 이 함수는 관찰 할 수있는, AutoDispose 라이브러리를 사용할 수 있습니다 귀하의 [INAUDIBLE] 라이프 사이클과 연관된 가입 안전하게 가입하십시오

그리고 이것은 완벽하게 작동합니다 마찬가지로 LiveData를 사용할 수도 있습니다 관찰 할 수있는 생명주기가 있어야합니다 이것은 또한 작동합니다 그래서이 오래된 문제입니다, 그렇죠? 우리가 이미 여기에 대해서 이야기하는 이유는 무엇입니까? 좋은 해결책? 매년 우리는 이러한 개발자 벤치 마크 조사를 실시합니다

우리는 개발자들에게 그들이 어떻게 행동하는지, 그들의 문제는 무엇인지 물어 본다 그리고 작년에 우리가 조사한 설문 조사 중 최고 불만 중 하나 스레딩과 동시성이었다 개발자는 이것이 Android에서 어렵다고 말합니다 가장 큰 요청 중 하나는 바로 LiveData ++입니다 사람들은 우리가 LiveData를 확장하기를 원합니다

그것을 RxJava와 같이 만드십시오 우리는 왜 그런가? 왜 이걸 원하니? 우리에게는 좋은 해결책이 있습니다 그 중 하나만 사용하십시오 그래서 우리는 우리가 모를 때 최선을 다했습니다 우리는 UX 연구를 수행했습니다

이것은 동시성에 관한 User Experience Research입니다 그래서 우리는 9 명의 개발자와 심층 면접을했습니다 그들이하는 일은 부부를 위해 정규 일을하는 것입니다 자신의 회사에서 몇 주 그리고 동시성에 관한 문제를 볼 때마다, 이 관찰 가능한 것처럼, 그들은 단지 그것을 적어 둡니다

이것이 문제였습니다 이것이 내가 어떻게 해결했는지입니다 그리고 이것이 제가 그것에 대해 어떻게 느끼는지입니다 이 연구에서 우리는 세 가지 주요 사항에 초점을 맞추 었습니다 우리의 관찰 가능한 데이터 보유자 인 LiveData에 중점을 둡니다

우리는 RxJava에 중점을 두었습니다 우리는 Reactive Extensions 라이브러리를 보았습니다 그리고 coroutines는 정지 가능한 계산을 제공합니다 그리고 그 연구의 결과에서 이것은 결론이었습니다 LiveData는 사람들이 좋아한다고 말하면서, 그러나 우리는 완전한 해결책을 원합니다

사실 재밌 네요 LiveData는 메인 스레드 외에는 아무 것도 지원하지 않습니다 그러나 우리는 동시성 연구에서 그것에 대해 이야기합니다 RxJava의 경우 놀랍습니다 사람들은 그것을 사랑하고 싫어합니다

그들은 그것이 얼마나 강력한지를 좋아하지만 일반적인 불만 사항 우리는 항상 그것이 항상 잘못 사용되고 있다고 들었습니다 과잉 느낌 그리고 코 루틴의 경우, 이것은 정말 같았습니다 최상의 솔루션 인 것처럼 보이지만 확실하지 않습니다 그것은 아주 새롭다

성숙하지 않습니다 그래서 이것은 전반적인 결론이었습니다 우리는 단순한 솔루션이 필요하다고 말했습니다 그 해결책을 배우는 것이 어렵지 않아야합니다 포괄적이어야합니다

따라서 다양한 유스 케이스로 확장 할 수 있어야합니다 그리고 그것은 견고해야합니다 테스트 스토리가 내장되어 있어야합니다 그래서 우리는 두 가지 결정을 내 렸습니다 우리가 말했지, 좋아, 우리는 일류 품질 Jetpack의 지원

그리고 우리는 RxJava에 대한 더 많은 지원을 할 것입니다 우리의 문서에서 그러나 오늘날, 그것은 coroutines에 관한 전부입니다 션, 왜 우리 한테 조금 더 말하지 그래? 무슨 coroutines에 관하여? SEAN MCQUILLAN : 고마워요, Yigit 그래서 나는 단지 5 분 걸리고 싶다

코 루틴의 문제점에 대해 조금 이야기 해보십시오 위대한 해결 그래서, 문장에서, coroutines가 해결하는 주된 문제 콜백을 대체하여 비동기 프로그래밍을 단순화하고 있으며, 이것은 아주 추상적입니다 그럼 몇 가지 샘플을보고 어떻게 생겼는지 살펴 보겠습니다 나는 가상의 네트워크 요청을 세 가지 방법으로 만들 예정입니다

첫 번째 스타일은 차단 스타일이라고합니다 결과가 직접 반환됩니다 함수에서 실행 방법을 살펴 보겠습니다 그리고 재미있게, 나는 주 스레드에서 그것을 실행할 것입니다

호출 될 때, 블로킹 네트워크 콜 호출 한 스레드를 차단합니다 따라서 네트워크 요청이 실행되는 전체 시간, 주 스레드가 차단됩니다 UI를 업데이트해야하는 스레드입니다 사용자 접촉을 처리하므로 사용자 앱이 정지 된 것을 보거나 충돌 할 수 있습니다 이제 멈추고 거기에 있다고 말하고 싶습니다

네트워크 API의 차단 스타일에 아무런 문제가 없습니다 하지만 우리가 Android에서하고 싶은 것이 아닙니다 그래서, Yigit가 이미 이야기 한 것처럼, 우리는 일반적으로 콜백을 도입했습니다 그럼 어떻게 실행되는지 봅시다 우리는 여전히 메인 스레드에서 이것을 호출 할 것입니다

하지만 이제 fetchUser가 호출되면, 주 스레드는 자유롭게 다른 작업을 수행 할 수 있습니다 그것은 onDraw를 다루거나 사용자 접촉에 응답 할 수 있습니다 그리고 네트워킹 라이브러리는 실제로 요청을 실행하는 다른 스레드 결과가 준비되면 네트워크 라이브러리 내가 또 다른 콜백을 사용할 수있다 그것은 내 코드를 다시 호출하고 그것이 준비되었음을 알려주는 것입니다 정확히 같은 코드를 coroutines로 다시 작성해 보겠습니다

차단 스타일처럼 보입니다 fetchUser의 결과는 즉시 사용할 수 있습니다 콜백을 도입 할 필요가 없습니다 코 틀린에게 나는 코 루틴으로 이것을 실행하기를 원한다 이 함수에는 일시 중단 수정자가 있습니다

우리가 그것을 실행할 때 여전히 주 스레드에 있습니다 주 스레드는 콜백과 마찬가지로 차단 해제됩니다 그리고 이것은 coroutines의 핵심 개념입니다 네트워킹 요청은 여전히 ​​다른 스레드에서 실행됩니다 결과가 준비되면, 코 루틴을 다시 시작합니다 어디에서 멈췄다

이 코드는 콜백 스타일보다 훨씬 간단합니다 여전히 Android 앱을 작성할 수 있도록 보장합니다 사용자를 위해 동결하지 마십시오 이것은 코 루틴의 핵심 메커니즘입니다 일시 중지하고 다시 시작하십시오

코 루틴이 중지되면 실행되지 않습니다 일시 중지되었습니다 그리고 그것이 다시 시작될 때, 그것은 중단했던 곳에서부터 나아집니다 코 루틴을 콜백으로 일시 중지한다고 생각할 수 있습니다 나머지 기능들

그래서 당신은 그것을 함께 넣었습니다 일시 중지하고 다시 시작하십시오 콜백을 대체하십시오 우리는 심지어 그것을 시각화 할 수 있습니다 콜백 버전 및 코 루틴 버전 거의 똑같은 방식으로 실행됩니다

되돌아 가서 fetchUser를 살펴 보겠습니다 네트워크를 만드는 함수를 어떻게 호출 할 수 있습니까? 메인 스레드의 요청? 시작하려면 fetchUser를 만들어야합니다 또 다른 정지 기능 이것은 코 틀린에게 코 루틴과 함께 작동한다고 알려줍니다 그리고 내부에서 다른 정지 기능을 호출합니다

withContext를 호출합니다 우리는 그것을 dispatchersio에게 넘겨 줄 것이다 그 디스패처 확대, Kotlin 디폴트, IO 및 메인의 세 가지 디스패처를 제공합니다 그리고 그들은 다른 것들에 사용됩니다

CPU 집약적 인 작업에는 기본값을 사용해야합니다 100 가지 요소의 목록을 변형하는 것과 같은 것들, DiffUtil 호출 또는 사전 계산 텍스트 주 스레드에서 실행하기에는 너무 오래 걸리는 것이 있습니다 기본 발송자에서 실행해야합니다 IO는 네트워크를 차단하는 데 최적화 된 운영자입니다 디스크 IO

필요하면 언제든지 사용해야합니다 파일 쓰기와 같은 API를 차단하는 코드 작성 또는 소켓에서 읽는 중 그리고 메인 – 이것은 안드로이드의 주요 스레드입니다 그리고 놀랍게도, 그것은 우리의 추천입니다 응답으로 코 루틴을 시작할 수있는 적절한 장소 UI 이벤트

보통 코 루틴을 시작하기 때문에 메인 스레드에서 머무르다 간단한 조작을위한 추가 작업을 피할 것입니다 그런 다음 목록을 변형하거나 파일을 작성해야 할 때, coroutines를 사용하면 다른 Dispatcher 중 하나로 전환 할 수 있습니다 withContext를 사용하여 withContext는 전달한 블록을 실행합니다

운영자에게 말하십시오 여기이 블록은 디스패처에서 실행됩니다 네트워크 통화를 차단하는 것은 무료입니다 이를 통해 우리는 주요 안전 API를 제공 할 수 있습니다 당신은 단지 읽고 쓸 수있는 함수를 만들 수 있습니다

이 같은 네트워크에서 및 주 스레드에서 호출하십시오 Android에서 큰 이점입니다 이제는 모든 단일 기능에 대해 걱정할 필요가 없습니다 어떤 스레드가 실행될 필요가 있습니다 대신, 나는 단지 그것을 부를 수있다

기능 자체로 메인 쓰레드에서 호출하는 것이 안전하다는 것 코 루틴 소개를 끝내기 위해 Kotlin이 어떻게 구현하는지 살펴보십시오 모든 스레드에는 호출 스택이 있습니다 디버거 또는 스택 추적에서 볼 수 있습니다 Kotlin이 실행중인 기능을 추적하는 방법입니다

및 그 지역 변수 일시 중지 기능을 호출 할 때, Kotlin은 사실을 추적해야합니다 정규 함수 대신에 코 루틴을 실행합니다 이것을 서스펜션 마커로 나타낼 것입니다 서스펜드 마커 위에있는 모든 것은 코 루틴이됩니다

아래의 모든 것은 정규 기능입니다 그런 다음 Kotlin은 정상적인 기능처럼 loadUser를 호출합니다 스택 스택에 스택 항목을 넣을 것입니다 그리고 이것은 loadUser에 대한 지역 변수입니다 저장 될 것이다

그런 다음 발견 될 때까지 실행합니다 다른 일시 중단 함수 호출 이제 Kotlin은 일시 중지를 구현해야합니다 어떻게 그럴 수 있죠? 일단 당신이 그것을 이해하면 간단합니다 Kotlin이해야 할 일은 상태 복사입니다

함수를 스택에서 다음 위치로 옮긴다 그것은 나중에 저장할 수 있습니다 모든 중단 된 코 루틴을 여기에 넣을거야 스택과 같은 구조는 아닙니다 그런 다음 Kotlin은 실제로 fetchUser를 호출합니다

다른 스택 엔트리를 작성해, withContext를 호출하면 (자) 저것을 또한 중단한다 그래서이 시점에서 주 스레드의 모든 coroutine 일시 중지되었습니다 그리고 이것은 주 스레드가 onDraw 핸들과 같은 다른 작업을 수행 할 수 있습니다 또는 사용자 접촉에 응답 할 수 있습니다 그리고 이것은 정말로 중요합니다

스레드의 모든 coroutine이 일시 중단 된 경우, 스레드는 다른 작업을 수행 할 수 있습니다 우리가 몇 초 빨리 감기면, 네트워크 결과가 준비됩니다 그리고 코 틀린은 이력서에 전화해야합니다 그렇게하기 위해서는 저장 상태와 복사본 만 필요합니다 그것을 다시 스택에 놓고, 기능을 다시 시작합니다

loadUser를 다시 시작하면 계속해서 정상적으로 실행을 계속하십시오 loadUser가 오류가 발생하면 예외가 발생했습니다 바로 거기 중지 및 재개 메커니즘은 coroutines 뒤에있는 마법입니다 그리고 우리는 당신에게 그것을 보여주고 싶었습니다

그들이 당신처럼 일하는 방식을 이해할 수 있습니다 코드에서 사용하기 시작하십시오 그것은 coroutines 소개를 감쌌다 안드로이드의 코 루틴은 우리에게 능력을 제공합니다 콜백을 대체하여 코드를 단순화하는 방법 우리가 주요 안전을 만들어 보장 할 수 있도록 우리는 주 스레드를 차단하지 않습니다

이제 세르게이에게 넘겨 줄거야 누가 오늘 사용할 수있는 도서관에 대해 조금 이야기 할 것인가? coroutines와 함께 고마워, 션 그래, 그 스레드는 [INAUDIBLE],하지만 우리는 정말로 우리의 실제 적용에 도움이되고 싶습니다 그리고 매우 어린 코 루틴에도 불구하고, 이미 그들을 지원하는 도서관이있다

그들의 안정된 또는 더 나은 유물에서 WorkManager로 시작하겠습니다 AndroidX에서 우리에게 새로운 브랜드입니다 이미 안정적인 릴리스에서 코 루틴을 지원합니다 그리고 코 루틴 작업에도 사용할 수 있습니다

그러나 한 발 뒤로 물러나서 알아 내려고합시다 왜 그렇게하는지, 우리는 그것을 사용합니다 그래서 이것은 전형적인 노동자들의 흐름입니다 따라서 WorkManager에 익숙하지 않은 경우, 당신은 일종의 노동자라고 생각할 수 있습니다 그 긴 배경 직업 않습니다

몇 가지 제약이있을 수 있지만 매우 간단합니다 그냥 약간의 일 그 전형적인 유스 케이스, 당신은 일부 로컬 데이터를 웹 서버와 동기화해야합니다 그리고이 흐름이 너처럼 보일거야 데이터베이스에서 새 노드를 쿼리하고, 그런 다음 서버에 업로드하십시오

마지막으로, 해당 노드를 성공적으로 동기화 된 것으로 표시합니다 콜 루틴은 필요 없습니다 음, 실제로, 우리는 취소에 대해 이야기하기 시작하지 않았습니다 취소 사유는 여러 가지 이유로 발생할 수 있습니다 예를 들어이 작업자에 대한 제약 조건은 더 이상 충족되지 않습니다

UI를 제공 한 경우 사용자가이 작업을 명시 적으로 취소합니다 그러면 취소를 어떻게 지원할 수 있습니까? 음, 그런 식으로하려고 할 수 있습니다 ifCheck를 사용하여 다른 모든 줄을 넣으려고합니다 어리석은 것을보기 시작합니다 더군다나 실제로는 그렇지 않습니다

이 전화는 아마도 가장 비싼 전화 일 것입니다 네트워크에 연결되어 일부 작업을 수행하기 때문에, 취소 신호 전파가 없으므로, 그것이 시작 되었다면 무엇이든 상관없이 끝까지 달려 가라 그리고 이것은 실제로 노동자로 하여금 우리를 도울 것입니다 우리는 아직 그것에 대해 말하지 않았지만, 코 루틴은 콜백을 멋지게 잡아라 또한 좋은 cancellation 속성을 제공합니다

따라서 모든 일시 중지 기능을 취소 할 수 있습니다 이 취소에 대응할 수 있습니다 또한, 모든 내부 호출을 전파합니다 이 취소 신호 이러한 호출 내부의 코드가 여전히 차단되고 있다고 말할 수 있습니다

우리는 어쨌든 그로부터 이익을 얻지 못합니다 이것은 사실입니다 그러나 Room을 데이터베이스 솔루션으로 사용하는 경우, 쿼리를 일시 중지 기능으로 표시 할 수 있습니다 그리고 Room이 취소를 처리합니다 Sean이 여러 번 언급 한 것처럼 실을 꿰는 것뿐만 아니라, 이 일은 안전 할 것입니다

방은 스레딩을 처리합니다 그것은 배경 스레드에서 쿼리를 실행합니다 그럼, 우리 데이터베이스 호출은 지금 취소 할 수 있습니다 그러나 우리가 전에 논의한 것처럼, 주요 호출은 이것입니다 실제로 Retrofit을 사용하는 경우, Retrofit 이미 벌금을 부과 했으므로 일시 중지 할 수도 있습니다

네트워크 호출에 대한 일시 중지 식별자를 지원합니다 Retrofit을 강조하고 싶습니다 AndroidX에 포함되어 있지 않습니다 Android에서 설계된 자바입니다 다음에 Android를 사용하면 Android [INAUDIBLE]이 (가) 포용합니다

coroutines, 우리는 그것을 좋아한다 하루가 끝나면 우리에게는 일이 적습니다 좋은 이제이 코드는 취소를 지원합니다 그리고 이전처럼 쉽게 보입니다

그래서 우리는 무료로 취소를 받았습니다 그래서 이것들은 물건들에 대한 빠른 견해였습니다 오늘 이용 가능했습니다 그리고 Yigit은 우리가 방금 만든 많은 새로운 사람들을 당신에게 선물 할 것입니다 BOIGAR : 감사합니다, Sergey

그래서, 지금까지 우리는 코 루틴으로 할 수있는 것에 대해 이야기했습니다 그리고이 이야기의 나머지 부분을 위해, 우리는 새로운 것을 이야기 할 것입니다 그래서 첫 번째는 LiveData와 coroutines입니다 이제 매우 명확 해지기 위해 LiveData 동시성을 위해 설계되지 않았습니다 그것은 관찰 가능한 가치 보유자입니다

그리고 너는 접근 할 수있을 것으로 예상된다 메인 thread로부터의 값 그건 의도적 인거야 그러나 그것이 상호 운용 될 수 없다는 것을 의미하지는 않습니다 그래서 이것이 우리가 오늘 당신에게 제공 할 것입니다 coroutines와 함께 LiveData를 사용하는 쉬운 방법이있을 것입니다

따라서 가장 보편적 인 사용 사례는 가치가 있다는 것입니다 당신은 코 루틴에서 계산하기를 원합니다 결과를 LiveData로 제공하려고합니다 오늘 라이프 사이클 22 알파 01 유물로 시작하여, 이 새로운 API 인 LiveData를 얻습니다

따라서 시퀀스와 매우 유사한 빌더 함수입니다 Kotlin의 건축업자 그 안에 coroutines 블록을 전달합니다 그리고 안으로, 당신은 당신이 원하고 전화를 할 수 있습니다 이 함수는 값을 전달하는 함수를 내 보냅니다

따라서이 데이터베이스로드 기능을 보면, HLS [INAUDIBLE] 기능입니다 이 경우 사용자가 emit을 호출하기 때문에, 우리는 당신을 위해 그 타입을 추론 할 수 있습니다 이것을 지정해야합니다 따라서이 간단한 LiveData API 귀하의 LiveData 요소들 사이의 간격을 연결합니다 그리고 당신의 coroutines

이제 API에 대해 좀 더 자세히 살펴 보겠습니다 이것이 세 가지 매개 변수입니다 그리고 첫 번째 문맥입니다 그렇다면 우리는 왜 문맥이 필요한가? 이 데이터가 loadUser 함수라면, [INAUDIBLE] 기능은 일반적인 기능 이었지만, 이 코드를 작성하면 주 스레드 예외에 대한 IO를 수신하려면, 이 블록은 기본적으로이 그림의 메인에 그려지기 때문입니다 그러나 우리는 그것을 바꿀 수 있습니다

이 사진의 입출력과 같이 상황을 알릴 수 있습니다 이제이 코드는 완벽하게 작동합니다 너 한테 내가 변하지 않았 음을 알아줬으면한다 코드의 모든 내용 당신이 원하는 어떤 디스패처에서든지 내보낼 수 있습니다 값을 변경하기 위해 기본 Dispatcher에있을 필요는 없습니다

이제 두 번째 방법은 정말 어색한 매개 변수입니다 timeout이라고 불린다 시간 초과 매개 변수가 필요한 이유를 이해하려면 Android의 악명 높은 회전 문제를 살펴 보겠습니다 그래서 왼쪽에는 LiveData를 제공하는 ViewModel이 있습니다 그리고 오른쪽에는 활동 디스크가 있습니다

그래서 내 활동이 시작된 상태로가는 동안, LiveData가 활성화됩니다 확인을 의미합니다 사용자가 볼 수있는 관찰자입니다 일부 값을 만드는 것이 더 좋습니다 그러나 그 시간 동안 우리의 활동이 어떻게 변화합니까? 그래서 그것은 멈추게 될 것입니다

LiveData는 비활성 상태가되거나 파괴되거나, 새로운 활동이 올 것입니다 지금 당장은 LiveData를 관찰하는 사람이 없습니다 그래서 결과를 낼 이유가 없습니다 새로운 것을 다시 시작하는 것을 제외하고는, 다시 활성화됩니다 여기서 우리가 풀려고하는 문제는 이 차이는 LiveData 동안 신속하게 매우 빠르게 연속적으로 비활성화되고 활성화됩니다

보통 1 초 미만 어떻게 해결할 수 있을까요? 코드 블록을 어떻게 실행하는지 자세히 살펴 보겠습니다 더 잘 이해하기 위해 그냥 타이머 기능을 작성하려고합니다 기본적으로 LiveData 용 타이머를 만듭니다 현재 시간을 가져오고, LiveData 빌더를 반환하며, 그리고 무한 루프에서, 그것은 단지 방출한다

시간, 1 초 지연, 시간 방출, 지연 1 초, 결코 끝나지 않습니다 그리고 내가 보여주고있는이 코드는 100 % 쓸 수 있습니다 실제로 어떻게 작동합니까? 이 블록에 의해 반환 된 LiveData가 활성화되면, 우리는이 블록을 실행했는지 확인합니다 그리고 우리가 그 블록을 실행하지 않으면, 이제 실행을 시작합니다 우리가 그것을 실행하는 동안, 그 블록이 비활성화되면, LiveData가 비활성 상태가되면, OK,이 블록이 아직 실행 중입니다

그리고 아직 실행중인 경우 완료 할 시간을줍니다 그러나 타임 아웃 후에도 여전히 실행중인 경우 우리는 기본적으로 비활성 상태입니다 불필요한 계산입니다 LiveData를 관찰하는 사람은 아무도 없습니다 그러나 보드는 계속 달리고있다

그래서 우리는 단지 그 연속을 취소합니다 코 루틴 따라서 LiveData가 다시 활성화되면, 우리는 단지 그것을 재시작 할 것입니다 당신은 한번만 할 수 있습니다 그래서 완료되면, 거기 다시 시작할 이유가 없습니다

이제 하나 이상의 값을 방출 할 수 있습니다 이제 우리가 가지고 있던 샘플 주위에 구조를 만들자 getUser가있는 저장소가있는 곳 함수, loadUser 함수 및로드 해당 값을 내 보냅니다 자, 대부분의 경우, 이것은 작성한 코드가 아닙니다 웹 서비스로 이동하여 업데이트 된 사용자를 가져와야합니다

데이터베이스를 업데이트하고 해당 값을 다시 내 보냅니다 그래서 emit을 여러 번 호출 할 수 있습니다 당신이 그 격리 구역에있는 한 당신이 원하는대로 그러나 당신은 말할지도 모른다 음, 대부분의 경우 데이터베이스는 그렇지 않다

귀하의 사용자를 반환, 그것은 당신을 위해 LiveData를 반환 사용자, 당신이 변화에 대해 통보 받기를 원하기 때문입니다 글쎄, 여러분이 말할 수있는 것은 emit 소스를 호출 할 수 있다는 것입니다 MediatorLiveData를 사용하신다면, 이것은 emitSource와 매우 비슷합니다 LiveData에서 가져온 값이 무엇이든간에 그냥 내 가치로 만드십시오 변형과 같은 것을 실행할 수 있습니다

아, 우리도이 여분의 방출을 필요로하지 않습니다 우리가 이미 데이터베이스를 관찰하고 있기 때문에, 그래서 당신은 그것을 제거 할 수 있습니다 따라서이 LiveData API는 기본적으로 우리에게 제공합니다 coroutines와 함께 LiveData를 작동시키는 아주 좋은 방법입니다 하지만 ViewModels은 어떻습니까? SEAN MCQUILLAN : 고마워요, Yigit

코 루틴을 통합하는 방법에 대해 조금 이야기 해 봅시다 귀하의 ViewModel에 하지만, 우선 누출에 대해 조금 이야기하고 싶습니다 특히 코 루틴 누출 그리고 이것들은 매우 심각한 문제입니다

그들은 일종의 메모리 누출과 같아요 우리 모두가 잘 알고 있지만 더 나 빠졌다 코 루틴은 다시 시작될 수 있습니다 또한 메모리를 사용하는 것 외에도 CPU를 사용할 수 있습니다 파일을 쓸 수 있습니다

그것은 일어날 필요가없는 네트워크 요구를 만들 수 있습니다 코 루틴 누출 문제를 해결할 수 있도록, 코 틀린 (Kotlin)은 코 루틴 범위에 대한 아이디어를 소개했습니다 그렇다면 범위는 무엇입니까? 글쎄, 그것은 실제로 트랙을 유지하는 단지 방법이다 당신의 coroutines의 모든 코 루틴은 범위에서 실행해야합니다

그리고 범위는 모든 것을 취소 할 수있는 능력을 얻습니다 그것 안의 coroutines의 또한, 그들은 또한 장소입니다 코 루틴에서 잡히지 않은 예외가 섞여 버릴 수 있습니다 너는 그걸 모두 모으고 너는 범위를 사용하면 코 루틴을 누출하지 않도록 할 수 있습니다

Sergey가 말한 WorkManager는 범위를 제공합니다 Yigit이 방금 이야기 한 LiveData Builder도 마찬가지입니다 viewModelScope는 범위입니다 ViewModel의 KTX 라이브러리에서 멸종 속성입니다 나는 그 무서운 무한 루프의 다른 하나를 할 것이다

Yigit가 보여준 것들,하지만 이번에는 코 루틴에서 나는 ViewModel에서 시작한다 viewModelScope을 사용하여 스코프에 코 루틴을 시작합니다 그리고 기본적으로 이것은 메인에서 시작됩니다 그런 다음 무한 루프를 시작합니다

그 자체를 멈추는 법을 알아라 그리고 매 초마다 파일을 씁니다 이제 꽤 비쌉니다 코 루틴은 파일을 더 빨리 또는 더 빨리 작성하지 않으며, 우리는 분명히이 작업을 누설하고 싶지 않습니다 ViewModelScope를 사용하면 이와 같은 코드를 안전하게 작성할 수 있습니다

사용자가 화면에서 벗어날 때, 범위가 취소됩니다 이 매우 값 비싼 작업이 누출되지 않도록 보장합니다 따라서 viewModelScope는 코 루틴 누출을 방지 할 수 있습니다 모든 코 루틴을 보장함으로써 사용자가 화면을 떠날 때마다 취소됩니다 나는 세르게이에게 넘겨 줄거야

누가 우리가 추가하고있는 다른 영역에 대해서 이야기 할 것인가 세이지 바실리 네크 : 그래, 고마워, 션 네 자연스럽게 제공되는 또 다른 기능 범위는 라이프 사이클입니다 그 이름에서 시작과 끝이있는 것을 볼 수 있습니다

그리고 네가 생각한다면, 네, 그건이 수명주기에 익숙합니다 소유자 인터페이스, 당신은 실제로, 그것은 당신의 활동이기 때문입니다 그것은 당신의 단편입니다 그 단편을 편리하게 잊지 마라 두 개의 다른 라이프 사이클이 있습니다

그리고 두 번째 것은 – 우리는 그것의 내부를 사용합니다 불행히도, 저를 위해서, 저는 이제 그것에 대해 이야기해야합니다 그러나 거기에서 더 정확한 범위를 정의합시다 아시다시피, 당신의 단편은 다시 만들어집니다 구성 변경 사항 이상

따라서 수명이 더 짧아 질 수 있습니다 더 길 수 있습니다 그리고 lifecycleScope은 단지 그것을 반영합니다 라이프 사이클 소유자가 파괴 이벤트를 받으면, lifecycleScope가 취소됩니다 그리고 모든 내부 업무 또한 취소됩니다

따라서 알 수 있듯이 lifecycleScope UI와 매우 밀접하게 결합되어 있습니다 그리고 그것은 그런 상황에서 가장 잘 작동합니다 그래서 이전에, 당신은 뭔가를 할 것입니다 당신이 지연된 UI를 보여 주기로 결정했을 때 이런 식으로 그리고 이것은 꽤 간단 해 보입니다

그래서 우리는 조금 더 어렵게 만들 수 있습니다 두 단계가 있다면 이 심오함 때문에 아주 못 생겨 보입니다 그리고 실제로, 당신이 면밀한 관찰을 가지고가는 경우에, 이 mainHandler 때문에 실제 문제가 있습니다 그리고 UI에 닿는 기능은 실제로는 그렇지 않습니다 mainHandler가 함께하기 때문에 잘 작동합니다

GlobalScope의 일종입니다 라이프 사이클을 전혀 신경 쓰지 않습니다 그리고 그 함수들은 참조를 가지고 있습니다 파편이나 활동에 지연이 충분히 길다면 쉽게 많은 것들을 누출시킬 수 있고 그들로부터받을 수있다

그들의 예외 lifecycleScope는 이러한 코덱을 취소하지만, 그들은 우리에게 showFullHint입니다 일시 중지 기능이기 때문에 일종의 콜백입니다 [INAUDIBLE]에서 취소 할 것입니다 일단 당신의 라이프 사이클이 파괴되면

따라서 매우 순차적이기 때문에이 코드는 멋지게 보입니다 그리고 실제로 더 안전합니다 그러나 나는 lifecycleScope 약간의 위험 지대입니다 그러니 조금 되감습니다 나는 당신에게 개조 및 룸 지원을 보여준 사람이었습니다

일시 중단 기능 Yigit는 당신에게 뭔가를 보여 줬어 – 아주 친숙한 – 그런 것 같습니다 당신이 말할 때, 좋아, 나는 그 기능들을 결합 할 것이다 네트워크 및 데이터베이스에 대한 일부 저장소 패턴, 이제는 단 하나의 기능 만 사용할 수 있습니다 이 모든 작업을 조정하는 일시 중지 기능입니다

그래서 나는 그것을 호출하는 범위가 필요합니다 그렇다면 왜 내 수명주기에 그것을 부르지 않았을까요? 그것은 실제로 가장 밝은 아이디어는 아니지만 왜? 그리고 저를 잘못 이해하지 마십시오 Yigit와 Sean이 당신에게 모든 것을 올바르게 팔았습니다 주 스레드를 잠그지 않습니다

[INAUDIBLE]이 (가) 누출되지 않습니다 그러나, 당신은이 그림을 기억합니까? lifecycleScope가 취소되고 모든 구성이 변경됩니다 네트워크 요청이 발생 함을 의미합니다 매번 취소되므로 낭비가됩니다 사용자 자원과 리소스를 낭비하고 있습니다

환경에 좋지 않습니다 어떻게 제대로 할 수 있을지 음, 사실 중 하나가 Yigit에 의해 제시되었습니다 이 LiveData 빌더는 매우 잘 작동합니다 이런 상황에서

나는 당신에게 어떻게 접근 할 수 있는지 당신에게 보여줄 것입니다 이런 종류의 작업을위한 출발점 ViewModel 스코프입니다 따라서이 loadNote 함수를 실행하면됩니다 이 ViewModel 스코프 그런 다음 ViewModel에 함수를 도입했습니다 노트를 가져올 때 ViewModel에서 UI를 연결합니다

글쎄, 우리가 논의한 것처럼, 그것은 어딘가에있는 네트워크 호출입니다 의 loadNote 그래서 이것은 동기식 동작입니다 그래서 그것은 중단되어야합니다 그리고 이제는이 노드를 어떻게 든 연결해야합니다

하나의 범위에로드됩니다 그리고 loadNote 함수는 다른 범위에서 호출됩니다 글쎄, 나는 CompletableDeferred를 사용할 것이다 글쎄, 약간 무서운 것 같지만 실제로는 아주 간단한 것 잠시 후에보실 수 있습니다

우리가 어떻게 사용하는지 – 우리는 우리가 적재 한 메모와 함께 연기를 완료한다 그것은 단지이 오브젝트에 노트를 넣었습니다 아무 반응이 없습니다 그리고 독자는 무게 기능을 가진 주를 요구합니다 이걸 연기 했어 메모가 아직 준비되지 않은 경우 리더가 일시 중지됩니다

준비가되면 리더가 즉시 재개됩니다 이것이 우리가 ViewModel을 구현 한 방법입니다 그리고 마지막 단계에서 우리는 라이프 사이클 범위에서이를 호출합니다 ViewModel에서 소개 한이 loadNote 함수 그리고 우리의 네트워크 호출은 ViewModel에서 제대로 실행됩니다

범위이므로 구성 변경의 영향을받지 않습니다 그리고 우리의 업데이트 UI 기능은 수명주기 소유자가 파손되면 유출됩니다 그러나 일단 그림에 조각을 추가하면, 상황은 언제나처럼 복잡해집니다 그래서 우리는 조각 트랜잭션을 실행하기로 결정했습니다 그리고 합법적 인 주 예외를 받게됩니다

아무것도 보증하지 않기 때문에 조각을 실행할 수있는 올바른 상태에 있습니다 업무 그리고 우리는 뭔가 똑똑하고 도입했습니다 거래를 돕는 몇 가지 특수 기능 이런 종류의 상황들 그리고 이것은 약간 까다로울 것입니다

실제로는 상당히 복잡한 것 하지만 무슨 일을하는지,이 블록은 응용 프로그램이 시작되거나 다시 시작될 때, 그것이 전경에 있다는 것을 의미합니다 그리고이 블록은 귀하의 라이프 사이클이 막 생성되었습니다 자, 실제로 어떻게되는지에 대한 예를 살펴 보겠습니다 방법

그래서 당신은이 기능을 가지고 있습니다 아마도 처음에 불려집니다 메모가 준비되지 않았기 때문에 블록이 일시 중지됩니다 그런 다음, 일단 이것이 준비되면, 보통의 상황에서, 우리는 실행을 재개하고 다음 줄로 진행할 것입니다 그러나 launchWhenStarted 기능으로, 우리는 가서 라이프 사이클을 점검 할 것입니다

시작되지 않으면 Google은 수명주기가 끝날 때까지 다시 시작된다 일단 시작되면 우리는 다음 라인으로 진행 이 트랜잭션을 쉽게 실행할 수 있습니다 그래서 우리는이 예외적 인 상황에 처하지 않을 것입니다 그래서이 블록을 강조하고 싶습니다 생성 중에 일시 중지되었습니다

그리고 취소 된 것과는 다른 것입니다 lifecycleScope에 의해 취소가 여전히 제공되기 때문에 destroyEvent가 발생했습니다 그리고 지금, 당신이 볼 수 있듯이, 그것은 무언가입니다 우리가 시험 할 필요가있는 부분은 Sean이 도와 줄 것입니다 SEAN MCQUILLAN : 고마워요, Sergey

오늘 우리는 코 루틴에 대해 많은 이야기를 나눴습니다 API를 정리하는 방법에 대해 이야기했습니다 콜백을 대체하여 일시 중지했다가 다시 시작합니다 우리는 그들이 할 수있는 다양한 방법에 대해 이야기했습니다 다른 상황에서 사용됩니다

그리고 모든 것이 훌륭합니다 정말 끝내주는 군 그러나 그들이 시험하기가 어렵다면, 그저 비 스타터 일뿐입니다 그건 내가 진지하게 받아 들일만한 것이 아닐거야 사용할 물건으로

그래서 내가 너에게 옳은 얘기를하고 싶다 지금 Kotlinx-coroutines-test입니다 1 주일 반 전에 나왔던 새로운 도서관입니다 현재 실험용 coroutines API로 표시되어 있습니다 그것이하기 전에 더 많은 피드백이 필요하기 때문에 안정된 곳까지

Google과 JetBrain의 공동 작업입니다 안드로이드에서 coroutines를 테스트하는 것을 아주 쉽게 만들어줍니다 따라서 모든 테스트 라이브러리와 결합되지 않습니다 따라서 JUnit 4를 사용할 수 있습니다 JUnit 5를 사용할 수 있습니다

사용자가 작성한 사용자 정의 테스트 러너를 사용할 수 있습니다 그리고이 라이브러리는 코 루틴을 테스트하는 데 도움이 될 것입니다 그래서 저는 LiveData Builder에 집중할 것입니다 Yigit는 보여 주었다 그리고 우리는 그것을위한 테스트를 작성하는 방법에 대해 이야기 할 것입니다

그래서 나는 하나를 방출 할 것입니다 나는 잠깐 기다릴거야 그리고 나서 두 개를 방출 할 것입니다 이것은 비교적 간단한 LiveData입니다 그래서 나는 그것에 대한 테스트를 작성하는 방법에 집중할 수 있습니다

시작하려면 주 디스패처를 조롱해야합니다 LiveData Builder는 dispatchersmain을 사용합니다 기본적으로 Android의 실제 주 스레드입니다 테스트 코 루틴 디스패처로 대체 할 수 있습니다

특수 설계된 디스패처입니다 coroutines 테스트 그리고 우리는 테스트 코 루틴 범위를 만들 수 있습니다 이것은 코 루틴 테스트를위한 범위입니다 그러면 설치 프로그램에서 dispatchers

main을 전환 할 수 있습니다 테스트 발송자를위한 것입니다 dispatchersmain의 전역 값이 변경됩니다 즉시 LiveData Builder 우리가 제공 한 발송자를 사용할 것입니다

그런 다음 tearDown에서 resetMain을 기본값으로 설정하십시오 그리고 마지막 줄은 여기에 있습니다 정말로, 정말로 중요합니다 그것은 testScopecleanupTestCoroutines를 말합니다

운영자와 범위에 대해 생각하는 경우 하고있어, 그들은 매우 안정적이야, 맞지? 그들은 당신의 코 루틴을 추적해야합니다 실제로 실행합니다 이것을 부르지 않으면 매우 쉽습니다 검사 사이에 상태가 누출 될 수 있습니다 그래서 그것은 많은 상용구입니다

그래서 당신은 계속해서 함께 할 수 있습니다 어쩌면 JUnit 4 규칙 일 수도 있습니다 이것은 도서관에 없지만, 그러나 모든 코드를 규칙에 작성할 수 있습니다 그리고 저는 도서관을 볼 것으로 기대합니다 이것은 상대적으로 짧습니다

따라서 어떤 테스트 프레임 워크를 사용하든, 그러나 추상화를 구축해야합니다 그것은 당신의 테스트 프레임 워크에 적합합니다 그 코드를 할 수 있습니다 여기서 정의하는 규칙은 testCoroutineScope 인터페이스 runBlockingTest를 호출 할 수있게 해줍니다

이것은 테스트를 위해 최적화 된 코 루틴 빌더입니다 그것은 일종의 runBlocking처럼 작동합니다 그러나 그것은 많은 테스트를 쉽게 작성하게 만듭니다 오, 그러면 단위가 반환되므로 단일 표현으로 사용할 수 있습니다 스타일을 테스트합니다

그런 다음 주제를 얻습니다 그런 다음 LiveData 관찰을 시작해야합니다 그래서 실행됩니다 LiveData Builder가 실행되지 않는다는 것을 기억하십시오 누군가 그것을 관찰 할 때까지

observeForTesting이라는 작은 테스트 도우미를 정의 할 것입니다 이것은 내 테스트 코드 일 뿐이다 도서관 어디에도 없습니다 옵서버를 시작하려고합니다 내가 통과 한 블록을 호출하십시오

그리고 다시 시험에 첫 번째 값은 이미 방출되었습니다 이 테스트로 모든 것을 결정적으로 만들었 기 때문에 내가 사용하고있는 규칙 나는 [INAUDIBLE] 주장을 사용할 것이다 값이 1과 같아야하는지 확인하려면, 그리고 나서 나는 1 초씩 시간을 앞당길 것입니다

이것은 큰 장점 중 하나입니다 testCoroutineDispatcher의 가상 시간을 제어 할 수 있습니다 따라서 advancedTimeBy는 지연을 발생시킵니다 즉시 돌아온다 그리고 나는 내 시험에서 그것을 제어 할 수 있습니다

따라서 두 번째 방출은 이미 이 코드 줄을 읽었습니다 회전하고 결과를 기다릴 필요가 없습니다 그리고이 시험은 벗겨지지 않을 것입니다 나는 단지 제목을 말할 수 있습니다 값은 2와 같아야합니다

테스트를 통과하면 테스트를 통과합니다 테스트는 1 초가 아닌 즉시 실행됩니다 라이브러리를 확인해보십시오 당신이 찾은 버그는 반드시 제출하십시오 현재 실험중인 coroutines API로 표시되었습니다

그것이 안정을 높이기에 충분한 피드백을 가질 때까지 그리고 지금, 나는 마이크를 돌려 주겠다 이야기를 중단하기 위해 Yigit에게 BOYAR : 고마워, 션 좋아요,이게 너무 많아요

다음은 무엇입니까 그래서 오늘 우리는 당신이 어떻게 할 수 있는지 당신과 이야기합니다 AndroidX 및 기타 Android 라이브러리에서 동시 루틴을 사용하십시오 우리는 새로운 LiveData Builder를 도입했습니다 이를 통해 실제 데이터를 coroutines와 통합 할 수 있습니다

그리고 뷰 모델에 대한 새로운 라이프 사이클 기술 당신의 뷰 모델과 당신의 삶을위한 코 루틴 스코프 사이클 그런 다음이 새로운 기능을 도입했습니다 우리는 coroutines를 실행할 수있는 시작했다 귀하의 라이프 사이클 상태를 기반으로합니다

마지막으로 우리는 새로운 테스트를 도입했습니다 coroutines 용 라이브러리 그래서 오늘 일찍 우리는 코 틀린을 먼저 발표했습니다, Android 용 [INAUDIBLE] 및 Jetpack 용 그것은 coroutines보다 먼저입니다 이것은 권장 사항입니다 우리는 coroutines이 최상의 기능을 제공한다고 믿습니다

Android에서의 동시성 사용 용이성을 제공합니다 그러나 우리는 이것이 진행중인 작업임을 인정합니다 우리가 보여준 대부분의 도서관 실험적이거나 알파 하나, 우리는 지역 사회와 함께 이것을 발전시키고 자한다 건축 회사와 같은 방식으로 및 다른 Jetpack 라이브러리 그래서 우리와 함께하거나 6 개월을 기다릴 수 있습니다

그런 다음 사용을 시작하십시오 그리고이 일환으로 Kotlin이 점점 더 많이 보일 것입니다 제트 팩에서 나오는 코 루틴 따라서 이들 모두는 라이프 사이클 20에서 사용할 수 있습니다

01부터 오늘 시작하십시오 한번보세요 당신이 그것에 대해 어떻게 느끼는지 알려주십시오 또한 우리는 실제로 코 루틴을 좋아합니다 고맙습니다

[음악 재생]

What's New in Kotlin on Android, 2 Years In (Google I/O'19)

[음악 재생] JEFFREY VAN GOGH : 안녕하세요 나는 Jeffrey van Gogh입니다

저는 Android Studio의 기술 책임자입니다 그리고 나는 프로그래밍 언어를 책임지고있다 및 컴파일러 하디 해리 : 그리고 저는 하디, 개발자 옹호자입니다 JetBrains에서

[치어 리더] JEFFREY VAN GOGH : 그래서 2 년이 지났습니다 구글이 안드로이드에 대한 코 틀린의 지원을 발표 한 이후 그리고 어제 Google은 Kotlin-first를 발표했습니다 그래서 우리는 당신에게 이것을 배경으로 줄 알았습니다 그리고 물론, 우리는 2 년 전에 시작하지 않았습니다

우리는 물건을 얻기 위해 상당한 시간이 걸렸습니다 안드로이드에서 Kotlin에 대한 준비 그리고 우리는 3 년, 3 년, 1 년 반 전에 결정했습니다 Google에는 수많은 언어 괴짜가있었습니다 나도 코 틀린과 놀기 시작 했어

헤이, 이것은 실제로 아주 멋지다 물론 Android Studio는 IntelliJ를 기반으로합니다 그리고 IntelliJ는 Kotlin을 오래된 코드베이스로 사용하기 시작했습니다 그래서 우리는 점점 더 코 틀린을 보게되었습니다 Android Studio에서 사용 중입니다

그리고 동시에, 우리는 고객 권고에서 많은 고객 피드백 게시판, 설문 조사 및 임시 토론 이 같은 회의에서 사람들은 Kotlin을 정말 좋아합니다 그리고 그들은 정말로 Google이 그것을 지원하기를 바라고 있습니다 왜냐하면 그들의 회사는 그렇지 않으면 Kotlin을 채택하지 않기 때문입니다 물론, 그런 새로운 언어를 사용합니다 큰 일이다

그래서 우리는 이사들에게 이것이 투자 할 가치가있는 무언가 우리가 발견 한 가장 좋은 방법은 우리 이사들에게 코드를 작성하게 Kotlin에서 며칠 동안 그 후에 그들은 팔렸다 I / O 2017 이전에 몇 달 전에, 우리는 그것을하기로 결정했습니다 이것은 많은 회의가이 모든 것을 설정하는 것을 의미했습니다

테크니컬 리드 나 매니저로서, 당신은 더 이상 코딩 할 시간이 충분하지 않습니다 기초를 설정하십시오 따라서 Google I / O 2017 이전의 모든 준비가 완료되었습니다 Android Dev 하위 레딧에이 큰 스레드가있었습니다 구글이 결코 Kotlin을 받아들이지 않을 것입니다

물론 우리는 무슨 일이 일어날 지 알고있었습니다 하지만 그 스레드에 회신을 보내는 것은 너무 어려웠습니다 그래, 2 년 전 Steph는 무대에 올랐어 코 틀린 지원 발표 나는 그것이 개발자의 가장 큰 박수라고 생각한다

기조 그것은 훌륭했다 물론, 우리 모두는 JetBrains과 Google 모두에서 알고있었습니다 그건 우리가 많은 일을했다는 것을 의미했다 우리 앞에 Kotlin이 잘 작동했는지 확인하십시오

Android 및 일반적으로 그리고 오늘, 우리는 우리가 지난 2 년 동안해온 일의 하디가 무슨 일이 일어 났는지 얘기 할거야 지난 몇 년 동안 코 틀린에게 그리고 나서 다시 가져 가겠 어 안드로이드 측에서 우리가 한 일에 대해서 이야기하겠습니다

하리 하리 : 고마워 시작하려면 먼저 언급하고 싶습니다 코 틀린 재단 (Kotlin Foundation) Google에서 공식 지원을 발표 한 시점을 기억한다면 몇 년 전에 Kotlin을 위해, 우리는 또한 간략하게 언급했다 우리가 창안 된 기초가 될 것입니다 JetBrains와 Google이 보호, 홍보 및 홍보 언어 Kotlin

재단은 이사회의 통제를받습니다 JetBrains의 두 대표, 두 구글, 및 1 명의 독립적 인 일원 그리고 당신에게 약간의 아이디어를주기 위해서입니다 기초의 범위가 무엇인지, 직업 중 하나 현재 언어 리드 디자이너를 임명하는 것이고, 물론 Andrey Breslav가 있습니다 변화를 막기위한 언어위원회

그리고이 점을 이해하는 것이 매우 중요합니다 범위면에서 제한적입니다 따라서 변경 사항을 깨는 것입니다 Kotlin은 지금도 열려 있기 때문에 계속 개발되고 있으며, GitHub에 우리는 여전히 KEEP을 가지고 있는데 이것은 Kotlin Evolution 개선 프로세스

그러나 언어위원회는 대부분 언어에 일어날 수있는 변화를 깨고 또한 상표 소위원회가 있습니다 그것은 Kotlin의 상표를 보호하는 것입니다 Kotlin을 홍보하고 사용하는 데 도움이되는 커뮤니티와 협력 공정한 방법으로 Kotlin 그리고 당신이 기초에 관하여 더 많은 것을 발견하고 싶은 경우에, 당신은 KotlinLang 웹 사이트에 갈 수 있습니다 세부 정보뿐만 아니라 더 많은 정보를 얻을 수 있습니다

Kotlin과 상표 등을 어떻게 사용할 수 있는지에 관한 정보 그리고 그걸로 데모로 넘어 갑시다 그리고 나는 언어로 당신에게 몇 가지 것을 보여줄 것입니다 이것은 내가 다른 사람의 기계를 사용하고있는 곳이다 이것이 어떻게 진행되는지 봅시다

ID가 맞다고 생각해 예 그래서 저는 언어에 대해 몇 가지 것을 보여 드리겠습니다 아마 가장 근본적이고 가장 중요한 것입니다 우리가 한 짓은 아주 취한 것입니다

오랫동안, 당신이 코 틀린을 쓰는 것에 익숙하다면 응용 프로그램을 사용하면 주된 진입 점이 있습니다 그래서 우리는 실제로 그것을 만들었으므로 매개 변수가 없습니다 그게 전부입니다 고맙습니다 제프리, 네가 원하니? 오

[웃음] 우린 2 년이 걸렸어 아니 그래서 우리는 우리가 가지고있는 작은 것들 중 일부부터 시작할 것입니다 언어 자체로 완성되었습니다 예를 들어, when 문을 사용하면 변수의 값을 캡처해야합니다

그 변수를 검사해야합니다 너는 너의 실제 내부에서만 그것을 사용하고있어 when 문 그래서 우리는 이것을 조금 더 멋지게 만들었습니다 본질적으로 변수를 때 문 자체

따라서 범위 밖에서 참조 할 필요가 없습니다 그리고 이것은 당신에게 당신의 언어로 의미를 부여합니다 사람들은 이것이 실제로 제한되어 있음을 이해합니다 조건부로 하지만 조금 더 얘기하자

우리가 소개 한 멋진 기능들 그것들은 좋지 않았다 나는 우리가 도입 한 더 멋진 기능을 말하고 있습니다 예를 들어 응용 프로그램이 있다고 가정 해 봅시다 클래스를 만들고 싶습니다

그리고 수업을 만들겠습니다 MicroserviceAPI라고 불릴 것입니다 그래서 저는 마이크로 서비스 API의 인스턴스를 만들 수 있습니다 마이크로 서비스 API를 말할 것입니다 우리는 거기에 갈

이제,이 마이크로 서비스가 필요한지는 모르겠습니다 마지막으로 갈거야 단지 유행 일 수 있습니다 그래서 내가하고 싶은 것은 사람들에게 이게이게 친절한 사람들이야 실험적인 기능과 같습니다

우리가 할 수있는 일은 우리가 실제로 할 수있는 것입니다 주석 클래스를 만든다 예를 들어, 이것이 새로운 API라고 말할 수 있습니다 그 주석 클래스에 주석을 달아라 Experimental이라는 다른 클래스와 함께 이제 새로운 실험적 주석을 사용할 수 있습니다

나는 내가 실험적으로 생각하는 어떤 것에도 창조했다 내 API에서 그래서 여기에이 새로운 API를 추가 할 수 있습니다 그리고 내가 그렇게하면, 이것이 빨간색으로 변하고 있음을 알 수 있습니다 그래서 그것은 나에게 컴파일러 오류를주고있다

당신이 이것을 사용할 수 없다는 말입니다 이것은 실험적인 기능이기 때문입니다 그 위에 마우스를 올려 놓으면 실험적이라고 말하는 것입니다 사실, 우리는 그것을 바꿀 수 있습니다 우리는 그것이 오류가 아니라, 실제로 경고로 정의 할 수 있습니다

그래서 여기에 경고가 될 수 있습니다 그리고 지금 막 가고 있습니다 경고로 표시됩니다 그래서 이것을 사용하기 위해서, 개발자 기본적으로이 기능을 선택해야합니다 내가 할 수있는 것은 Alt-Enter입니다

이제는 함수 호출에 새 API를 추가합니다 그래서 내가 어디에서 이것을 사용하는지, 이것은 실험적인 기능이라고합니다 이것은 사람들에게 당신이 지금 생각할 수있는 아이디어를줍니다 실험적이고 비슷한 종류의 API를 만들 수 있습니다 나는 아무것도 보증하지 않을거야

내일 우리가 뭔가를 바꾸고 싶다면 괜찮아 니가 경고 했어 Alt-Enter를 누르십시오 당신이 Alt-Enter를 봤다는 것을 알았습니다 괜찮아

너 자신의 잘못이야 그리고 우리가 실제로이 일을 한 것 중 하나는 우리는이 계약 개념을 도입 했습니까? 따라서 약간의 코드 계약에 익숙하다면, 우리는 이것을 Kotlin의 실험적 기능으로 소개했습니다 게다가 그래서 나는 어떤 함수가 있다고 가정 해 봅시다 예 : printLength

그리고 이것은 nullable 인 문자열을 취할 것이고, 그리고 string이 null이 아닌 경우, 나는 println 길이 할거야 이제이 방법이 효과가 있으며 스마트 캐스트가 완료되었습니다 문자열, null이 아닌 문자열, 내가 이미 그걸 발견했기 때문에 이것이 nullable이 아니라는 것을 알아 냈습니다 그래서 나는이 똑똑한 던지기를 할 수있다 그러나 내가 이것을 취해야한다면, 그리고 널 (null)이 아닌 대신에, 나는 무언가를한다, 아니다, 나는 앞으로 나아가고 창조한다

내 함수, 그래서 내 함수를 만드는 가정 해 봅시다 String이고 notNull 인 경우 부울을 반환합니다 그런 다음 반환 값이 null이 아니라고 말합니다 그 효과가 없다는 것을 알 수 있습니다 컴파일러가 실제로 그것이 not-nullable

컴파일러에게 알려주는 것이 좋을 것입니다 이 기능은 특정 계약을 준수해야합니다 그리고 Kotlin에서 이것을 정의 할 수 있습니다 계약 람다를 사용하여 계약 함수 계약이다 그리고 그것이 수입이라고 말할 수 있습니다

그리고 나는 진정한 의미의 반환을 말할 수 있습니다 이 @ notNull이 null이 아님을 나타냅니다 이제 오류가 발생합니다 무시해 아니, 농담이야

이 오류가 발생하는 이유 이것은 위에서 언급했듯이 실험적인 기능이기 때문입니다 두 가지 방법이 있습니다 첫 번째 것을 보여주었습니다 주석을 추가 할 수있었습니다 그러나 주석을 추가하면 그 주석이 전파되지 않습니다

그래서 뭔가가 그 API를 사용하고 있다면, 또한 주석을 추가해야합니다 전파 주석을 추가 할 수 있습니다 이것,이 형식입니다, 그리고 지금 나는 그렇게하지 않아도됩니다 그 통지를 추가하자마자, 지금 자동으로 다시 null이 허용되지 않는 문자열로 변환됩니다 따라서 실제로 계약을 맺고 함수에 대한 당신의 주장 특정 조건을 충족시킵니다

그리고 그것은 기본적으로 특정 수준의 코드 정확성 실제 코드에서 그럼 우리가 뭘하고 있는거야? 글쎄, 우리는 이것을 직렬화라고 부릅니다 멀티 플랫폼 인 직렬화 라이브러리입니다 JVM, JavaScript, Kotlin / Native, iOS, macOS, 리눅스, 윈도우, 임베디드 나는 태양 아래 모든 것을 언급했다고 생각한다

그리고 이것은 다중 플랫폼 라이브러리입니다 어떤 종류의 반성도 요구하지 않는, 일부 제품의 일부입니다 우리가 언어와 생태계의 일부로하고있는 일 그것 주위 그래서 여기에서는 클래스, 전형적인 데이터 클래스, 그리고이 serializable 어노테이션을 추가했다 이 라이브러리는 Kotlin 직렬화 라이브러리의 일부이며, 그런 다음 고객이 있으며 고객 목록이 있습니다

그래서 저는 println과 같은 것을 할 수 있습니다 그리고 나서 여기에서 나는 Json을 할 것입니다 stringify, Customer, 사용하고 싶은 시리얼 화자를 표시 한 다음 실제 고객을 전달하십시오 그리고 나는 똑같은 일을 고객 명단에서 할 수 있습니다 그래서 여기에 목록을 작성한 다음 고객 목록을 전달할 수 있습니다

그리고 이것을 실행한다면, 기본적으로 무엇을 할 것인가? JSON에서 해당 데이터 클래스로 출력됩니다 우리는 JSON을 지원합니다 Protobuf에 대한 지원이 있습니다 그리고 다른 것들이 작동합니다 그리고 우리는 분명히 그 반대를 할 수 있습니다

예를 들어, 여기에 JSON이 있다고 가정 해보십시오 이제 JSON을 만들어 보겠습니다 그래서 우리는 id가 1과 같을 것이고, 그 다음에 이름이 나와 같습니다 이메일은 you@mecom과 같습니다

나는 너무 독창적이다 이제 println을 할 수 있습니다이 경우, 저는 Json을 할 것입니다 parse, serializer를 다시 통과 시키십시오 그리고 내가 전달하고자하는 실제 JSON

그리고 이것이 할 일은 본질적으로 나에 대한 실제 데이터 클래스 객체 그리고 당신은 그것이 또한 – 나를 위해 데이터 객체를 반대로 만듭니다 내가 뭘 한거지? 이메일, 이름, 이메일 관객 : [INAUDIBLE] 하리 할리 : 필드 소스가 필요합니까? 아니, 그렇지 않아 관객 : [INAUDIBLE] 하리 할리 : 아니

그건 사실 맞아 어쨌든, 그렇게 일하고있었습니다

[웃음] 제프리예요 그는 뭔가를했습니다 제프리 반 고글 : 어 – 허 [박수 갈채] HADI HARIRI : 나는 사람들이 박수를 치기를 정말 좋아합니다 그래서 나는 그곳에서 무슨 일이 일어나고 있는지 모른다

그러나 그것은 라이브 데모에 대한 좋은 점입니다 뭔가 잘못 됐는지 확인하고 싶습니다 나는 사실 그것을 실제로했다 그래서 저는 그것을 운동으로했습니다 나중에 사무실 시간에 나에게 와서 그게 뭐가 잘못 됐는지 말해 줄거야

계속 나아 갑시다 내가 너에게 보여주고 싶은 다음 주석 클래스에 대한 간략한 개요입니다 여기에 지원을위한 몇 가지 추가 사항이 추가되었습니다 열거 형 예를 들어, 주석에 enum을 가질 수 있습니다

중첩 된 주석을 가질 수 있습니다 내 동반자 개체의 일부로 속성을 가질 수 있습니다 다시 말하지만, 이것은 나에게 더 많은 표현력을줍니다 실제 주석을 사용할 때 이제 우리가 작업 해 온 또 다른 것이 있습니다

당신이 들었을지도 모르는 멀티 플랫폼 프로그래밍입니다 그리고 멀티 플랫폼 프로그래밍의 아이디어는, 한 입 가득, 그 아이디어는 바로 지금 Kotlin입니다 다른 유형의 플랫폼을 타겟팅 할 수 있습니다 그래서 JVM을 대상으로 할 수 있습니다 자바 스크립트를 타겟팅 할 수 있습니다

네이티브 등을 타겟팅 할 수 있습니다 이제 이것에 대한 위대한 것들 중 하나 코드를 공유 할 수있는 능력, 왜냐하면 내가 공유하기를 원하는 많은 코드가 있기 때문입니다 권리? 비즈니스 로직, 검증 로직 등이 있습니다 내가 공유를 끝내고 싶다 그러면 우리는 어떻게 이런 일을 할 수 있습니까? 이것이 우리가 멀티 플랫폼의 개념을 도입 한 곳입니다

프로그램 작성 그리고 그 결과로, 당신은 지금 이 다중 플랫폼 프로젝트를 가질 생각이 들었습니다 그래서 당신은 내가 IDE에서이 프로젝트를 가지고 있다는 것을 알 수 있습니다 다른 플랫폼을 타겟팅하고 있습니다 그래서 나는 macOS를 가지고 있고, JVM을 가지고 있으며 JavaScript를 가지고있다

그런 다음 일련의 공통 코드가 있습니다 이것은 보통이라고 불린다 그리고 여기 안에는 몇 가지 코드가 있습니다 그래서 여기에 hello라는이 함수가 있습니다 즉, platform

name에서 인사하는 것입니다 그리고 platformname은 object의 속성입니다 그러나 차이점은이 객체 기대라고하는이 단어가 앞에 있습니다 이것이 말하는 것은 이것이 약간의 코드라는 것입니다

내 공통 코드에서 참조 할 수있는 구현은 실제로 여기에 제공되지 않습니다 구현이 제공 될 것입니다 다른 유형의 플랫폼에서 다른 방식으로, 이는 플랫폼에 따라 다를 수 있기 때문입니다 그래서이 귀여운 것을 볼 수 있습니다 여기 모퉁이에 작은

Alt Enter를 누르면 선언에 들어가라고 말하면서, 어떤 플랫폼 선언을보고 싶은지 묻습니다 따라서 JVM이라고하면 JVM으로 연결됩니다 내가 돌아가서 macOS에서 실제 선언문으로 간다면, 그것은 나를 macOS에 데려 갈 것이다 권리? 그래서 다른 플랫폼에서 다른 구현을 할 수 있습니다 그럼에도 공통 코드에서 해당 코드를 참조 할 수 있습니다

내 공유 코드 기반의 일부로 사용하십시오 그리고 시원한 것은 그렇게 생각해

생각해라 인터페이스와 조금 닮았습니다 그러한 인터페이스의 구현 그리고 멋진 점은 정적 컴파일 시간을 얻는다는 것입니다 확인, 말하자면 그래서 내가 이것을 주석으로 달아서 여기로 돌아 가면, 당신은 그것이 저에게 오류를주는 것을 볼 수 있습니다, 실제 플랫폼 중 하나 구현이 누락되었습니다

이제이 작업을 통해 공통 코드를 공유 할 수있는 다중 플랫폼 프로젝트 기초를두고 특정 구현을 기반으로한다 실제 목표에 약간 다르게 적용됩니다 그리고 그것은 멀티 플랫폼 프로젝트의 일부입니다 우리가 코 틀린과 함께 나아갈 것을 제안하고있다 예를 들어 Android와 공통 코드 기반을 공유하는 Android 애플리케이션, iOS 등

슬라이드로 다시 전환 할 수 있다면 내가 너에게 약간 얘기 할거야 우리가 가져온 다른 것들 Kotlin에게 언어 우리는 더 많은 표준 라이브러리 API를 가지고 있습니다 우리는 여전히 메소드의 API 번호를 유지하고 있습니다 조금 낮추지 만 더 많은 기능을 추가하고 있습니다

그 지역에 부호없는 정수 지원 – 아무도? 아니? 예 [박수 갈채] 나는 누군가를 항상 알고 있기 때문에 그것을 추가했다 그것에 대해 두드림 분명히 우리는 2018 년 패킷 KotlinConf를 발표했습니다

Kotlin 네이티브가 베타를 친다 툴링면에서 우리는 향상된 성능을 제공했습니다 Gradle 프로젝트를위한 고속, 병렬 빌드, KAPT를 사용한 점진적 주석 처리 Google에서 Ivan Garvrilovic에게 큰 소리 치십시오 우리를 돕기 위해

새로운 유형의 추론 엔진 상호 운용성의 많은 경우에, 특히 RX 주변에서 일하는 경우, 뿐만 아니라 언어를 조금 더 빌더를 사용할 때 간결하게, 등등 그리고 우리는이 프로그레시브 모드를 도입했습니다 본질적으로 당신이 코 틀린을 시험해 볼 수있게 해줍니다 새로운 기능을 사용해보십시오 일부 코드를 어기십시오

이제는 할 수있는 깃발입니다 Kotlin과 함께 좀 더 살기 가능하게하다 가장자리에 그리고 그걸로 제프리에게 건네 주겠어 그게 우리가했던 다른 것들을 보여줄거야

특히 안드로이드에서하고 있습니다 JEFFREY VAN GOGH : 고마워, 하디 데모를 잊어 버린 기능이 하나 있다고 생각합니다 HADI HARIRI : 당신이 무슨 말을하는지 전혀 모르겠습니다 JEFFREY VAN GOGH : 괜찮습니다

내 데모에 보여 줄게 HADI HARIRI : 당신이 아마 그것을 망 쳤어 [웃음] 제프리 반 고글 : 좋아 이제 Android 측에서 수행 한 작업을 살펴 ​​보겠습니다 Kotlin을 지원합니다

먼저 OS로 시작합시다 물론 OS는 바이트 코드로 작동합니다 따라서 Kotlin을 지원하기 위해해야 ​​할 일이별로 없습니다 그러나 우리는 정확성을 추가했는지 확인했습니다 성능 테스트를 통해 코 틀린 패턴을 깨지 않게했습니다

우리는 몇 가지 구체적인 성능을 구현했습니다 이러한 테스트를 기반으로 한 최적화, 루프 최적화에 특히 적합합니다 그리고 나서 우리는 OS 측면에서 큰 일을했습니다 디버깅 지원이 향상되었습니다 Kotlin은 몇 가지 구조를 가지고 있습니다

당신이 다른 언어로 가지고 있지 않은 인라인 함수처럼 Android의 새로운 버전 이제 더 나은 디버깅을 지원합니다 그런 다음 안드로이드 프레임 워크, 거기에서 일어나는 일이 많습니다 중요한 것은 API 주석을 추가 한 것입니다 아직 완성되지 않았습니다

그러나 새로운 API는 이제 nullness와 기본 매개 변수를 갖습니다 기본 값 주석이 있으므로 Kotlin에서 온 사람들을 사용할 수 있습니다 기존 API를 통해 작업하고 있습니다 뿐만 아니라 주석을 달 수 있습니다 그런 다음 Kotlin 확장 API를 추가했습니다

그래서 이것들은 여러분이 프로젝트에 다음을 제공하십시오 확장 메소드를 통한 추가 API Kotlin 코드를 더 관용적으로 만드십시오 그런 다음 우리는 전체 묶음에 대해 코 루틴 지원을 추가합니다 Jetpack 라이브러리 [박수 갈채] 따라서 비동기 코드를 작성할 수 있습니다

좀 더 절차적인 방법으로 그리고 물론, 어제 우리는 Jetpack Compose를 발표했습니다 그것은 모두 코 틀린입니다 이제 데모를 살펴 봅시다 좋아요 그래서 여기에 작은 앱을 만들면, 쇼 목록을 다운로드합니다

개조를 사용하여 서버에서 사용할 수 있습니다 그런 다음 로컬 SQL 데이터베이스를 검사합니다 방 API를 사용하여이 쇼들을 봤다 면요 그래서 여기에, 내가 정의한 것을 볼 수 있습니다 API를 사용하여 둘 다 RX 자바를 사용하여 쇼의 목록을 얻을, Kotlin 코딩 비동기 기능을 사용할 수도 있습니다

그리고 API는 거의 동일하다는 것을 알 수 있습니다 같은, 조금 다른 반환 유형 그리고 방 쪽 – 오, 미안 (QUIETLY) 내 코드는 어디에 있습니까? 좋습니다, API는 건너 뜁니다 꽤 많이 있습니다

오, 여기 있습니다 죄송합니다 그래서 당신은 똑같은 것을 봅니다 나는 쇼를 봤어? Java의 RX는 매우 유사합니다 여기 Flowable이 있습니다

[무관심]이 있습니다 따라서 API는 꽤 유사합니다 이제 전화하는 방식을 살펴 보겠습니다 RX와 Java 사이의 코드 – RX와 coroutines 그래서 RX에서는 쇼를 진행하기 위해 많은 운영자를 사용합니다

모든 비동기 호출로 우리의 흐름을 수행하십시오 그리고 이것들은 꽤 복잡해 질 수 있습니다 그리고이 코드는 노란색으로 강조 표시되어 있습니다 그게 내가 아는 뭔가가 있다는 뜻이야 반환 유형으로 수행

따라서 구독 할 때, 당신은 구독을 처리합니다 물론 RX는 Java에 뛰어난 표현력을 제공했습니다 그리고 RX의 발명가들은 똑똑했습니다 그들은 그들이 무엇을 만들고 있는지 알았습니다 그러나 그들은 언어에 의해 제한되었습니다

Kotlin에서 우리는 이제 coroutines를 가지고 있습니다 우리는 실제로 이것을 훨씬 더 멋지게 할 수 있습니다 그래서 코 루틴을 사용하는 동일한 코드가 있습니다 먼저 서버에서 프로그램 목록을 가져옵니다 우리는 이것을 대기 함수라고 부릅니다

신원이 알려줍니다 이봐 요 여기서 비동기적인 일이 일어나고 있습니다 그런 다음 우리는 for for 루프를 사용할 수 있습니다 그리고 그것은 반환 쇼 동안의 [INAUDIBLE]입니다

그리고 우리는 우리의 비동기 내가 로컬 데이터베이스에 쇼를 본 적이 있는지 알아보기 위해 호출하십시오 그리고 거기에서 계속됩니다 그리고 나서, 여기에, 당신은이 발사 호출을 봅니다 이 전화 해 데이터 세트가 변경되었음을 알리는 지 확인하십시오

UI 스레드에서 그리고 여기서 좋은 점은 절차 적으로 보입니다 디버깅을 할 때 – 나는 지금 시작해야한다 물론 작동하지 않습니다 오! 우리는 거기에 갈

이미 실행 중입니다 그래서 내가 실제로 볼 수 있다는 것을 알 수 있습니다 전체 방법으로부터의 변수들에서, 특정 운영자 만이 아닙니다 그래서 인생이 훨씬 쉬워집니다 비동기 코드를 디버깅 할 때 이제 슬라이드로 다시 전환하십시오

다음은 Android Tooling입니다 Android Studio에서 많은 작업을 수행했습니다 Kotlin이 잘 지원되는지 확인하십시오 우리가 한 첫 번째 일은 Kotlin 플러그인이 Android Studio에 포함되어 있음 우리가 그것을 공개하기 전에 우리는 그것을 잘 테스트 할 수 있습니다 JetBrains와 긴밀하게 협력했습니다

그들이 Kotlin 플러그인을 업데이트 할 때마다, 공개하기 전에 테스트를 통해 확실하게 확인합니다 Android Studio와 Kotlin은 잘 작동합니다 다음으로 Android 리팩토링 지원을 추가했습니다 IDE에는 많은 작업이 있습니다 Android 관련 리팩토링입니다

우리는 지원을 추가하기 위해 노력하고 있습니다 코 틀린에있는 모든 사람들에게 린트쪽에는 린트가 거의 있습니다 완전히 다시 작성되었습니다 자바 언어에 대해 [INAUDIBLE] 점검을 작성하는 데 사용되었습니다

이제는 UAST라고 불리는 것을 사용합니다 한 번 같은 린트 체크를 쓸 수 있습니다 그리고 Kotlin과 Java 코드를 모두 분석 할 수 있습니다 제품 템플릿을 추가하여 당신은 새로운 단편이나 새로운 활동을 만들고 있습니다 당신은 Kotlin 코드를 처음부터 가지고 있습니다

당신은 그것을 변환 할 필요가 없습니다 이제 컴파일러 측면에서, 우리의 새로운 Shrinker R8 Kotlin 특정 최적화가 많이있다 그것으로, 당신이 만드는 이익을 얻을 수 있도록 가능한 한 작은 코드 물론 IDE는 이제 Jetpack을 지원합니다 구성된 프레임 워크

문서 및 샘플 사이트에서, developerandroidcom을 보면, 모든 API 참조에는 이제 Kotlin 및 Java 구문이 모두 있습니다 유효한 Kotlin 관련 문서 포털이 있습니다

Kotlin을 시작하는 방법, 사용법을 알려줄 것입니다 호출자 루틴 등 또한 많은 샘플과 스 니펫 이제 Kotlin을 사용할 수 있습니다 양쪽 측면, GitHub 샘플입니다 올해 Google I / O를 살펴볼 수있을뿐만 아니라, Androids의 프레젠테이션 대부분을 볼 수 있습니다

그들의 샘플을 Kotlin에서해라 당신도 볼 수있는 몇 가지 애플 리케이션이 있습니다 Google I / O 앱은 물론이 새로운 Android 해바라기 앱 Kotlin을 사용하여 처음부터 구축되었습니다 우리는 종종 헤이 (hey)를 요청 받는다 너희들이 코 틀린을 추천하고있다

하지만 너 혼자 사용하고 있니? 물론 그것은 매우 공정한 질문입니다 현재 Google에는 많은 사내 개발자 도구가 있습니다 그래서 Kotlin 지원을 추가하는 데는 시간이 걸렸습니다 Google 직원을위한 내부 앱으로 시작했습니다 예를 들어 내부 앱이 있습니다

지도와 사무실 위치를 보여줍니다 그래서 우리는 그 사실로부터 많은 것을 배웠습니다 그 이후로 우리는 실제로 일부 공개 Google Apps에서 Kotlin을 사용하기 시작했습니다 여기에 몇 가지 앱이 있습니다 오늘 Kotlin 코드를 휴대 전화에 보냅니다

그리고 더 많은 것을 기대할 수 있습니다 Kotlin을 채택하는 것에 대해 말하면, 전체 생태계를 살펴보고, 우리는 활발한 개발에서 – 적극적인 개발은 지난 6 개월 동안 Play 스토어에 업로드했습니다 우리는 애플 리케이션의 16 %가 지금 Kotlin을 사용하고있는 것을 본다 그리고 앱이 개발 될 수 있음을 명심하십시오 하나의 버그 수정 또는 하나의 자산 변경이 있기 때문입니다

그래서 16 %는 꽤 인상적입니다 지난 I / O 이후로 5 배나 성장했습니다 그리고 당신이 최고 천개의 앱을 본다면, 그것은 실제로 이미 훨씬 더 커졌습니다 우리가 Kotlin을 사용하여 볼 수있는 애플 리케이션의 44 % 그래서 우리를 코 틀린으로 데려옵니다

어제 발표했습니다 그래서 왜 우리가 왜했는지에 대한 더 많은 개요를 알려 드리고자합니다 그것은 무엇을 의미할까요? 그렇다면 왜 코 틀린을 발표할까요? 우리는 코 틀린을 사용하는 사람들의 강한 입양을보고 있습니다 우리는 지역 사회에 큰 흥분을 안겨줍니다 사람들이 Kotlin을 사용할 때

실제로 사람들이 설문 조사에서 질문을받을 때 그들이 얼마나 Kotlin을 더 행복하게 사용하는지, 실제로 사람들보다 25 % 높은 점수를받습니다 누가 Kotlin을 사용하지 않고있다 업계 전반 및 Google 내부의 많은 앱 지금 Kotlin을 사용 중입니다 우리는 많은 고객에게 다가갔습니다 고객 자문위원회 (Customer Advisory Board)를 포함하여 그리고 Kotlin에 대한 투자에 집중하십시오

그럼 그게 무슨 뜻 이죠? 물론, 우리는 자바 프로그래밍을 계속 지원할 것입니다 많은 측면에서 언어 플랫폼, Android Studio 지원, 보풀, 안드로이드 X와 같은 Docs가 사라지지 않을 것입니다 하지만 다른 노력들을 보면 우리의 온라인 교육, 샘플처럼 우리는 먼저 Kotlin, 그리고 나서 자바 외국어가 최선의 노력이 될 것입니다 그리고 물론, 몇 가지 기능이 있습니다

다중 플랫폼 프로젝트와 Jetpack Compose 그것들은 단지 Kotlin에서 제공 될 것입니다 지금 당연히, 우리가 사람들에게서 들리는 다음 질문은, 그게 내가 전환해야한다는 뜻인가? 제발 Kotlin을 먼저 가져 가지 마세요 모든 Java 코드를 가져 와서 Kotlin에서 다시 작성해야합니다 그건 우리가 네가하고 싶지 않은거야 Android Studio를 확인하십시오

그것은 많은 수십만 줄의 코드입니다 지금은 Android Studio의 약 10 % Kotlin입니다 특정 코드 그리고 우리가하는 일은 새로운 기능 만 사용한다는 것입니다 코 틀린에 써라

그리고 그것은 Kotlin 자바와 좋은 상호 운용성을 가지고있다 Kotlin에서 단일 클래스를 작성할 수 있습니다 나머지는 Java로 유지하십시오 또는 Kotlin에서 코드의 99 % Java에서 남은 부분 만 남았습니다 물론, 당신의 현재 상태는 중요합니다

프로젝트 및 팀의 당신이 당신의 방출을 발송하는 것으로부터 1 주일 떨어져 있다면, 아마도 Kotlin으로 전환하기에 가장 좋은시기는 아닙니다 그러나 새로운 개발주기를 시작한다면, 니가 코 틀린을 데려 갈 수있을거야 물론 팀에 따라 다릅니다 그들은 Kotlin에 관심이 있습니까? 이것들을 안전하게 지니고 있습니까? 우리는 또한 많은 사람들이 실제로 모집에서 언급 한 Kotlin을 사용합니다 그들은 더 많은 후보자를 얻을 수 있습니다

고려해야 할 사항 물론, 기술적 측면에서, 고려해야 할 트레이드 오프가 있습니다 Kotlin은 뛰어난 기능, 더 많은 생산성, 그리고 만족 그러나 당신은 학습 곡선에 대해 생각해야합니다 사람들이 배우는 데는 시간이 걸립니다 관용적 인 코 틀린을 쓰기

우리는 Kotlin을 쓰는 대부분의 사람들이 첫번째 주, 그들은 정말로 Kotlin에 자바를 쓰고있다 그리고 3 개월에서 6 개월이 걸립니다 실제로 관용적 인 코 틀린을 쓰기 시작합니다 괜찮아 내 말은, 당신은 여전히 ​​코 틀린의 모든 이익을 얻습니다

nullness, et cetera에 대해 경고합니다 그럼 빌드 속도가 있습니다 Kotlin은 Java 컴파일러보다 느립니다 그것은 당신을 위해 더 많은 일을하고 있습니다 그리고 그것은 더 어린 컴파일러입니다

우리는 그것을 더 빨리 만들기 위해 열심히 노력하고 있습니다 그리고 물론, 유의하십시오 예, 느립니다 하지만 앱을 만들면 빌드가 줄어들 수 밖에 없습니다 가능성이 가장 높습니다

APK 크기도 있습니다 응용 프로그램은 표준 라이브러리를 사용하며, 약간의 공간이 필요합니다 그러나 R8과 같은 것들은 그것을 줄일 수 있습니다 진행중인 Kotlin 작업은 Google에서 계속 진행되고 있습니다 물론, Jetpack Compose가 가장 큰 것입니다

항상 새로운 KDX API를 계속 추가하고 있습니다 컴파일러 쪽에서 우리는 많은 작업을하고 있습니다 빨리하기 Kotlin 10330과 마찬가지로 증분 처리기 그리고 훨씬 더 많은 것이 있습니다

더 향상된 도구 및 더 많은 문서와 샘플을 볼 수 있습니다 Kotlin을 사용합니다 Kotlin 사용에 관심이 있다면, 하지만 어디서부터 시작해야할지 모르겠다 우리는 Kotlin Everywhere를 발표하고 있습니다 두 Google이 주최하는 일련의 교육입니다

및 JetBrains 그리고 지금과 KotlinConf 사이에서 일어나고 있습니다 올해 말 12 월 그것에 관심이 있다면, 참여하거나이 사이트를 호스팅하는 것을 돕고,이 링크로 이동하십시오 가입하십시오

따라서 새로운 Kotlin 첫 번째 로드맵을 통해, 안드로이드 용 Kotlin에 대한 투자 단지 더 커질 것입니다 아직 코 틀린을 사용해 보지 않은 여러분 모두를 초대하고 싶습니다 최근에 그것을 사용하지 않았거나 오늘 앱에서 사용해보십시오 Kotlin과 비슷한 경험을 해 주셨으면합니다 좀 더 예측적이고 코딩이 더 재미있을 것입니다

고맙습니다 [음악 재생]

Kotlin/Everywhere, Android Dark Theme in Flutter, & Kubernetes apps

[음악 재생] 토드 케펠 만 : 안녕 나는 개발자 쇼 (Todd Kerpelman for the Developer Show) 가장 멋진 개발자의 주간 업데이트입니다

Google의 뉴스 전문 안드로이드 개발자의 50 % 이상이 현재 Kotlin을 사용합니다 GitHub에서 가장 빠르게 성장하는 언어입니다 많은 새로운 Jetpack API 및 기능 Kotlin에서 첫 번째로 제공 될 예정입니다 그래서 당신이 코 틀린에 대해 더 깊이 들어갈 수 있도록, 우리는 일련의 커뮤니티 중심 행사를 기쁜 마음으로 알립니다

Kotlin의 잠재력에 초점을 모든 플랫폼에서 Kotlin Everywhere라고합니다 이 사건들에 대해 더 자세히 알기를 원하면, 게시물의 세부 정보를 확인하십시오 점진적인 웹 앱을 만드는 경우, 당신은 아마 안드로이드 장치에서, mini-infobar라는 Chrome 시스템 대화 상자가 나타납니다 브라우저 화면의 맨 아래에 사용자에게 PWA를 설치하라는 메시지를 표시합니다 이 방법은 설치를 유도하는 데 유용 할 수 있지만, 개발자들은 사용자에게 앱을 설치하도록 요청합니다

크롬 76에서는 미니 인포바를 방지 할 수 있습니다 정상적으로 나타나지 않고 나타납니다 당신이 선택한 시간에 방법을 찾으려면 게시물의 세부 정보를 확인하십시오 이번 달 Google I / O에서 Android 팀 Android Q에서 어두운 테마 지원을 발표했습니다 사용자가 시스템 전체의 어두운 UI 모드를 토글합니다

그리고 모든 사람들을위한 희소식 Flutter 팀이 이미 Android에 대한 지원을 추가했다는 것입니다 2 월의 어두운 테마 그리고 Flutter 앱에서 활성화 할 수 있습니다 위젯 트리에 속성을 추가하기 만하면됩니다 어느 재산을 물으셨습니까? 글쎄, 당신은 알아낼 게시물을 체크 아웃해야합니다

Kubernetes 애플리케이션은 엔터프라이즈 급이며, 배포가 용이하고 컨테이너 화 된 응용 프로그램 어떤 Kubernetes 환경에서도 실행할 수 있습니다 Google Cloud Platform 마켓 플레이스 Kubernetes 응용 프로그램과 같은 다양한 솔루션을 제공합니다 데이터베이스에서 보안에 이르는 모든 것 가격 책정 옵션이있는 개발자 도구 등 기업의 요구 사항을 충족하도록 설계되었습니다 따라서 더 많은 정보를 얻으려면 체크 아웃하십시오 게시물의 세부 사항

개발자 학생 클럽은 수천 명의 학생 개발자를 제공합니다 전 세계의 도구와 기회 리더로서 성장하고 Google에서 기술을 향상시킬 수 있습니다 오픈 소스 기술 및 실제 문제를 해결할 수 있습니다 커뮤니티의 문제를 해결하는 데 관심이 있다면 기술을 통해 학생들을 이끌고 싶습니다 커뮤니티를 Google에 초대하면 신청할 수 있습니다

아래 설명에있는 링크를 사용하십시오 이봐, 구독하고 공유하는 것을 잊지 마세요 저는 개발자 쇼 (Todd Kerpelman) 개발자 쇼입니다 지켜 주셔서 감사 드리며 다음 주에 다시 보겠습니다 나는 kung를 알고있다, 나는 kung fu를 모른다

[웃음]

What Is Google's New Kotlin First Initiative for Android App Development?

그래서 Google은 최근에 Kotlin은 Android 앱 개발에 관해서 처음입니다 그렇다면 코 틀린은 무엇을 의미합니까? 그러나 더 중요한 것은 아마, 이것이 개발자로서 당신에게 어떤 영향을 미칩니 까? 오늘의 비디오에서 그것에 대해 이야기합시다

이 비디오는 Learn Programming Academy의 Android Kotlin Masterclass입니다 지저분한 48 시간의 훈련으로, 이 코스는 단지 보여주지 않습니다 Android 애플리케이션 작성 방법, 모든 것을 자세히 설명합니다 Kotlin 언어 자습서도 포함됩니다 방대한 할인과 즉각적인 액세스를 확보하십시오

lpadev / youtubeAndroid를 방문하여 또는이 비디오의 설명에있는 링크를 클릭하십시오 (테크노 음악) 다시 환영합니다, 제 이름은 팀 부칼 카입니다 그날의 또 다른 프로그래밍 팁과 함께 그리고 우리는이 Kotlin First initiative에 대해 이야기하고 있습니다

Google이 지금 이야기하고있는 Android 앱 개발을 권장합니다 그래서 약간의 맥락을주는 것, 첫째, Google 및 Jetbrains Jetbrains는 실제로 만든 회사입니다 처음에는 코 틀린 언어였습니다 그들은 이제 재단을 형성했습니다 코 틀린 재단과 그 재단의 목적 어 보호, 승진 및 진급이다

Kotlin 프로그래밍 언어 그래서 저는 그것이 그 의도에 대한 큰 단서라고 생각합니다 Google 및 Jetbrains의 이제 코 틀린 자체가 오픈 소스 언어입니다 GitHub에서 개발되고 있습니다 이제는 환상적입니다 언어에 기여할 수있다

그래서 다른 많은 프로그래밍 언어와는 다릅니다 이들은 폐쇄 된 출처이다 총 추가 기능을 할 수 없다는 것을 의미합니다 독학 그래도 기초 중의 하나, 가장 큰 업무는 새로운 기능을 보장하는 것입니다

개발자가 만들고 기여한 실제로 Kotlin의 전반적인 설계 목표를 깨뜨리지 마십시오 다른 말로하면, 그 과정을 주도하는 누군가가 있습니다 그것은 좋은 점이다 코 틀린이 올바른 방향으로 나아 간다 이제는 Kotlin의 큰 장점 중 하나가 라이센스 문제가 없다는 것입니다

존재하는 잠재적 라이센싱 문제와는 달리 Android 플랫폼에서 Java를 사용하여 지금 당장은 문제가 없습니다 하지만 당신은 오라클, Java와 Google의 제작자 Google의 사용에 대해 여러 번 법정에 출두했다 Android 플랫폼의 Java 그래서 기본적으로 당신은 관련된 모든 문제를 해결하고 있습니다 네가 코 틀린으로 이사 간다면 최근 Google I / 0 컨퍼런스에서, 그래서이 비디오를 녹음 할 때가 이번 달이었습니다

2019 년 5 월, Google은 개발자 통계 누가 안드로이드 스튜디오 제품을 사용하고 있는지, 현재이 개발자의 50 %는이 안드로이드 개발자이며, 이미 Kotlin을 사용하고 있습니다 다시 한번 그것은 큰 것입니다 코 틀린은 2 년 전만 공개한다고 말할 수 있습니다 이미 50 %를 치고있다 그리고 그것은 내 생각에 기본적으로 꽤 중요합니다

여기에서 올라가고 올라갈 것입니다 지금 그들은 또한 언급했다, 나는 발견했다 그것은 꽤 흥미 있었다 코 틀린 그 자체가 GitHub에서 가장 빠르게 성장하는 언어입니다 이제 2 가지 큰 이유가 있습니다 왜 내가 Kotlin을 사용하는 것 같아요

이제 다시 Kotlin으로 돌아 가야합니다 나는 비디오의 시작 부분에서 언급했다 그럼 그게 실제로 무엇을 의미합니까? 그리고 같은 컨퍼런스에서 Google I / O 컨퍼런스, 구글은 안드로이드가 Kotlin First라고 발표했다 이제는 Google이 실제로 더 많은 것을 만들고 있습니다 네가 원한다면, Kotlin 개발자가 먼저 사용할 수 있습니다

다른 언어보다 먼저 그리고 그것은 분명히 지난 몇 년 동안의 출발이었습니다 이사회가 새로운 API를 도입 한 경우 또는 일부 새로운 기능을 사용하면 일반적으로 사용할 수 있습니다 Java 개발자가 먼저 이제 그들은 그것을 바꾸고 있습니다 실제로 사용할 수있게 만들고 있습니다

먼저 Kotlin 개발자를위한 것입니다 그리고 그들이 사용했던 예가있었습니다 Jetpacks API가 출시 중입니다 먼저 Kotlin 개발자를위한 것입니다 꽤 큰 성명이 거기에 있습니다

다시 말하지만, 이것은 언급 한 바와 같이 커다란 변화였습니다 이전에 그들이 승진하고 어 자바를 먼저 공개했다 구글도 강력한 추천을했다 같은 회의에서 새로운 안드로이드 프로젝트, 처음부터 새로운 프로젝트 시작, 항상 Kotlin에서 해보기를 권합니다 또 다시 지난 해와 출발합니다

지금 이유 중 하나, 그래서 당신이 할 수있는 3 가지 좋은 이유는 무엇입니까? 고려 Kotlin, 유형을 적게, 테스트를 덜, 그리고 유지 보수가 적습니다 이제 그걸 추가하면 이미 프로 개발자의 50 % 그들의 통계에 따르면 이미 Kotlin을 사용하고 있으며, 시간이 지금 여기에 있다고 생각합니다 기본적으로 당신을 위해 Kotlin을 채택하기 시작합니다 Adroid 앱 개발 기본적으로 내가 말하는 것은, 내 관점에서 내 의견으로는, 당신은 실제로 Koltlin에서 발전해야합니다

언제든지 Androd 앱을 실제로 개발하고 있습니다 앞으로 나아가 다 하지만 어쨌든 흥미로운 질문을 불러 일으킨다 앱을 코딩하는 사람들에게 일어날 일 자바로? 자바의 안드로이드 애플 리케이션은 지금? 음, 좋은 소식은 Google이 그들이 계속해서 지원할 것이라고 Java 플랫폼에 투자하십시오 그래서 그것은 마치 어, 자바로 작성한 모든 코드, Android 앱을 사용하는 경우 낭비됩니다

얼굴을 보자 년과 년 그리고 우리의 프로그래밍 코드 그건 자바에서, 어, 안드로이드 애플 리케이션에서 발표되었습니다 그래서 그것은 어쩌면 미친 것 같아요 내 생각에 Google은 그걸 없애 버려 갑자기 그걸 양립 할 수 없게 만든다

그래서 제가 말하고자하는 것은 모든 코드입니다 당신이 자바로 작성한 Android 앱 플랫폼의 경우 여전히 1 번으로 일할 것입니다 하지만 두 번째로 지원 될 것입니다 Google과 함께 전진하고 있습니다 그리고 기본적으로 C ++과 Java를 사용할 수도 있습니다

언제든지 그들이 원하는 것을 말합니다 기본적으로 Android 앱입니다 어느 쪽이 꽤 좋다, 하지만 그들의 추천은 코 틀린 자체에 집중하는 것입니다 기본적으로, 당신은 여전히 ​​지원을받을 것입니다 모든 프로그래밍 언어를 지원합니다

결론은 콜린 퍼스트가 먼저 계획이므로 언제든지 새로운 프로젝트를 만들 수 있습니다 내 추천과 나는 이것을 앞으로 나아갈 것이다 첫 번째 접근 방식으로 Kotlin을 사용할 것입니다 그게 내가 제일 먼저 할 일이야 기본적으로 Kotlin에서 코딩을 살펴 봅니다

그러나 레거시 애플리케이션은 계속해서 지원 될 것입니다 원할 경우 Java를 사용할 수 있습니다 지금 비록 당신이 이미 가지고 있지 않다면, Google I / O 회의 비디오를 확인하십시오 YouTube에서 사용할 수 있습니다 구글 개발자 채널, 나는 말해야한다

거기에 재생 목록이 있습니다 Google I / O 회의 그리고 거기에 약 178 개의 비디오가 있다고 생각합니다 다양한 분야에서 볼 수있는 환상적인 동영상 Android 앱 개발 내에서 해당 채널을 구독하는 것이 좋습니다 그리고 그걸 확인해 봐 기본적으로 링크가 있습니다

그 재생 목록에 대한 설명에서, Google I / O 개발자 컨퍼런스의 재생 목록에 추가 그러니 체크해보세요 특히 당신에게 먼저 관심을 가질만한 것, 나는 몇 가지 점을 인용했다 어, Google 개발자 재생 목록입니다 어 기조 연설, 30 분 ~ 45 분 정도입니다 그래서 기조 연설, 개발자 기조 연설, 일어난 일에 대한 더 많은 정보가 필요합니다

하지만 나에게 이것은 아주 크다 안드로이드는 현재 Kotlin을 밀고있다 너 정말보고 있어야한다고 생각해 Kotlin에서 최대한 빨리 숙련 된 기술을 습득해야한다 안드로이드 애플 리케이션 개발을 위해 앞으로 나아 갔다

좋아, 그래서 그걸 도왔 으면 좋겠어 질문이 있으시면 언제든지 댓글을 남길 수 있습니다 내가 너에게 돌아갈거야 다음 팁을 살펴볼 준비가되면, 여기를 클릭하면 확인하실 수 있습니다 특정 프로그래밍 비디오 코딩에 관심이 있다면, 왼쪽 하단에있는 링크를 클릭하십시오

여기를 클릭하여 가입을 고려하십시오 나는 너를 곧 볼거야!

Learn how to Build Android Apps with Android Jetpack and Kotlin

발표자 : 건축가와 건축가를 배우십시오 Kotlin 프로그래밍 언어로 된 Android 앱 업계에서 입증 된 도구와 라이브러리를 사용합니다

Kotlin에서 Android 앱을 만드는 중입니다 Udacity와 함께 Google에서 개발 한 코스입니다 업계에서 실제 Android 앱을 제작하여 학습하게됩니다 현대적인 응용 프로그램 아키텍처의 모범 사례 Android Jetpack 구성 요소를 사용하는 이유와 방법을 이해하고, 데이터베이스 룸, WorkManager 백그라운드 처리를위한 새로운 탐색 구성 요소 등

핵심 Kotlin 기능을 사용하여 앱 코드 작성 보다 빠르고 간결하게 Android로 개발하는 법은 API와 바로 가기를 배우는 것 이상 그것은 당신의 두뇌를 모바일 개발자처럼 생각하도록 훈련시키는 것입니다 우리와 함께 배우십시오 이 무료 과정에 대한 자세한 정보와 모든 정보를 보려면 Udacity, udacitycom/google으로 이동하십시오

New Era For Android | Kotlin Programming Language

반가워요, 얘들 아! 이쪽은 Neil Holkar입니다 당신이 안드로이드 개발자이거나 하나가 되려한다면, 이것이 올바른 것이어야합니다

기어를 "Kotlin"이라는 새로운 프로그래밍 언어로 전환 할 시간입니다 아니면 Android에서 공식 언어를 말해야합니다 네! 내 말을 들었다 Google은 2017 년 11 월 28 일에이를 공식화했습니다 이제이 새로운 프로그래밍 언어에 대해 잠깐 살펴 보겠습니다

Kotlin은 JetBrains에서 설계되었습니다 아파치 20에 기반한 오픈 소스 프로젝트이다 이제 Android에서 새로운 프로그래밍 언어가 필요한 이유는 무엇입니까? Java로 문제가 해결되지 않았습니까? 예, 얘들 아 오랜 시간 동안 우리는 앱 개발을 위해 Java SE 7을 사용했습니다

우리는 표현력이 풍부하고 훨씬 안전하며 안드로이드 앱을 만드는 언어가 필요했습니다 건강하고 활동적인 그래서 우리는 코 틀린을 개발했습니다 코 틀린은 표현력이 있습니다 코 틀린은 간결합니다

Kotlin은 강력합니다 하지만 무엇보다도, 그것은 기존의 안드로이드 언어 및 런타임과 상호 운용이 가능합니다 이제 kotlin에서 고전적인 hello world 예제를 보겠습니다 첫 번째 행은 패키지를 선언합니다 fun는 함수를 선언하는 키워드입니다

이제 알 수 있듯이 kotlin 프로그램의 시작점은 main이라는 함수이기도합니다 C / C ++ 및 Java와 매우 유사합니다 main 함수의 인수는 제네릭 형식 String의 배열입니다 여기에서 주목할 수있는 한 가지는 데이터 유형이 변수 이름 뒤에오고 둘 다 콜론으로 구분됩니다 여기서 주목해야 할 또 하나의 점은 세미콜론 문장 종결자가 또한 kotlin에서 선택 사항

이제 코드 스 니펫을보고 kotlin이 안전한지 확인하십시오 위의 코드는 컴파일 오류를 생성합니다 Kotlin은 출력 변수를 null로 제한합니다 먼저 변수를 nullable로 선언해야합니다 예를 들면 다음과 같습니다

이 코드는 완벽하게 실행됩니다 Kotlin에는 Java에서 POJO 클래스가 있고 확장 할 수있는 많은 기능이 있습니다 그 기능을 사용하려면 Getter / Setter / toString () / equals ()에 대한 코드를 포함해야합니다 그러나 kotlin에서 데이터 클래스를 사용하면 Getter / Setter / toString () / equals ()를 사용하여 POJO 클래스를 만들 수 있습니다 코드 한 줄만 있으면됩니다

예를 들어이 코드 Lambda를 사용하여 kotlin의 코드를 단순화 할 수 있습니다 이제 클래스를 상속하지 않고 확장을 통해 기능을 확장 할 수 있습니다 kotlin의 기능 하지만 kotlin의 가장 큰 특징은 자바와 100 % 상호 운용이 가능하다는 것입니다

즉 Java에서 kotlin 코드를 호출 할 수 있으며 그 반대도 마찬가지입니다 지금까지 우리는 kotlin의 구문, 의미 및 특징에 대해 이야기했습니다 이제 다양한 기존 도구에 대한 지원에 대해 말씀 드리겠습니다 IntelliJ IDEA 15에는 Kotlin에 대한 플러그인 지원이 있습니다 또한 Eclipse IDE에는 Kotlin에 대한 플러그인 지원이 있습니다

Android 30 이상부터 kotlin은 공식적인 지원을받을 것입니다 이전 버전의 Android의 경우 플러그인 지원도 가능합니다 이제 우리가 코 틀린으로 전환하는 회사에 대해 이야기하면, 당신은 그 (것)들에 의하여 kotlin의 거대한 채용을 볼 수있다 Amazon Web Services에서 Pinterest, Coursera, Netflix, Uber, Corda 및 BaseCamp Expedia에 HSBC는 이미 kotlin을 채택했습니다

kotlin으로 빌드 된 다양한 앱을 볼 수도 있습니다 좋아하는 앱도있을 수 있습니다 코 틀린은 이미 시장에 나와있다 이제는 어떤 변화가 가져올 것인지, 그리고 어떤 새로운 변화가이 분야에서 이루어질 것인지 봅시다 2018 년 프로그래밍 언어

이 동영상 용입니다 아래의 코멘트 섹션에서 Kotlin에 대한 의견은 무엇입니까? 2018 년에 자바를 대체 할 예정입니까 ?? 그리고이 비디오가 마음에 들면 LIKE 버튼을 누르고 SUBSCRIBE를 잊지 마세요 이 채널에 그때까지, 계속 학습하고, 프로그래밍을 유지하십시오! 고마워, 안녕!

Java or Kotlin for Android Development – Which One Is Better?

Kotlin 또는 Java for Android에 중점을 두어야합니까? 앱 개발? 오늘의 비디오에서 그것에 대해 이야기합시다 환영합니다, 제 이름은 팀 부칼 카입니다

그날의 또 다른 프로그래밍 팁과 함께 문제는 어떤 프로그래밍 언어 Android 앱 개발에 집중해야합니까? 장면에 상대적으로 새로운 Kotlin은, 또는 주위에 있었던 오래된 언어 인 자바 많은 수년간 일반적으로, 나의 조언은 새로운 프로젝트를위한 것이다 Kotlin에 집중할 수 있습니다 그 이유는 그것이 선진국 언어 다

특히 지난 2 년 동안, Google은 Kotlin을 크게 홍보했습니다 Android 앱 프로그래밍의 대안으로 저에게는 몇 가지 이유가 있다고 생각합니다 구글이 공식적으로 말하지는 않았지만, 나는 그들이 오라클과 논쟁 중이라고 생각한다 Java의 사용에 관해서는 무게가 나가고 있습니다 그들의 마음에 그들은 스스로를 해방하려합니다

아마 그 라이센스 제한에서 계속되는 주장과 법원 사건이 많이 있기 때문에 실제로 오라클과 Google과 관련된 안드로이드 애플 리케이션 개발에 자바의 사용 장기적으로 볼 때 우리는 우리가 보았던 Kotlin과 Java와 유사한 상황 신속하고 객관적인 C와 iOS 개발, 그리고 그것은 애플, 그들은 수년간 목표 C를 사용하고 전환했다 신속하게 신속하게 이제는 내가 말할 것입니다 그 목표 C, 아직 사용 중이지만 레거시 애플리케이션의 경우, 즉, 이전에 개발 된 응용 프로그램 스위프트가 나오면, 확실히 프로그래밍 프로젝트의 대다수는 생각합니다 이제 나와서 Swift에서 일하거나 실제로 만들었습니다

그래서 나는 구글과 같은 일이 일어날 것이라고 생각한다 이미 통계적으로, 마지막 Google IO에서 Google 슬라이드를 본 것 같습니다 콜틴이 이미 시작한 것에 대해 이야기했던 6 월에 새로운 프로젝트를 위해 Java를 추월하려면, 그게 일어날 것 같아 너라면 네가 그렇게 생각해 기존 자바 개발자, 지금은 Kotlin을 배우기에 좋은 시간이 될 것입니다

그러니 자신을 세워서 그 기술을 얻었습니까? 그래서 Kotlin이 실제로 주류가 될 때 대부분의 새 프로젝트는 Kotlin, 너는 적어도 Kotlin에 대한 기본적인 지식을 가지고있다 생산적 일 수있다 처음으로 시작하는 경우 자바 또는 코 틀린으로 프로그래밍하지 않은 경우, 내 추천은 Kotlin에서 시작하는 것입니다 그리고 그것은 새로운 섹시한 언어이기 때문입니다 그것은 당신의 이력서에 아주 좋게 보일 것입니다

그러나 나는 또한 여전히, 내가 네 신발에 있었다면, 자바 학습에 시간을 투자해라 자바가 그렇게 큰 언어이기 때문에, 그런 인기있는 언어, 심지어 다시 Android 앱 개발과 관련 있습니다 Java로 작성된 기존 프로젝트가 너무 많습니다 그래서 다른 말로하면 당신은 Java 귀하의 일상적인 프로젝트 작업에서 어쨌든, 아마 레거시 애플리케이션을위한 것이어야합니다 새로운 응용 프로그램의 일부 작성, 또는 Kotlin에서 응용 프로그램의 일부 아마도 당신은 자바 컴포넌트로도 작업하고있을 것입니다

그래서 당신은 정말로 두 가지 모두를 알아야합니다 하지만 Android 앱 개발자로 시작한 경우 2019 년에 나는 Kotlin에 먼저 초점을 맞추었고, 그러나 나는 또한 내가 몇 가지 자바 기술을 가지고 있는지 확인하게 될 것이다 기본적으로 더 생산적인 프로그래머가 될 수 있습니다 게다가 좋아, 내가 그걸 도왔 으면 좋겠어

질문이 있으시면 언제든지 댓글을 남길 수 있습니다 내가 너에게 돌아갈거야 다음 팁을 살펴볼 준비가되면, 여기를 클릭하면 확인하실 수 있습니다 특정 프로그래밍 비디오 코딩에 관심이 있다면, 왼쪽 하단에있는 링크를 클릭하십시오 여기 링크를 클릭하여 구독하는 방법을 고려해보십시오

나는 너를 곧 볼거야

1 – Android Jetpack Navigation with Kotlin

안녕하세요, 모두 Martin Baraya입니다 오늘은 Android에 대해 배울 것입니다

제트 팩 내비게이션 먼저 제트 팩 내비게이션이란 무엇입니까? 한 화면에서 다른 곳으로 이동하는 것과 같이 앱 주변을 탐색하는 데 사용되는 제트 팩 내비게이션 또 다른 그것은 안드로이드 개발의 근본적인 부분이며 그것을하는 데 사용됩니다 하단 탐색과 같은 버튼을 클릭하는 것보다 더 복잡한 작업 제트 팩 내비게이션 작동 방식에 대해 3 가지 주요 사항을 더 이해합니다 네비게이션 구성 요소의 일부로 네비게이션 그래프, nav 호스트 조각과 탐색 컨트롤러 그래서 안드로이드 jetpack을 만들기 시작하자 안드로이드 스튜디오에서 탐색하고 안드로이드 문서 노트에 의존한다면 Android Studio에서 탐색을 사용하려면 Android Studio를 사용해야합니다 3 단계 이상의 3 단계부터 시작하자 그래서 우리는 비어있는 활동을 가진 새로운 프로젝트를 시작할 것입니다

제트 팩이나 뭐든간에 당신이 실제로 그것을 선택할 수있는 위치를 선택할 수 있습니다 바탕 화면에 jetpack이라는 빈 폴더가 있고 우리는 Kotlin으로 시작할 수 있습니다 완료 후에 API 레벨을 최소로 선택하고 gradle은 빌드하는데 약간의 시간이 걸릴 것입니다 처음부터 그래 슬레 빌드가 완료되었습니다 우리는 단편이 필요합니다

단편을 선택할 수 있습니다 우리는 그것을 주요 조각이라고 부를 수있는 뷰 모델을 가진 조각 Kotlin과 잘 맞았 어 그래서 그 후에 우리는 두 조각 더 필요합니다 그래서 우리는 빈 조각을 선택하려고합니다 이 두 상자의 선택을 취소하십시오

그냥 끝내 줘 우리는 두 번째 조각을 위해 똑같은 작업을 할 것입니다 공백, 두 번째 조각 끝 실제로 우리는 메인 프래그먼트의 주요 활동과 첫 번째 프래그먼트 및 두 번째 프래그먼트로 작업 할 수있다 조각하지만 우리는 주보기 모델을 사용하지 않을 것입니다 gradle 종속성을 가지고 있으므로이 두 줄의 코드를 추가 할 것입니다

nav 버전을 사용하면 지금 동기화를 선택할 것입니다 괜찮아 그러면 우리는 철판 최상위 레벨을 선택하고 allprojects 내부에서 이 버전의 코드 안드로이드 지원 버전을 추가하여 버전 28을 지원하십시오 지금 동기화 선택하기 그래서 지금 우리는 네비게이션 그래프를 만들 것입니다이 창을 닫으십시오 그래서 내부 자원과 레이아웃, 우리가 할 주요 활동 XML 파일 내부 그래프 작업, 먼저 텍스트보기를 삭제합니다

우리가 필요로하지 않기 때문에 우리는 서랍 레이아웃을 추가 할 것입니다 우리가 선택할 부모님은 부모님과 일치합니다 우리는 그것의 ID를 추가 할 수 있습니다, 우리는 컨테이너 이름을 이제 알았습니다 우리는 서랍 안쪽에 tage 조각을 추가 할 수 있습니다 형세 alt 키를 누르면 ID가 추가되고 nav 호스트이므로 Android 이름을 추가합니다

프래그먼트 호스팅을위한 프래그먼트 (fragment)와 우리는 제로 (dp)와 함께 너비와 하이를 할 수있다 그리고 제약 레이아웃을위한이 위치는 바로 지금이 것을위한 것입니다 우리가 선택할 수 있도록 리소스 폴더 안에 탐색 그래프 탐색을 생성합니다 새로운 Android 리소스 파일에서 리소스 유형 탐색을 선택해야합니다 nav_graph라는 이름을 짓고 ok를 누릅니다

그리고 그들의 디자인 부분에 가자 이 테이프에서 우리는 다음과 같은 주요 조각을 선택할 수 있습니다 우리는이 두 줄을 추가 할 수있는 조각 안의 주된 활동으로 되돌아 간다 기본 탐색 호스트의 코드 = true 및 탐색 그래프, 경로입니다 이것은 우리가 네비게이션과 네비게이션 그래프 안에서 만든 네비게이션 그래프입니다

주요 활동으로 전환해야합니다 주요 액티비티에는 서랍 레이아웃이 필요합니다 그래서 우리는 서랍 레이아웃을위한 변수를 만들 것입니다 그런 다음 Oncreate 메서드에서 조각을 찾기 위해 변수가 필요합니다 ID 그래서 우리는 그 이름을 지원하는 조각과 동등한 가치로 호스트 할 가치가있다

관리자가 ID로 조각을 찾으면이 ID입니다 nav 호스트 조각에 대한 이름과 형변환은 null을 받아 들일 수 있습니다 호스트에서 컨트롤러를 탐색하고 호스트에서 컨트롤러를 탐색 한 다음 네비게이션 바를 제어하고 우리가 그것을 연결해야하는 서랍 레이아웃 이 ID 컨테이너와 연결된이 drawerlayout ID this this 이제 우리는 탐색 UI를 사용하여 탐색 컨트롤러와 서랍을 연결합니다 작업 표시 줄, 설정 작업 표시 줄 탐색 컨트롤러 이것은 활동을 나타냅니다 이 변수에 대한 컨트롤러와이 변수에 대한 서랍을 탐색하면 ctrl 키를 눌러 덮어 쓰기 메소드를 만들겠습니다 이 방법과 우리는 사용자가 뒤로 버튼을 누른 다음 반환 값을 탐색 UI로 변경합니다

서랍,이 서랍을 탐색하고 해당 서랍의 활동 ID를 처리합니다 메인 프래그먼트 이제 탐색 그래프 탐색으로 전환합시다 먼저 조각 두 개를 추가하고 두 번째 조각을 추가합니다 두 번째 조각이므로 탐색 그래프에서 그래픽을 만들 수 있습니다 이 좋은 것을 사용하여 연결 액션, 위대한 생각에 대해 우리는 하나의 조각에서 연결할 수 있습니다 다른이 ID를 사용하여이 작업 ID를 사용하여 연결할 수있는이 작업 ID 한 조각에서 다른 조각으로 이제 주 프래그먼트 내부의 디자인 파트로 전환 해 보겠습니다

버튼이 두 개의 버튼 사이에 연결이 두 버튼을 사용하여 이제 우리가 할 주요 조각 안의 주요 조각으로 바꾸자 onView라는 create 메소드를 덮어 씁니다 그리고이 방법은 단편들 사이를 연결하는 데 사용되었고, 그런 다음 set onclicklistener와 같은 단편과 버튼을 연결하면 펀드를 사용합니다

버튼 ID 및 행동 ID가있는 내비게이션으로 ID별로보기 여기 네비게이션,이 쪽 우리는 이것을 바꿀 필요가있는 두 번째 버튼에 대해 동일한 작업을 수행 할 수 있습니다 button2를 클릭하면 액션 메인 프래그먼트 – 제 2 프래그먼트 그건 사실 우리가 거의 마지막에 끝났어 우리가 탐색 그래프를 살펴보고 메인 라벨의 라벨을 바꿀 거라고 생각해 원하는 집이나 원하는 물건과 첫 번째 조각, 두 번째 조각 텍스트 첫 부분을 바꿀거야 텍스트를 원하는대로 변경할 수 있으므로 첫 번째와 두 번째와 같이 만들 수 있습니다

조각 우리는 텍스트를 두 번째로 변경하려고합니다 첫 번째 및 두 번째 조각에 디자인 첫 번째 조각을 위해 우리는 같은 디자인을 추가 할 수 있습니다 두 번째 조각도 마찬가지입니다 텍스트 크기를 텍스트 스타일에 추가하기 만하면됩니다 이 물건이 이것과 그것 인 것 인이 재료 이제 우리는 android studio 에뮬레이터를 사용하여 테스트 할 것입니다

첫 번째 조각을 선택하면 첫 번째 조각이 첫 번째 조각으로 이동합니다 두 번째 조각은 두 번째 조각을 선택합니다 시청 해주셔서 감사합니다

#4 – Reset password in Firebase Authentication in Android using Android Studio – Kotlin

얘들 아 CodeAndroid의 Vignesh 이 비디오에서는 "Firebase에서 잊어 버린 비밀번호를 재설정하는 방법" 이전 자습서에서는 사용자 생성 방법 자격증 명으로 로그인 암호 변경 이제 보게 될 것이다 이전 암호를 몰라도 암호를 다시 설정하는 방법 사용자가 자신의 암호를 모른다면 그럼 그는 로그인 할 수 없다

이때 비밀번호를 재설정하려고합니다 로그인 버튼 아래에 암호 분실 버튼 추가하기 버튼의 텍스트를 "비밀번호 분실"로 설정 나는 모든 텍스트를 대문자로하고 싶지 않다 그래서 textAllCaps를 false로 설정하십시오 우리는 화면의 전체 너비에 걸쳐 버튼 적용 범위를 원하지 않습니다 그래서 너비를 "wrap_content" 또한, 우리는 화면의 오른쪽에있는 버튼을 원한다

따라서 layout_gravity를 끝으로 설정하십시오 마지막으로 코드를 재정렬하고 ID를 다음과 같이 설정합니다 "btn_forgot_password" 또한 16dp로 martingTop을 추가하십시오 이 버튼을 클릭하면 대화 상자를 표시하고 싶습니다 그것을 사용하여 사용자의 이메일 주소를 얻고 재설정 된 비밀번호 메일을 보냅니다

단추에 대한 청취자를 클릭하도록 설정 이 대화 상자에는 레이아웃 파일이 필요합니다 따라서 "dialog_forgot_password"라는 새로운 레이아웃 파일을 만드는 것입니다 레이아웃 파일에는 하나의 EditText 만 있습니다 EditText로 루트 요소를 변경했습니다 중간에있는 EditText에서는보기를 원하지 않습니다

그래서 같은 줄에서 끝내기 높이를 "wrap_content"로 변경하고 id를 "et_username"으로 지정합니다 여백 시작 및 종료를 16dp로 추가 이제이 레이아웃 파일이 대화 상자로 표시됩니다 AlertDialogBuilder 객체를 생성하려면 빌더라는 값에 저장 대화 상자의 제목을 "비밀번호 찾기"로 설정하십시오

레이아웃 layoutInflater를 사용하여 레이아웃 파일 팽창시키기 보기라는 값에 저장 그런 다음 setView 메소드를 사용하여 대화 상자보기로보기를 설정합니다 대화 상자에는 두 개의 버튼이 필요합니다 양수 버튼과 음수 버튼 따라서 빌더에 대해 긍정적 인 버튼을 설정하고 텍스트를 '재설정'으로 전달하십시오 네거티브 버튼에 복사하여 텍스트를 닫기로 변경 양수 버튼을 클릭하면 EditText에서 값을 읽어야합니다 따라서 뷰 객체에서 findViewById를 호출하여 EditText의 객체를 생성합니다

여기 전자 메일 주소의 유효성을 검사해야합니다 그래서 forgotPassword라는 함수를 생성합니다 해당 메소드가 EditText를 매개 변수로 전달하는 경우 메소드 내에서 유효성 검사를 할 수 있도록 전자 메일 유효성 검사를 복사하고 여기에 붙여 넣습니다 우리는 검증을 위해 "username"을 사용할 필요가있다 오류의 경우 오류를 표시 할 필요가 없습니다

그래서 나는 그것들을 제거하고있다 사용자 이름이 유효하면 재설정 된 비밀번호 메일을 보내야합니다 Firebase 인증에서 "비밀번호 재설정 메일 보내기"부분을 볼 수 있습니다 그래서이 코드를 복사하여 여기에 붙여 넣습니다 emailAddress의 경우 이메일 주소를 전달해야합니다

사용자 이름에 입력 된 EditText 작업이 성공하면 "이메일 전송 됨"으로 표시됩니다 마지막으로 빌더 객체에서 show 메소드 호출 대화 상자가 사용자에게 표시됩니다 이제 응용 프로그램을 시작합니다 응용 프로그램의 DashboardActivity로 이동하는 것을 볼 수 있습니다 tho LoginActivity (으)로 이동하려면 응용 프로그램을 제거하고 다시 시작합니다

잊어 버린 암호 버튼을 볼 수 있습니다 버튼을 클릭하면 대화 상자가 나타납니다 이메일 주소를 알려 드리겠습니다 '재설정'버튼을 클릭하면 축배가 '이메일 전송 됨'으로 표시됩니다 이메일을 열어 보겠습니다

"비밀번호 재설정"에 대한 메일을 볼 수 있습니다 메일을 열고 비밀번호 재설정 링크를 클릭하십시오 내 새 암호를 "123456" 이제 자격 증명으로 로그인하려고합니다 우리가 우리의 어플리케이션에 로그인하는 것을 볼 수 있습니다 이렇게하면 사용자 비밀번호를 잊어 버렸을 때 재설정 할 수 있습니다

이 비디오 녀석을위한 전부입니다 이 비디오가 마음에 드시면 엄지 손가락을주세요 나를 후원하고 싶다면에서 후원자가되어 그렇게 할 수 있습니다 wwwpatreon

com/CodeAndroid 너가 좋아하길 바래 내 다음 비디오에서 뵙겠습니다 좋은 하루 되세요