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 너가 좋아하길 바래 내 다음 비디오에서 뵙겠습니다 좋은 하루 되세요

How to convert java code to kotlin in intellij idea | Android Studio

이 비디오에서는 자바 코드를 kotlin으로 변환하는 방법을 보여 드리겠습니다 이제 자바 파일을 열어 보았습니다

메뉴 막대의 코드로 이동 자바 파일을 Kotlin 파일로 변환을 클릭하십시오 확인을 클릭하십시오 코 틀린 코드는 여기에있다 너는 달릴 수있어 보고 주셔서 감사합니다

Introduction to Kotlin (Google I/O '17)

안녕하세요 저희를 응원하지 마시고 다음 발표자를 응원해 주세요 전 호만 기이고 Android 플랫폼 팀을 대표합니다 이분은 토르 노비이고 도구 팀을 대표하죠 저희 때문에 여기 오신 건 아니죠 특별한 발표자 분들을 위해 오셨죠 그렇죠, 로맨과 저는 코틀린의 공식 발표에 대해 정말 기뻐하고 있습니다 아직 모르시는 분들을 위해 저희 둘 다 코틀린을 정말 좋아합니다 그럼 발표자분의 시간을 더는 뺏지 않겠습니다 그럼 지체 없이 시작하시죠 안녕하세요 좋습니다 얼마 전 이런 생각이 들었습니다 제가 처음으로 코틀린에 대해 발표한 건 45년 전이었다는 거죠 900명이 올 수 있는 방에 7명이 왔었죠 오늘 더 많은 분들이 찾아주신 걸 보니 좋습니다 감사합니다 어쨌든 전 대략 30분이 있죠 사실 그보다 짧습니다 코틀린에 대한 정신없는 투어를 드리기 위해 28분이 있으니 언어 전체를 다루진 않겠습니다 최대한 많이 보여드리려고 노력할 것이고 사용법과 혜택을 받을 수 있는 곳에 대해 설명하겠습니다 모두 라이브 코딩으로 해보려고 합니다 뭔가 잘못될 경우 Google 비디오가 있습니다 유튜브 비디오도 어딘가 있을 테니 그걸 보시면 됩니다 그럼 여러분이 이미 본 적 있는 아주 간단한 것으로 시작하죠 데이터 클래스입니다 전 메인이라는 파일에 있습니다 전 머니라는 새로운 타입을 만들어 보겠습니다 amount라고 쓰고 이는 Int이죠 압니다, 지금은 아무 것도 없죠 그리고 이는 통화 유형의 문자열을 가질 겁니다 됐죠? 이는 모두 속성이고 속성만 읽게 될 겁니다 이는 여러분이 이미 친숙하신 거죠 기본적으로 데이터 클래스입니다 제가 미리 만든 자바와 비교해 보도록 하죠 수직으로 나누겠습니다 자바 머니를 불러오죠 이쪽으로 내려 갑시다 자바 머니, 됐죠 제가 방금 쓴 것과 동등한 것이죠 자바빈은 기본적으로 게터를 2개 제공하는 데이터 클래스이죠 변경할 수 없고 읽기 전용입니다 여기 데이터 모디파이어가 하는 일은 여러 가지를 제공해 줍니다 toString도 주고 clone도 줍니다 코틀린에서는 이를 copy라 부르고 equals도 하죠 hashCode를 합니다 그럼 괜찮다고 하시겠죠 그런데 이게 왜 필요할까요? 좋은 IDE라면 저를 위해 이걸 만들어 줄 테니 말이죠 그렇죠, 맞는 말입니다 그러나 문제는 그건 유지해야 할 코드라는 거죠 새로운 속성을 추가할 때마다 다시 돌아가서 그 코드를 바꿔야 할 겁니다 또 다른 문제는 그 코드가 여러분을 위해 IDE가 만든 표준 코드인지 아님 여러분이 조금 수정한 것인지 모른다는 점이죠 그렇죠? 따라서 단순히 첫 라인에 적어 넣는 걸 하지 않아도 된다는 의미가 아닙니다 좋습니다 이제 가서 메인 기능을 만들겠습니다 이건 닫겠습니다 이건 코틀린의 상단 입력부입니다 클래스에 퍼블릭 스태틱 보이드 메인이 있죠 코틀린에는 그게 필요 없습니다 코틀린에서는 모든 것을 톱 수준에 적으면 됩니다 좋은 식으로 하는 일종의 자바스크립트 같죠 하실 필요 없죠 다시 말씀드리자면 제가 오늘 보여드릴 모든 기능과 모든 것을 이 파일에 톱 수준으로 그냥 첨부할 거지만 그렇다고 다른 멤버 기능이 없다는 의미는 아닙니다 어떠한 클래스나 심지어 데이터 클래스도 멤버 기능을 가질 수 있습니다 간결성을 위해 그리고 여러분께 보여드리려는 목적으로 전 그냥 톱 수준에 넣겠습니다, 아셨죠? 그럼 머니에 대한 새 인스턴스를 만들겠습니다 예컨대 티켓이라고 부르겠습니다 머니는 100이라고 쓰고 달러로 쓰겠죠 외현 타입에 들어가겠지만 여기서는 타입 추론을 하겠습니다 코틀린은 굉장히 강력한 타입 추론이고 추론할 수 있는 만큼 여러분을 위해 할 겁니다 따라서 타입을 외현적으로 말해 줄 필요 없는 거죠 그러고 나서 예컨대 팝콘이라고 하고 티켓, 카피라고 하죠 이게 하는 일은 기본적으로 이전 것과 모든 속성을 복사해주는 것입니다 파라미터를 넘기지 않으면 이전과 같은 값을 가져가는 거죠 그럼 새 파라미터를 넘겨 보죠 예컨대 스페인에서는 팝콘이 영화관에 입장하는 것보다 7배 더 비싸니 그건 500유로 정도 되겠죠 그렇죠? 이제 예컨대 이런 걸 할 수 있죠 티켓이 팝콘과 같지 않다면 printIn "이들은 다릅니다!"하는 거죠 이것이 하는 일은 속성 비교를 하나씩 하는 겁니다 포인트 비교를 하진 않습니다 포인트 비교를 위해선 3가지 등식이 있어야죠 자바스크립트와는 다르게 기억해야 할 600개의 다른 위치 차트가 없습니다 참고로 이건 폰트 합자로 혼동하지 마시기 바랍니다 새로운 문자를 소개한 건 아닙니다 좋습니다 그럼 이제 가서 이를 실행하면 "이들은 다릅니다!"를 보게 되죠 그리고 이걸 100으로 바꾸고 달러로 넣어서 실행하면 아무 말도 하지 않겠죠 같은 값이니까 말이죠 그렇죠? 저희가 계속 신장시켜 온 기능 중 하나는 자바와 코틀린 사이의 인터롭이죠 이 자바 머니가 여기 있죠 가서 인스턴트를 만들어 보겠습니다 자바머니는 JavaMoney와 같다고 하고 이는 100이겠죠 달러일 테죠 javaMoney를 하면 보시다시피 게터가 없죠 게터가 하나 있긴 하죠 제가 금액을 얻을 수 있도록 말이죠 하지만 getAmount라고 하고 완성하면 IDE가 이미 속성으로 대치할 겁니다 저희는 게터나 세터같은 게 없고 속성만 있을 뿐이기 때문이죠 따라서 이는 코틀린에서 자바로 소비되는 거죠 여기 자바로 가서 퍼블릭 스태틱 보이드 메인을 만들어 보죠 그런 후 봅시다

타입을 디클레어 해야죠 머니는 새 머니와 같고 100와 달러이다 됐죠 다른 점 하나는 코틀린에서 세미콜론이 선택적이라는 거죠 선택적인 이유는 이걸 써야 하는지 말아야 하는지에 관한 끝없는 논쟁을 위한 거죠 자바스크립트와 경쟁하려는 겁니다 moneygetAmount라고 하면 이제 전 자바에서 코틀린 타입을 쓰고 있으니 게터와 세터가 생기는 거죠 따라서 여러분이 어떻게 사용하는가에 따라 관용구가 되겠죠 이는 다른 자바 파일과 다른 코틀린 파일이 하나의 프로젝트에서 아무 문제 없이 매끄럽게 작동하는 거죠 그럼 이제 기능을 만들어 보겠습니다 sendPayment라는 기능을 만들어 보죠 머니가 필요하죠 Money라고 치고 머니를 printin하게 될 겁니다 물론 문자열 보건이 있죠 sending moneyamount 라고 하면 되겠죠 이 중괄호는 안 쓰셔도 됩니다 넘기고 있는 단일 속성일 뿐이고 잠시 후에 보실 겁니다 이제 이걸 예를 들어 sendPayment 티켓이라고 하면 되겠죠 코틀린은 또한 보시다시피 리턴 타입을 정의내리지 않습니다 기본값으로 이건 유닛이고 보이드 같은 거지만 보이드는 아니죠 이는 사실 싱글톤, 즉 오브젝트의 단일 인스턴스인 거죠 이것이 유닛이라면 여기 넣을 필요 없겠죠? 그럼 여기 새로운 파라미터를 넣고 예컨대 메시지라고 하죠 이건 문자열을 가지게 될 것이고 기본값 파라미터를 가지면 되겠죠 여기 보시면 기본값 파라미터를 만들었기 때문에 컴필레이션 오류가 없죠 이는 과부하된 기능의 측면에서 많이 절약해 줍니다 과부하된 멤버 기능에서 말이죠 그냥 기본값 파라미터가 있으면 되고 그 다음엔 마음대로 하면 되죠 기본값 파라미터가 여러 개 있어도 되죠 여러 개의 기본값 파라미터가 있어도 되고 무엇을 전할지 번갈아 보낼 수 있으므로 파라미터 이름도 정할 수 있죠 따라서 사실 메시지는 "행운을 빌어!"와 같다고 쓰고 머니는 티켓과 같다고 쓸 수 있겠죠 이는 유용할 수 있습니다 예컨대 레거시 코드를 쓸 때 수정할 수 없는 기능이 있다고 치면 600개의 파라미터가 있는 거죠 아마 그 중 500개는 진실 거짓 불리안이라면 각 포지션 마다 어떤 파라미터를 전할지 일종의 통찰력을 주는 거겠죠 네 사람들이 망칠 때 정말 좋습니다 박수칠 때 말이죠 잘 되고 있다고 생각하고 있던 참이었죠 좋습니다, 다시 해 보죠 편집해 주세요, 성인 감독 차원에서 좋습니다 코틀린의 다른 특징은 정말 쉬운 기능이 있다는 점이죠 근본적으로 단일 값으로 리턴하는 것처럼 그냥 단일 수식 기능을 할 수 있습니다 외현 타입을 삭제했고 중괄호도 삭제하고 그냥 제가 원하는 실제 기능으로 리턴하는 거죠 아셨죠? 사실 수식의 개념은 코틀린에서 많은 부분에 나타납니다 예컨대 다른 기능을 만들어 보죠 ConvertToDollars라고 부르는 기능이죠 이는 머니를 가져갈 겁니다 머니로 리턴하겠죠 그러고 나서 할 일은 이건 when 스테이트먼트가 있고 이건 케이스이죠 따라서 통화가 달러이면 그대로의 머니가 리턴하는 거죠 아무 것도 할 필요 없으니 말이죠 유로이면 리턴하겠죠 moneyamount 곱하기 죄송해요, 새 인스턴스를 만들어야겠죠 머니, 그러고 나서 money

amount 곱하기 BigDecimal 110 그러면 달러가 되겠죠 그 외에는 IllegalArgument Exception을 던지고 "당신이 관심 있어 하는 통화가 아님" 이는 결국 when을 수식으로 취급할 수 있죠 따라서 이 리턴을 없애고 이 리턴도 없애고 여기에만 넣으면 이것이 그냥 when은 항상 수식을 리턴하는 것으로 만들어주는 거죠 사실 여기 리턴도 지울 수 있습니다 Money도 없애고 이것도 없애면 단일 수식이 생긴거죠 아셨죠? 단일 수식 기능입니다 이제 여기서 보시다시피 이건 오류를 주고 있죠 BigDecimal을 int로 운용하려고 했으니 말이죠 이를 리팩터하면 되겠죠 그리고 이걸 BigDecimal로 부르겠습니다 BigDecimal에 대해 말하자면 여기도 있죠 BigDecimal, BigDecimal 100 그리고 BigDecimal BigDecimal을 입력하는 거 좋습니다 즐겁습니다 여기 이게 있죠 이제 BogDecimal을 보시면 BigDecimal을 새로 만들어서 bd1는 BigDecimal 100과 같다고 하죠 보시다시피 bd1은 많은 기능이 있죠 나누기, 곱하기 등등 말이죠 백분율 같은 것을 하고 싶다면 어떨까요? BigDecimal의 백분율을 원하는 거죠 보통은 기본적으로 거기에서 인헤리트한 후 여러분 각자의 버전을 만들겠지만 코틀린에서는 저희가 추가한 기능 중 하나는 C#과 익숙하시면 확장 기능이라고 불리는 것으로 기본적으로 어떠한 클래스나 타입도 확장시킬 수 있다는 겁니다 따라서 BigDecimal의 기능을 가지고 확장시키고자 하는 클래스의 이름을 넣고 이것이 백분율이길 원한다고 하면 되죠 그리고 제가 하고 싶은 백분율은 예컨대 정수이고 그럼 된 거죠 봅시다 이것이 확장 기능이라는 점에서 그 클래스, 오브젝트의 인스턴스를 가지게 되는 거죠 좋습니다 이것으로 레퍼런스 할 수 있는 거죠 그러고 나서 이건 백분율로 곱해지고 다시 BigDecimal로 둘러쌓여야겠죠 백분율 그런 후 나누고 또 다른 BigDecimal 100이죠 뭐가 잘못 됐죠, 백분율이어야죠 백분율 좋아요, 이제 bdi에 백분율이 생긴 거죠 그렇죠 percent7이라고 하면 특정 백분율을 주는 거죠 그리고 이 확장 기능은 패키지 내에서 정의된 어디에서든 포함되는 겁니다 따라서 이 경우 comjetbrainsgio에 있죠 거기 포함될 겁니다 따라서 확장 기능을 만들 수 있고 표준 라이브러리가 실제로 여러 확장 기능을 포함하고 있다는 걸 볼 수 있으실 겁니다 이제 한 걸음 더 나아가 보겠습니다 사실 모든 것을 확장시킬 수 있기 때문이죠 가서 정수를 확장시켜보죠 fun Int이라고 하고 percentOf를 치면 그 반대를 할 겁니다 어떤 것의 10프로를 원한다고 하죠 그럼 예컨대 머니라고 하고 돈의 10프로를 원하죠 리턴하겠죠 봅시다, 머니를 리턴하겠죠 amount

multiply가 될 것이고 여기는 실제 인스턴스를 참조할테니 this일 것이고 다시 한번 this는 BigDecimal로 쌓여야 하고 100으로 나눠지겠죠 좋습니다 순서가 똑바로 된 것 같습니다 실행이 잘못되도 상관 없어요 아무도 신경 안 쓰죠 어쨌든 이제 이렇게 할 수 있죠 7 percentOf BigDecimal 100라고 하죠 됐죠? 아니죠, 죄송합니다 머니 머니라고 하고 아직 박수치지 말아 주세요 머니 그냥 가지고 있는 머니를 가져오죠 7percentOf(popcorn) 됐죠? 좀 더 괜찮은 걸 해보죠 사실 이렇게 하고 싶습니다 7 percentOf popcorn이라고 하고 싶죠 괜찮을 겁니다 그렇게 하셔도 되죠 여기 구불구불한 것 보이시나요? Alt, 엔터, 'infix' 첨가 됐죠 단일 파라미터를 가진 어떠한 확장 기능도 infix 표시로 불러올 수 있습니다 그리고 제가 한 건 거기 infix를 추가한 것이죠 이것이 코틀린으로 DSL 접근을 할 수 있게 만드는 겁니다 좋습니다 제가 정말 하기 싫어하는 것 중 하나는 BigDecimal을 쓰는 거죠 귀찮죠 코틀린에서 타입 롱의 값을 만들고 싶다면 long 100L라고 치면 타입 롱이 될 겁니다 이렇게 할 수 있다면 좋겠죠 bd2는 100BD와 같다 하지만 못합니다 이건 내장되지 않았죠 하지만 코틀린에 있는 것은 확장 속성이라는 겁니다 이건 확장 기능과 완전히 똑같은데 속성으로 확장시키는 것만 다르죠 따라서 bd같은 걸 할 수 있죠 이제 그럼 심지어 타입 정수에 확장 속성을 만들길 바라냐고 묻는 거죠 네 BigDecimal을 리턴하겠죠 그럼 여기에서 BigDecimal을 리턴할 것이고 이건 인스턴스죠 사실 더 쉽게 만들기 위해 이걸 수식으로 바꿀 수도 있죠 됐습니다 이제 100bd가 생겼죠 이걸 전할 때 BigDecimal보다 훨씬 근사하고 그냥 100

bd라고 하면 됩니다 아셨죠? 기능으로 할 수 있는 또 다른 것은 확장할 수 있는 특정 수식이 있다는 거죠 예컨대 더하기 연산자를 확장할 수 있습니다 전 이걸 다 입력하지 않고 절 위해 이 일을 해줄 작은 것을 해 보도록 하죠 제가 얼마나 빨리 타자 치는지 보셨죠? 제가 한 일은 이제 돈에 대한 더하기 연산을 치환한 것이죠 따라서 비용은 티켓 더하기 팝콘이라고 할 수 있죠 비용 금액에 추가할 수 있도록 해주는 겁니다 이를 더하기, 빼기 곱하기 등으로 할 수 있습니다 여러분이 사용할 수 있도록 하는 특정 연산을 따르도록 내장된 컨밴션이 많죠 좋습니다 여기에서 저희는 여러 타입을 만들었습니다 전부 지워서 집중할 수 있도록 해보죠 저희는 여러 타입을 만들었죠 제가 만든 이 타입를 보시면 전 실제로 타입을 구체화한 적 없지만 그러셔도 됩니다 예컨대 val train costs 라고 할 수 있죠 예컨대 트레인은 타입 머니이고 그러면 새로운 값으로 시작하는 거죠 100bd 그러고는 달러를 쓰는 거죠 train=null이라고 한다면 오류를 주겠죠 사실 2개의 오류가 날 겁니다 하나는 이것이 변경할 수 없는 변수이기 때문이죠 고치면 되겠죠 이걸 고칠 수 있도록 만들었습니다 IDE가 밑줄 그은 게 보이시죠 이건 피해야 하는 것이라고 지적해주는 겁니다 코틀린에서는 변경 불가능성을 강요하진 않지만 권장하고는 있습니다 모든 목록같은 것은 기본값으로 변경할 수 없죠 따라서 코틀린에서는 널을 할당할 수 없습니다 코틀린은 널 포인터 예외를 없애려고 하기 때문이죠 타입은 기본값으로 널이 될 수 없다고 하면서 말이죠 하지만 어떤 이유에서 널이 될 수 있는 타입이 있길 바랄 때도 있죠 지루할 때 말이죠 물음표를 추가하시면 되고 그러면 그런 타입에 널을 할당할 수 있는 기능을 줄 겁니다 보통 코틀린으로 작업하실 때 이걸 필요없을 수도 있죠 널이 될 수 있는 타입은 필요 없을 수도 있지만 자바와 인터롭하고 있으고 자바는 널이 될 수 있으니 말이죠 예컨대 이런 기능을 만든다면 fun javaMoney라고 하고 type JavaMoney의 머니를 가지고 이걸로 뭐든 하는 거죠 println moneyamount가 유효하다라고 해보죠 그럼 이건 널이 될 수 있죠 에컨대 이 타입으로 리턴하는 기능의 인스턴스로 불러진다면 널이 될 수 있죠 그리고 물음표를 추가해서 이걸 표시할 수 있죠 그렇게 하실 때 IDE가 오류를 주는 게 보이시죠 안전한 운용이라고만 하거나 느낌표 두 개가 유효하다고 하는 거죠 왜냐하면 이는 근본적으로 널 참조 예외와 부딪히게 될 것이라고 말하는 것이기 때문이죠 이를 해결하는 데에는 2가지 방법이 있습니다 먼저 예컨대 머니 널이 아니다고 할 수 있죠 그런 후 널이 아니면 운용하라고 할 수 있죠 이걸 위로 올리겠습니다 좋습니다 그게 하나의 방법이고 혹은 더 짧은 방식은 그냥 안전 운용이나 Elvis 운용을 쓰는 거죠 그건 여기 있죠 이제 그저 머니가 널이 아니면 뭔가를 하라고 할 수 있는 겁니다 기능을 원하면 그것도 가능합니다 널인 걸 알지만 그냥 자승자박하고 싶다는 의미죠 아셨죠? 여기서 조심하셔야 합니다 많은 경우 코틀린을 시작할 때 여기 작은 물결 표시가 있으니 이렇게 생각하기 쉽죠 널이 될 건지 사실 잘 모르겠어 널이 아니길 원하니까 그냥 널이 아닌 사례는 그냥 다루지 않고 그냥 이대로 해야지 그러다 앱을 실행하고는 이러시겠죠, 잠깐 코틀린은 널 참조 예외를 없앤다고 했는데 그렇죠 좋습니다 또 뭐가 있죠 그렇죠 다른 문제로 넘어가죠 고등 기능으로 말이죠 고등 기능과 다들 친숙하실 겁니다 기본적으로 기능을 가지고 혹은 기능을 리턴하는 기능으로 코틀린에도 있습니다 findEmails users 사용자 목록이라고 하면 되죠 그러고는 새 기능을 만들죠, 즉 서술어이고 여기 기능을 넘기고 있죠 문자열을 가지고 부리언을 리턴하는 기능입니다 됐죠? 그러면 이건 아마 사용자 목록을 리턴하겠죠 근본적으로 제가 하는 건 사용자 목록을 거르는 겁니다 좋습니다 이건 나중에 하죠 TODO "Later" 좋습니다 이 TODO는 내장되어 있습니다 실행되지 않은 예외 대신 이걸 쓰셔도 됩니다 오늘 다루지는 않겠지만 다른 것을 할 겁니다 Nothing은 코틀린에서 정말 좋은데 지금은 다루지 않겠습니다 걱정할 건 없죠 방금 지어냈습니다 좋아요 감사합니다 그럼 이걸 어떻게 쓸까요? findEmails를 할 수 있습니다 사실 사용자가 있으니 사용자가 만들도록 하죠 usersFromJSONFile라고 하고 여기 사용자가 있으니 usersjson이라고 하고 이는 사실 제가 이미 가지고 있는 기능이고 기본적으로 json을 이용해 파일에서 사용자를 읽어 냅니다 그리고 이건 여러분이 이미 본 적 있는 전형적인 데이터 클래스입니다 유일하게 새로운 점은 속성 역할을 가진 enum 클래스 또한 있다는 거죠 아셨죠? 이제 사용자라고 쓰면 되고 그럼 그 기능을 넘길 겁니다 이제 이름 기능을 넘길 수 있죠 컬럼 컬럼 참조를 사용하거나 lambda를 넘길 수도 있죠 코틀린에서 lamda는 이러한 신택스를 따릅니다 파라미터 이름을 넘기고 예컨대 파라미터 이름이 rightcom으로 끝난다고 하는 거죠 이제 com으로 끝나는 사용자 목록을 받게 되는 겁니다 코틀린에서 단일 파라미터가 있을 때 사실 외현적으로 언급하지 않도록 정해서 it으로 대처할 수 있습니다 Groovy와 유사하게 그냥 it을 쓰시면 됩니다 코틀린에서 할 수 있는 또 하나는 기능으로의 마지막 파라미터가 또 다른 기능일 때 실제로 괄호에 넣지 않아도 됩니다 약간 바깥에 있는 느낌이 들죠 다시 한번 말하지만 이건 좋은 DSL을 만들도록 해주는 특징 중 하나이고 여러 라인으로 할 수도 있습니다 이제 findEmails를 보시면 어떤 면에서는 언어의 일부인 것처럼 느껴질 수도 있지만 사실 그게 아니라 기능인 겁니다 그리고 비동기식 프로그래밍을 코루틴으로 실행했을 때 별로 였습니다 C#과 익숙하시다면 C#는 동기화한 후 기다리면 언어에서 키워드가 있죠 코틀린에는 없습니다 그냥 기능일 뿐이죠 따라서 여러분에게 다양한 것을 어떻게 할지 결정하는 데에 있어 융통성을 주는 겁니다 이 모든 것을 하실 필요는 없습니다 이 모든 것이 내장되어 있기 때문이죠 예컨대 dotComUsers라고 하면 users

filter라고 했을 때 보시다시피 이걸 완성하니 파라미터에서 포함 버전을 실제로 선택하는 거죠 emailendsWith com이라고 하면 되겠죠 itid로 분류하기로 하면 되죠 그러고 나서 이렇게 해보죠 itemail과 it

username 쌍으로 맵핑하기로 하면 됩니다 됐죠? 이 모든 기능은 실제로 출시된 작은 표준 라이브러리에 내장돼 있고 Android에서도 문제 없을 겁니다 아주 작습니다 그리고 모든 것은 생성 컬랙션에 확장 기능까지 가지는 겁니다 따라서 요즘 유행하는 모든 기능적인 것을 다 가지게 되는 겁니다 따라서 이건 한 쌍으로 주겠죠 사실 더 괜찮게 만들 수도 있죠 쌍으로 하는 대신 it to로 하면 말이죠 따라서 이메일에서 사용자 이름을 맵핑하죠 이게 뭘까요? 그냥 쌍을 만들어내는 infix 기능입니다 아셨죠? 전 때로 전체 맵을 다 살펴보진 않습니다 예컨대 전 단일 요소에만 돌아가고 싶은 거죠 여기서 할 수 있는 건 destructure 클래스입니다 코틀린에서 데이터 클래스이죠 id, 사용자 이름, 이메일 이렇게 할 수 있죠 그러고 나서 그냥 ID를 쓰는 거죠 이건 멋지지만 IDE가 불평하면서 이러겠죠 이 변수는 한 번도 안 쓰네 그런 경우 실제로 이걸 밑줄로 대처할 수 있습니다 그럼 된 거죠 따라서 원하는 값은 destructure하고 사용하고 싶지 않은 것은 밑줄로 대처하면 다 된 겁니다 좋습니다 또 무엇을 보여 드릴까요? 좋습니다 여기 다른 코드도 좀 있죠 산술적 데이터 개념 타입과 익숙하시다면 이건 근본적으로 이 타입이든 다른 타입이 될 수 있죠 부리언 인스턴스처럼 말이죠 코틀린에서는 하는 방법은 coclasses를 쓰는 거죠 이걸 시작하기 전에 여기를 열어 보겠습니다 보시다시피 사용자 결과가 오류를 보이고 있죠 기본값으로 코틀린에서는 클래스에서 인헤리트할 수 없기 때문이죠 따라서 모든 클래스는 근본적으로 최종입니다 클래스에서 인헤리트하고 싶다면 오픈 모디파이어를 사용해야 합니다 저는 실드를 사용했고 이 실드는 근본적으로 이건 사용자 결과가 가지는 위계질서라고 말하는 겁니다 사용자 결과에서 인헤리트 될 다른 클래스는 어디에도 없을 거라는 거죠 사용자 결과에서 인헤리트될 모든 것은 같은 파일에 있거나 혹은 물론 서브클래스로 만들어야 한다는 거죠 그럼 이걸 위로 옮기면 이건 서브클래스이겠지만 이걸 사용자 결과로 프리픽스해야 겠죠 좋습니다 전 클래스 밖으로 만들었습니다 왜 그랬을까요? 보기 좋으니까 아닙니다 이건 사실 기능을 인보크하는 경우에 좋은 겁니다 이러시겠죠, 좋아, 성공하면 값으로 리턴하길 원해 널이면 메시지로 보내야지 그러면 성공할 때 리턴하고 싶은 값이 포함된 이 타입이 있을 것이고 메시지가 있을 때 리턴하고 싶은 타입을 포함한 것도 있고 그러면 오류 상황에 적용되는 속성이 무엇인지 비오류 상황에 적용되는 속성이 무엇인지 그 시매틱을 이해해야 하고 아니면 그냥 예외로 던져버리겠죠 이 경우 두 타입을 리턴하는 기능을 사용하면 되겠죠 그러면 그 결과에 기초해 다른 것을 하는 겁니다 예를 들어 이렇게 해 보죠 인스턴트 val을 만들고 결과는 유저결과와 같고 죄송해요, retreiverusers죠 이제 when을 할 수 있죠 결과가 성공이면 예컨대 이렇게 할 수 있겠죠 결과를 받을 것이고 그런 후 users ForEach printin 이름을 하면 되죠 됐죠? 사용자이름 그러고 나서 실패를 해야죠 Result println resultmessage 됐죠? 그럼 이제 결과에 근거해서 즉 리턴되는 타입에 기초해서 다양한 것을 할 수 있죠 여기 하나 보이는 건 이것이 녹색이 됐다는 거죠 큰 화면에서 보이시는지는 모르겠지만 이것이 녹색이 됐습니다 이건 스마트 캐스트입니다 이것이 코틀린에 있는 또 다른 겁니다 제가 널 확인을 하고 있을 때 보였죠 스마트 캐스팅이기 때문에 이건 널이 아니라고 알려주는 거죠 외현적으로 다시 와서 이렇게 말하지 않으셔도 됩니다 이건 타입 성공인 걸 아니 가서 타입 석세스라고 캐스트하고 속성에 접근하라고 말이죠 컴파일러가 대신 해 줄 겁니다 그게 스마트 캐스팅이죠 좋습니다 안드레이에게 넘기기 전 마지막으로 중요한 것은 그냥 빨리 언급할 내용은 여러분이 보고 계신 필터 맵 같은 이 많은 것이 근본적으로 열정적인 평가입니다 하지만 또한 게으른 평가를 하는 능력도 있습니다 예컨대 val을 할 때 죄송합니다, generateSequence 그러고 나서 예컨대 1이라고 하고 그럼 여기 it 곱하기 10이라고 하고 나서 values를 하겠죠 이제 valuestake(10)이라고 하고 forEach println it라고 하는 거죠 이제 이건 시퀀스를 만드는 겁니다 무제한의 발전기이죠 절대 멈추지 않을 겁니다 1에서 시작해서 10배로 되는 거죠 하지만 제가 하는 얘기는 10개의 요소만 가지고 프린트하고 싶다는 거죠 기본적으로 이건 10에 도달할 때까지 소비하고 프린트하죠, 이건 필요 없고 아룸다은 크리스마스 트리를 프린트했습니다 한쪽으로 치우쳤죠 피라미드든 뭐든 여기서 멈추죠 여러분이 가진 어떤 것이든 예컨대 저희가 가진 사용자들 usersJson에서 온 사용자들은 asSequence로 해서 게으른 평가로 바꿀 수도 있는 거죠 됐죠? 오늘 시간은 이게 다입니다 분명 언어가 훨씬 더 많죠 온라인에 가셔서 많이 배우세요 감사합니다 안드레이에게 넘기겠습니다 감사합니다, 하디 안녕하세요 보셨듯 코틀린은 이미 많은 것을 가지고 있지만 전 현존하는 것을 배우기 전에 새로운 미래를 추가하는 못된 사람이죠 이제 이야기를 들려 드릴텐데 클리커를 먼저 찾아야겠습니다 클리커 있나요? 없군요, 알겠습니다 그럼 클리커 없이 이야기를 하도록 하죠 제가 오늘 할 일은 코틀린의 미래 버전에서 어떤 기능을 가질지에 대해 이야기하는 겁니다 감사합니다 지금 저희가 일하고 있는 첫 번째 큰 것은 플랫폼으로 다양한 플랫폼을 지원합니다 역사적으로 코틀린은 JVM 바이트코드로 컴파일 되죠 자바 프로그래밍 언어와 마찬가지입니다 데스크탑에서 서버를 실행할 수 있고 물론 Android에서도 할 수 있죠 그리고 어디든 같은 바이트코드입니다 그래서 새 버전뿐 아니라 예전 버전의 Android에서도 실행될 수 있죠 하지만 이 이야기는 여기서 끝나지 않습니다 새 플랫폼을 추가하기 때문이죠 최근에 저희는 추가했는데 신이 플랫폼을 좋아하지 않나 봅니다 최근에 자바스크립트를 추가했습니다 이는 코틀린이 이제 자바스크립트 코드를 컴파일할 수 있고 브라우저나 nodejs에서 실행될 수 있다는 거죠 이제 저희는 세 가지 주요한 아주 인기 있는 가상 머신을 지원합니다 JVM, Android Dalvik, 그리고 JavaScript VMs이죠 하지만 가상 기계가 실용적이지 않고 이용할 수 없는 경우가 미국에 많습니다 예컨대 iOS의 경우 가상 기계가 굉장히 제한적입니다 다이나믹 코드 생성을 할 수 없고 작은 임베디드 시스템의 경우 VM이 맞지 않죠 혹은 리눅스 명령 라인 도구의 경우 VM은 너무 오랫동안 시작하는 도구가 될 겁니다 따라서 이건 좀 곤란합니다 그래서 저희는 코틀린 네이티브라는 것을 만들고 있죠 현재 기술 미리보기로 사용 가능 합니다 저희는 LVM을 이용해 코틀린을 네이티브 코드로 컴파일하려고 노력 중이고 다양한 플랫폼에서 실행될 수 있는 독립적인 바이너리이죠 현재 iOS, Linux, Mac을 지원하고 윈도우는 작업 중입니다 따라서 이는 코틀린에 대한 비전으로 우리를 데려가 주고 이는 현대 애플리케이션의 모든 컴포넌트 안에서 원하는 플랫폼 상에서 실행될 수 있을 것이라는 거죠 많은 웹 애플리케이션이 서버와 고객 모두 코틀린으로 쓰여졌다고 생각해 보세요 혹은 예컨대 Android와 iOS 같은 모바일 플랫폼 사이에 코드를 재활용하는 것을 생각해 보세요 혹은 이전 사용 사례 두 가지를 섞어서 실제 멀티플랫폼 시나리오를 얻는다고 생각해 보세요 따라서 코틀린에 대한 우리의 비전은 한 프로젝트에서 다양한 모델이 다른 플랫폼으로 컴파일되는 겁니다 물론 코드도 공유하고 싶겠죠 다양한 많은 것을 지원한다면 다른 곳에서 같은 코드를 실행하고 싶을 겁니다 이것이 가능해지도록 저희는 노력 중입니다 하지만 아주 중요한 것이 있습니다 이전에 많은 프로젝트들은 플랫폼을 획일화하기 위해 노력해왔기 때문이죠 이는 종종 정말 다른 공통 분모로 끝나곤 했습니다 모든 플랫폼에서 이용할 수 있는 것만 가지고 하면 기본적으로 최소한의 인터페이스에 갖히는 거죠 그리고 저희는 그것을 원하지는 않습니다 저희는 여러분이 각 플랫폼에 맞춘 멋진 API를 사용할 수 있길 바랍니다 예컨대 가장 최신 버전의 Android 같은 것이나 여러분이 원하는 다른 것을 말이죠 코드를 공유하고 싶으시면 그때서야 공통된 API에 마지못해 의존해야겠죠 따라서 다양한 사업 원리 등을 가진 공통된 모델이 있고 코틀린으로도 쓰여진 각 플랫폼에 맞춰진 모형이 동시에 작동한다는 거죠 또한 이 둘은 서로 소통할 수 있습니다 따라서 필요할 때 플랫폼 API를 이용하면 되고 필요할 때 코틀린 코드를 사용해도 되는 거죠 따라서 요점은 우리의 미래는 멀티플랫폼이라는 겁니다 다음 다음 큰 부분은 coroutine입니다 원리는 이해하기 쉽습니다 모든 사람이 비동기식 코드를 써야 한다는 거죠 이 세상은 순차적인 실행을 하기엔 이제 너무 크기 때문이죠 이게 저희 현실이지만 힘들죠 비동기식 코드 써 보신 분 있나요? 꽤 많이 손을 드셨죠 이를 하지 않으신 분은 실제로 가까운 미래에 하게 되실 겁니다 문제는 순차적 코드를 쓰기가 실제로 어렵다는 거죠 혹은 여러분을 지원하는 언어를 배우기 전에 힘들었죠, 왜냐하면 언어는 상당히 도움을 줄 수 있기 때문이죠

기본적으로 코틀린에서 coroutine으로 하는 것은 동기식 코드를 쓰는 것과 같은 방식으로 비동기식 코드를 쓰는 겁니다 동기식 코드에서 뭘 사용하시죠? 루프, if, 브레이크와 컨티뉴 이런 것이죠? coroutine에서 비동기식 코드를 위해 여러분이 사용하는 것도 같은 겁니다 그래서 언어가 모든 것을 추적할 수 있고 여러분의 코드에 동기식 컴퓨터 사용을 위한 복잡한 통제를 표현하지 않아도 되는 거죠 콜백도 없고 근사한 기능 구조도 없죠 그냥 평범한 오래된 순차적으로 보이는 코드일 뿐입니다 멋지지 않나요? 감사합니다 coroutines에 대한 아이디어는 기본적으로 비동기식과 동기식에 대해 같은 추상화를 가진다는 것이죠 또한 스레드가 거의 없다고 생각하셔도 좋은 비유가 되겠죠 여기 코드 예시만 보여드리겠습니다 전통적으로 스레드로 해왔던 아주 많은 것들이 coroutine으로 가능하지만 coroutine은 굉장히 저렴합니다 슬라이드에 십만 개의 coroutine을 만드는 코드가 있습니다 생각해 보세요 평행으로 존재하는 십만 개의 coroutine과 각각이 1초 동안 기다리면서 리턴한다고 말이죠 따라서 이 프로그램은 1초 내에 완성됩니다 거의 1초이고 이는 물론 모든 coroutine이 동시에 기다리기 때문이죠 하지만 이걸 스레드로 하려고 하면 안될 겁니다 십만 개의 스레드는 메모리에 맞지 않죠 바로 그겁니다 따라서 coroutine으로 윈윈 상황이 된 겁니다 성능도 많고 굉장히 효율적이며 코드도 간단하죠 따라서 요점은 coroutine을 확인해 보시라는 겁니다 우리의 미래는 현재보다 훨씬 더 비가동식일 가능성이 높으니까 말이죠 이제 발표는 거의 끝났고 코틀린에 대해 더 배우고 싶으시면 웹사이트를 확인해 보세요 Android를 위한 섹션이 있습니다 또한 이 발표 바로 다음에 질의응답 시간이 있으니 섹션 C의 개발자 샌드박스로 오세요 저와 한디가 질문에 대답하고 있을 겁니다 와주셔서 감사합니다

How to Deal with Problems When Migrating from Kotlin Android Studio Project to AndroidX (2019)

좋습니다, 그래서 이것은 후속 비디오입니다 내 이전 비디오로 Android Studio 프로젝트를 Android X로 마이그레이션하십시오

이것은 코 틀린 스에게 특유한 것입니다 나는 몇몇 함정에 대해서 이야기 할 것이다 전환 할 때 발생할 수있는 문제 안드로이드 X에 Kotlin 안드로이드 스튜디오 프로젝트 먼저 첫 번째 비디오를 확인하십시오 내가 몇 가지 것들을 마이그레이션을 수행해야합니다

하지만 그걸 본 후에, 여기 와서 이걸 보렴 나머지 단계를 거치도록하겠습니다 희망을 갖고 Kotlin 프로젝트를 시작하도록 그것을 변환하고 나중에 Android X로 이전합니다 시작합시다 (낙관적 인 하우스 음악) 본 적이 없다면 이 시리즈의 이전 비디오 이걸보기 전에 할 수 있습니다

이 동영상에서 몇 가지 문제를 보여 드리겠습니다 Android X를 사용하도록 코드를 마이그레이션 할 때 발생할 수 있습니다 그러나, 나는 토론하지 않을 것이다 마이그레이션 프로세스 자체를 자세히 설명하고, 그것은 이전 비디오에 있습니다 이제 화면에 해당 동영상에 대한 링크가 있습니다

이 동영상에 대한 설명에도 나와 있습니다 그리고 계속해서 우리는 이주 할 Kotlin 프로젝트를 가지고 있습니다 그럼 언제 어떻게되는지 봅시다 Android X를 사용하도록 이전합니다 그래서 저는 리팩토링 메뉴에 올 것입니다

Android X로 이전을 선택하겠습니다 이걸 염두에두면 화면에 표시하고있다 Android Studio의 경우 실행중인 경우 Android Studio 33 이제 내가 할 일은 도구를 사용하여 백업 zip 파일을 만든 다음 더블 팩터를 클릭 할거야 위의 폴더에 그 파일을 넣을 것입니다

현재 프로젝트 그래서 아무 방법도 없다 이 프로젝트에 추가됩니다 나는 지금 내가 가진 것을 대체 할 것이다

그리고 실제로 사용법을 스캔하고 있음을 알 수 있습니다 무엇이 업데이트되어야하는지 리팩토링 프로세스를 수행합니다 나는 또한 마지막 비디오에서 언급했다 다음과 같은 대화 상자가 나타날 수 있습니다 변화가 감지되었음을 보여 주거나 말하기

이 대화를 듣는다면, 재방송 검색 버튼을 클릭하십시오 그래도 그 순간 이상하게 행동합니다 아마도 두 번째 리팩토링 검토 창, 미리보기 창 말하지만 리팩토링 버튼은 없습니다 그 경우에는 창을 클릭하고 리팩토링 버튼을, 원래의 창에서, 하지만 제 경우에는 그 중 아무 것도 나오지 않았습니다 알았어, 이제 리팩토링 도구를 클릭 할거야

그리고 끝내려면 시간이 걸릴거야 통과하고 알아 내기 때문에 무엇이 업데이트되어야하는지, 그리고 실제로 적절한 구성 요소를 다운로드하려고합니다 완료되면 우리는 실제로 바뀐 것을 확인하려고합니다 좋아, 이제 끝내자 그래서 제일 먼저 우리가 할거야, 우린 갈거야

모듈의 빌드 도트 그라디언트 파일을 확인하십시오 그래서 저는 Gradle 스크립트로갑니다 모듈 앱을 살펴보십시오 우리가 만든 gradle 파일 아래로 스크롤하여 살펴 본다면 여기에 꽤 오래된 버전이 있습니다

우리는이 모든 버전들이 이제 새로운 버전을 사용할 수있게되었습니다 기본적으로 Android X는 빠르게 변화하고 있습니다 그 순간에 우리는 각 라이브러리의 릴리스 버전 그때 나는 이것을 쏘고있다 전구 몇 개를 클릭하면됩니다 이 첫 번째 항목을 제외한 모든 항목이 실제로 변경됩니다

그리고 내가 이것을 처음으로하지 않을 이유는 이 버전 번호를 별도로 정의하기 때문에, Android Studio는이를 변경하는 옵션을 제공하지 않습니다 그러나 나는 다른 모든 것들을 모두 통과 할 수있다 그리고 지금 할거야 그래서 저는 이것들 각각을 선택할 것입니다 그리고 변화

그리고 분명히 이것을함으로써 프로젝트를 다시 동기화해야합니다 나는이 모든 것을 끝내고 다 할 것입니다 알았어 그래서 나는 그 모든 것을 바꾸었다 내가 언급했던 그 첫번째 입구 이외의

그리고 지금 다시 동기화해야합니다 또는 지금 동기화를 클릭하여 동기화 할 수 있습니다 그러면 프로젝트가 다시 동기화됩니다 끝나면 볼 수 있습니다 그것의 각종 파일을 지금 다운로드하는, 화면 하단의 상태 표시 줄에 완료되면 우리는 모양을 가지고 어떤 문제가 발생했는지 확인하십시오

그리고 일반적으로 당신이 이것을 할 때 그것은 좋은 것입니다 프로젝트의 모든 파일을 검토하는 아이디어, 문제를 확인하십시오 하지만 지금 내가 말할 두 가지 주요한 것들은, 이 작업이 아직 완료되면 현재 사용하지 않은 수입입니다 잘못된 재정의뿐만 아니라 이 작업을 마무리하고 우리는 다시 와서 그것을 통해 갈 것입니다 알았어, 이제는 그레고리를 볼 수있어

프로젝트 빌드, 빌드가 완료되었습니다 방금 경고를 받았습니다 우리가 떠날거야, 우리는 그걸 바꾸려하지 않을거야 우리가 원하는 경우 수동으로 입력 할 수 있습니다 사실, 내가 왜 그렇게하지 않겠습니까? 수명주기 버전을 검토하고 변경하십시오

210 대시 알파 21 대시 0 대시

알파 2 그냥 해보고 다시 동기화하겠습니다 그냥 우리는 다른 경고가 없다 우리의 빌드 gradle 파일 좋아, 이제 너에게 보여주고 싶어

소개 될 오류 중 그래서 첫 번째가 열릴거야 일부 Kotlin 코드 및이 프로젝트에서 첫 번째 것은 날짜 선택기 조각입니다 클래스에서 살펴 보겠습니다 그리고 우리가 여기에있는 오류를 살펴 본다면, 우리가 그 위에 마우스를 가져 가면 볼 수 있습니다 첨부는 아무것도 무시합니다

그리고 그 이유는 서명은 Android X 코드에서 변경되었습니다 그래서 여기 52 행에서 컨텍스트 매개 변수 이 nullable 컨텍스트를 선언하십시오 Java에는 null 허용되지 않는 유형이 없습니다 하지만 Google은 주석을 추가하고 있습니다 Kotlin이 알 수 있도록 Android 프레임 워크 코드 일부 기능은 null 인수로 불려 갔다

그리고 그것은 실제로 여기서 일어난 일입니다 그리고 컨트롤이나 명령으로 볼 수 있습니다 슈퍼 첨부 기능을 54 번 라인에서 클릭하십시오 그래서 그렇게 할거야 우리는 지금 소스 코드를보고 있습니다

그리고 310 행에서 볼 수 있습니다 컨텍스트 매개 변수가 표시됩니다 그 주석을 사용해 null가 아닌 경우, 그래서 그것을 고치는 것은 매우 쉽습니다 우리가 할 수있는 것은 돌아온 것뿐입니다 매개 변수 유형에서 물음표를 제거하십시오

사용 된 컨텍스트 인수 함수 내부 및 nullable 유형 마커, 내가 한 것처럼, 이제 우리에게 경고를 주었고 그것은 불필요한 것입니다 안전한 전화 교환 원, 여기 57 번 줄에 있습니다 Android X 라이브러리는 Google이 있기 때문에 Kotlin에서 사용 이러한 null이 아닌 주석을 추가합니다 안전 호출 연산자를 그렇게 많이 사용할 필요는 없습니다 지금 기능을 무시할 때

내가 할 일은 그 안전한 전화를 지우는 것이다 우리는 다음 문제가 무엇인지 알게 될 것입니다 이제 우리는 중복 된 것을 볼 수 있습니다 to 문자열을 호출하십시오 내가 보여줄 수있는 예제가 필요했다

Android X가 코드를 변경하는 방식 하지만 그 라인은 현재 일을 마쳤고 따라서 to 문자열 함수 호출을 삭제할 수 있습니다 그래서 나는 그것을 할거야, 난 그냥 갈거야 달러 문맥에서 벗어나이 코드의 나머지 부분을 삭제하십시오 권리 좋아, 그 수업을 고쳤어

내가 바라는 다음 일은 커서 리사이클 뷰 어댑터 클래스 이제 가져 오기 섹션에서 찾을 수 있습니다 사용하지 않은 가져 오기가 실제로 표시됩니다 내 경우에는 그다지 올랐지 만 그것은 당신을 위해 올지도 모릅니다 그러나 문제는 완전한 자격으로 인해서 온다

마이그레이션 프로세스가 실제로 채택한 이름 예를 들어 17 행에서 볼 수 있습니다 안드로이드 X dot recycler보기 도트 위젯 이것은 리사이틀 뷰의 정규화 된 이름입니다 그래서 나는 그것을 제거 할 것입니다 그리고 수입을 받아 들일 것입니다

알았어 그래서 내가 실제로 고쳤다 다시 돌아가서 그 코드를 그대로 되돌려 놓을 것입니다 이제 다시 이것은 특히 나쁜 문제는 아니었다 하지만 사용하지 않은 가져 오기가 표시되는 경우 아마 당신이 고치기를 원할지도 모르는 사소한 성가심, 내 경우에는 실제로는 그렇지 않지만 거기에서 보았 듯이 완전한 경로 이름을 사용하십시오

그래서 우리가 해낸 것은 우리가했습니다 그 정규화 된 이름을 제거했습니다 Android X를 검색 할 것입니다 그리고 나는 다른 것들도 제거 할 것입니다 41 번 줄에 하나 더 있습니다

보시다시피 나는 그것을 제거 할 것입니다 나는 기본적으로 수색을 할 것이다 이제 그게 전부입니다 알았어 그래서 나는 그 두 가지를 바로 잡았다

이제 다른 예제를 살펴보면, 우리는 우리 프로젝트로 돌아갈 것이다 우리의 기간 보고서를보십시오 이제 당신은 아마도 거기에서 잠깐 보았을 것입니다 사용되지 않은 수입이있었습니다 실제로 나타나지 않는 이유는 내 취향에 있기 때문에

일반적으로 자동 가져 오기입니다 즉시 최적화 된 가져 오기가 있습니다 따라서 실제로 사용되지 않는 수입품은 숨어 있습니다

하지만 기본적으로 여전히 같은 것을 사용하고 있습니다 또는 그것은 그 정규화 된 이름과 동일한 이슈입니다 그리고 나는 그것을 사용하지 않는 것이 더 좋다고 생각한다 그 정규화 된 이름 우리가 할 수있는 일은 Android X를 검색하면됩니다

거기에 또 하나가 있다는 것을 알 수 있습니다 우리는 이것을 리니어 매니저로 대체 할 수 있습니다 나는 지금 모든 것을 통과하지는 않을 것이다 좋아, 다른 것도있어 기본적으로 더 많이 같습니다

그래서 나는 그 이상을 고치지 않을 것입니다 하지만 몇 가지 다른 문제가 있습니다 그 앱이 현재 실행되는 것을 막을 것입니다 첫 번째 관심을 끌고 싶습니다 주요 활동 클래스입니다

여기에 오류가 있습니다 기본적으로 우리는 번들을 변경해야합니다 물음표를 null이 아닌 유형 번들에 추가 그래서 우리는 단지 물음표를 제거 할 것입니다 그리고 그 오류를 수정합니다 그리고 주요 활동 단편

같은 문제가 있습니다 기본적으로 이전에 본 컨텍스트와 함께, nullable이 아닌 유형을 다시 제거 할 것입니다 중복 문자열 호출을 수정하려고합니다

좋아, 그거 좋은데 따라서 이러한 문제를 볼 수 있습니다 찾기 쉽고 수정하기 쉽습니다 그리고 앱을 실행하기 전에 앱이 여전히 작동하는지 확인하기 전에 나는 경고로 끝낼거야 우리는 정규 자격을 변경했습니다

클래스 이름을 단순화합니다 그리고 꽤 많이 있습니다 다른 클래스의 일부에서는 논쟁의 여지가있는 단편 활동 확장 그 (것)들의 짐을 가지고있다, 그리고 그것은 분명히 위로 정리되는 것으로 할 수 있습니다 프로젝트를 진행할 때 쉽게 할 수 있습니다 이 이름을 자동으로 단순화하는 습관을 가지며, 하지만 한 가지만하면 안됩니다

레이아웃 리소스 파일에서 그래서 우리는 나의 작업 레이아웃 파일 중 하나를 열 것입니다, 리소스 레이아웃 폴더에 있습니다 그리고 이름은 우리의 임무가 기간을 강조한다는 것입니다 이제 그걸 열어 봐 그리고 내가 텍스트보기인지 확인하십시오

나는 우리 다 그리고 우리는 단지 전체 화면으로 갈 것이다 먼저 제약 레이아웃이 완전 자격을 얻었습니다 Android X 도트 제약 레이아웃 레이아웃 도트 위젯에서 가져옵니다 레이아웃을 제약하는 것을 시도하거나 단순화하지 마십시오

아니면 앱을 망칠거야 그리고이 파일의 마지막 위젯 if 우리는 아래쪽으로 스크롤 리사이클 러 뷰는 정규화 된 것입니다

당신이 볼 수 있듯이, 다시 한번 그것을 내버려 둡니다 삭제할 참조를 변경하면 패키지 이름, 앱이 다운됩니다 레이아웃을 팽창 시키려고 할 때 알았어 그걸로 끝내자

그리고 앱이 제대로 작동하는지 확인해 봅시다 그리고 실제로 우리는 하나를 볼 수 있습니다 내가 고칠 필요가있는 다른 것, 아무 것도하지 않는 on attach override 그래서 나는 그것을 두 번 클릭 할 것이다 우리가 이전에 보았던 것과 같은 거기의 거래, null 허용되지 않는 유형을 없애고, 그로 인해 문제가 해결됩니다

그리고 우리는 그것을 다시 시도 할 것입니다 좋아, 우리는 그 다른 경고들을 무시할 것이다 지금은 화면 하단에 그러나 당신은이 시점에서 볼 수 있습니다 메인 화면이로드되고, 눈 모양 아이콘, 도구 모음 또는 도구 모음에서 탭하면, 보고서 화면을 볼 수 있습니다 이제 앱에 데이터가 없으므로 보고서가 비어 있습니다

하지만 우리는 적어도 그것이로드되고 있음을 알고 있습니다 메인 화면으로 돌아갈 수 있습니다 그리고 나는 또한 about 대화를 클릭 할 수 있습니다 확장 메뉴에서 그래서 잘 작동합니다

이제 분명히이 앱을 넣어야합니다 완전한 테스트 사이클을 통해, 앱에서 사용하는 라이브러리 변경 주요 변경 사항이며 테스트해야합니다 이후 앱을 철저히 우리는 분명히이 비디오에서 그렇게하지 않았습니다 좋아, 그게 프로젝트 야 마이그레이션 및 철저한 테스트 준비 및 미래 발달

알았어, 지켜봐 줘서 고마워, 질문이 있으면 의견을 남기십시오 네가 다음에 준비가 되었다면 프로그래밍 관련 비디오, 클릭 왼쪽 상단 모서리에있는 여기 링크 비 코딩을 보는 화면 프로그래밍 관련 질문, 왼쪽 하단에있는 링크를 클릭하십시오 화면을 자유롭게 구독 할 수 있습니다 여기에있는 링크를 클릭하면 다른 비디오에서 보자

Kotlin Android 高效開發:全新語言雲端世代

안녕, 모두 행크 야 이 과정은 Kotlin 안드로이드 APP의 개발 능력 Kotlin은 현재 가장 인기있는 프로그래밍 언어입니다

최신 Android 9을 코스에서 사용하십시오 Android Studio 3 개발 도구 2019 년은 안드로이드가 될 것입니다 개발 경쟁력의 경쟁력 Google IO 컨퍼런스에서 발표되었습니다 Kotlin은 Android 개발자가되었습니다 주요 공식 프로그래밍 언어 개최지의 박수 갈채 Kotlin이 얼마나 인기가 있는지 확인하십시오

개발자에게 사랑받는 2018 년 Kotlin을 사용하는 개발자 수 전년도 배율 코드의 거의 40 %를 줄일 수 있습니다 보다 간결하고 안전한 내 과정은 항상 직장을 목표로하고있다 효과적인 학습 방법 및 경로 설계 소프트웨어 분야에 진출하는 능력을 얻으려면 경쟁력 강화 그냥보고, 설명해 그 효과는 매우 제한되어있다 처음부터 끝까지 구현 능력 코스의 초점인가? 첫 번째 Android APP 효율적인 항목 온라인 과정 포괄적 인 5 성급 등급 획득 내 육체적 인 과정에는 수천 명의 산업 학생들이 있습니다

이유를 쓰는 방법을 알아라 처음부터 끝까지 만드는 법 아이디어를 APP로 구현합니다 성취감은 상상 이상입니다 우리와 함께 Zha Shi의 개발 역량을 함양합니다 앞 가장자리 만들기

Persist Date on DatePicker in Android using Android Studio – Kotlin

안녕하세요, CodeAndroid의 Vignesh 이 비디오에서는 datepicker에서 선택한 날짜를 유지하는 방법을 볼 것입니다 이것을 증명하기 위해 이미 프로젝트를 만들었습니다

레이아웃 파일에는 두 개의 버튼이 있습니다 btn_date 및 btn_time btn_date의 on-click, 나는 datepicker를 보여주고있다 btn_time의 on-click, 나는 timepicker를 보여주고있다 datepicker에서 오늘 다른 날짜를 선택하면 그러면 날짜가 여기에 올거야 하지만 문제는 버튼을 다시 클릭하면 오늘 날짜로 재설정됩니다

datepicker를 표시하기 위해 지금의 달력 객체를 사용하기 때문에 이 객체는 이제 onCreate ()에서 초기화됩니다 이것이이 가치가 전혀 변하지 않는 이유입니다 날짜를 23으로 선택하면 선택한 날짜 인 23을 유지하면서 날짜 표시기가 표시됩니다 그것을하는 방법을 볼 것이다 selectedDate 객체를 사용하는 대신이를 수행합니다 우리는 now 객체 자체를 사용할 필요가있다

그것이 날짜를 유지하는 가장 쉬운 방법입니다 나는 지금도 같은 시간에 객체를 사용하고있다 그래서 날짜와 시간은 같은 달력 객체를 사용할 것입니다 서버에 데이터를 보내야 할 때 now 객체를 사용하여 적절한 날짜를 생성 할 수 있습니다 애플리케이션을 실행 해 봅시다

너는 볼 수있다, 데이트는 13 시가 보이고 시간은 09:20에 나타난다 날짜를 21로 바꾸자 시간은 08:20 지금,이 btn_date를 클릭하면 기본적으로 21 feb를 선택해야합니다 너는 그것의 21 feb을 선택하는 것을 볼 수있다 similaryly, 시간은 08:20을 보이고 있습니다

기본적으로 08:20을 선택해야합니다 이처럼 우리는 datepicker와 timepicker에 데이터를 유지할 수 있습니다 그게 비디오 녀석들을위한 전부 야 나를지지하기를 원한다면 patreoncom/CodeAndroid에서 후원이되어 그렇게 할 수 있습니다

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