Kotlin

Studying/Kotlin

[Kotlin In Action] 6장. 코틀린 타입 시스템(4) - 컬렉션과 배열

✅ 컬렉션과 배열 코틀린 컬렉션이 자바 라이브러리를 바탕으로 만들어졌고 확장 함수를 통해 추가할 수 있다는 것을 배웠다. 이 외에 코틀린의 컬렉션 지원과 자바와 코틀린 컬렉션 간의 관계에 대해 더 살펴보도록 하자. 📌 널 가능성과 컬렉션 컬렉션 안에 널 값을 넣을 수 있는지 여부는 어떤 변수의 값이 널이 될 수 있는지 여부와 마찬가지로 중요하다. 변수 타입 뒤에 ?를 붙이면 그 변수에 널을 저장할 수 있다는 뜻인 것처럼 타입 인자로 쓰인 타입에도 같은 표시를 사용할 수 있다. fun addValidNumbers(numbers: List) { var sumOfValidNumbers = 0 var invalidNumbers = 0 for (number in numbers) { // 리스트에서 널이 될 수 있..

Studying/Kotlin

[Kotlin In Action] 6장. 코틀린 타입 시스템(3) - 코틀린의 원시 타입

✅ 코틀린의 원시 타입 이번 절에서는 프로그램에서 사용하는 Int, Boolean, Any 등의 원시 타입에 대해 살펴본다. 코틀린은 원시 타입과 래퍼 타입을 구분하지 않는 이유와 코틀린 내부에서 어떻게 원시 타입에 대한 래핑이 작동하는지 살펴본다. Object, Void 등의 자바 타입과 코틀린 타입 간의 대응 관계에 대해 살펴본다. 📌 원시 타입 : Int, Boolean 등 자바는 원시 타입과 참조 타입을 구분한다. 원시 타입의 변수에는 그 값이 직접 들어가지만 참조 타입의 변수에는 메모리상의 객체 위치가 들어간다. 코틀린은 원시 타입과 참조 타입을 구분하지 않아 항상 같은 타입을 사용한다. 자바에서는 원시 타입이 있지만 참조 타입이 필요한 경우 특별한 래퍼 타입으로 (ex. Integer) 원시 ..

Studying/Kotlin

[Kotlin In Action] 6장. 코틀린 타입 시스템(2) - 널 가능성[2]

널 가능성[1]의 내용과 이어집니다. [Kotlin In Aciton] 6장. 코틀린 타입 시스템(1) - 널 가능성[1] ✅ 널 가능성 널 가능성(nullability)은 NullPointer Exception(NPE)를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성이다. 코틀린을 비롯한 최신 언어에서 null에 대한 접근 방법은 가능한 한 이 문제를 dahoonkk.tistory.com 📌 let 함수 let 함수를 사용하면 널이 될 수 있는 식을 더 쉽게 다룰 수 있다. let 함수를 안전한 호출 연산자(?.)와 함께 사용하는 경우 식을 평가해서 결과가 널인지 검사한 다음 그 결과를 변수에 넣는 작업을 간단한 식을 통해 한꺼번에 처리할 수 있다. 가장 흔한 용례 : 널이 될 수 있는 값을 널이..

Studying/Kotlin

[Kotlin In Aciton] 6장. 코틀린 타입 시스템(1) - 널 가능성[1]

✅ 널 가능성 널 가능성(nullability)은 NullPointer Exception(NPE)를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성이다. 코틀린을 비롯한 최신 언어에서 null에 대한 접근 방법은 가능한 한 이 문제를 실행 시점에서 컴파일 시점으로 옮기는 것이다. 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 여러 가지 오류를 컴파일 시 미리 감지해 실행 시점에 발생할 수 있는 예외의 가능성을 줄일 수 있다. 📌 널이 될 수 있는 타입 널이 될 수 있는 타입은 프로그램 안의 프로퍼티나 변수에 null을 허용하게 만드는 방법이다. 어떤 변수가 널이 될 수 있다면 그 변수에 대해 메서드를 호출하면 NPE가 발생할 수 있기 때문에 안전하지 않다. 코틀린은 그런 메서드 호출..

Studying/Kotlin

[Kotlin In Action] 5장. 람다로 프로그래밍(5) - 수신 객체 지정 람다 : with와 apply

✅ 수신 객체 지정 람다 : with와 apply 코틀린에서 정의하고 있는 with와 apply 함수는 매우 편리하며 많은 사람들이 이용 중이며 이러한 코틀린 만의 람다식에는 독특한 특징이 있다. 그 기능은 바로 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 하는 것이다. 이러한 람다를 수신 객체 지정 람다라고 부른다. 수신 객체 지정 람다는 Scope Function이라고도 하며 with와 apply 외의 다른 함수에 대해 알고 싶은 경우 아래 글을 참고하기를 바란다. [Kotlin] 코틀린의 Scope Function(범위 지정 함수) ✅ 코틀린의 Scope Function이란? 코틀린 표준 라이브러리에서 제공하는 확장함수 목적 : 간결성, 명료성, 유지보수 용이..

Studying/Kotlin

[Kotlin In Action] 5장. 람다로 프로그래밍(4) - 자바 함수형 인터페이스 활용

✅ 자바 함수형 인터페이스 활용 코틀린 라이브러리와 람다를 활용하는 것도 좋지만 우리가 다뤄야 할 API 중 상당수는 코틀린이 아닌 자바로 작성되었을 가능성이 높다. 다행인 점은 코틀린 람다를 자바 API에 사용해도 아무 문제가 없다. 그렇다면 어떻게 코틀린 람다를 자바 API에 활용할 수 있을까? 📌 자바 메소드에 람다를 인자로 전달 함수형 인터페이스를 인자로 원하는 자바 메서드에 코틀린 람다를 전달할 수 있다. 예를 들면 다음 메서드는 Runnable 타입의 파라미터를 받는다. /* 자바 */ void postponeComputation(int delay, Runnable computation); /* 코틀린에서 람다를 이 함수에 넘길 수 있다. */ postponeComputation(1000) {..

Studying/Kotlin

[Kotlin In Action] 5장. 람다로 프로그래밍(3) - 지연 계산(lazy) 컬렉션 연산

✅ 지연 계산(lazy) 컬렉션 연산 [Kotlin In Action] 5장. 람다로 프로그래밍 - 컬렉션 함수형 API ✅ 컬렉션 함수형 API 함수형 프로그래밍 스타일을 사용하면 컬렉션을 다룰 때 편리함 대부분의 작업에 라이브러리 함수를 활용할 수 있으며 그로 인해 코드를 간결하게 작성할 수 있음 📌 필수 dahoonkk.tistory.com 이전 장에서 map이나 filter와 같은 몇 가지 컬렉션 함수를 살펴봤다. 이 함수들의 결과는 컬렉션을 즉시 생성한다. 이는 컬렉션 함수를 연쇄하면 매 단계마다 중간 결과를 새로운 컬렉션에 임시로 담는다는 뜻 people.map(Person::name).filter( it.startsWith("A") } 위의 코드는 연쇠 호출이 리스트를 2개 만든다는 뜻 한 ..

Studying/Android

[Android] 안드로이드 액티비티 생명주기(Activity Lifecycle)

✅ 들어가기 전에 안드로이드에서 앱의 완성도와 안정성을 높이기 위해 Activity Lifecycle은 반드시 알아야 한다. 제대로 알지 못하고 앱을 개발하게 되면 다른 앱을 전환하거나, 비정상 종료되는 문제가 발생할 수도 있다. 또한, 사용자가 앱을 사용하지 않는데 시스템 리소스가 소비되는 문제를 일으킬 수 있다. 사용자가 앱을 나갔다 돌아왔을 때, 진행상태가 저장되지 않는 문제가 발생할 수 있다. 화면이 가로 ↔️ 세로 전환될 때, 비정상 종료되거나, 진행상태가 저장되지 않는 문제가 발생할 수 있다. 이러한 여러 문제를 일으킬 수 있기 때문에 안드로이드에서 Activity Lifecycle에 대한 숙지는 필수라 할 수 있다. 그럼 이제부터 안드로이드의 Activity Lifecycle에 대해서 알아보..

Studying/Android

[Android] 안드로이드 스튜디오 Room을 사용하여 로컬 데이터베이스에 데이터 저장하기

✅ 들어가기 전에 ❗️ Room 관련 안드로이드 공식 문서 Room을 사용하여 로컬 데이터베이스에 데이터 저장 | Android 개발자 | Android Developers Room 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보기 developer.android.com 상당한 양의 구조화된 데이터를 처리하는 앱은 데이터를 로컬에 유지하여 매우 큰 이익을 얻을 수 있다. 가장 일반적인 사용 사례는 기기가 네트워크에 액세스할 수 없을 때도 사용자가 오프라인 상태로 계속 콘텐츠를 탐색할 수 있도록 관련 데이터를 캐시하는 것이다. 안드로이드에서는 위의 설명을 실현시키기 위해 Room이라는 내장 DB를 사용하는 것을 권장한다. ✅ Room이란? Room이란 쉽게 말해 스마트폰 내장 DB에 데이터를 ..

Studying/Error🤣

[Kotlin & Android] 'compileDebugJavaWithJavac' task (current target is 1.8) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version

패캠 코틀린 기반의 안드로이드 강의를 듣는 와중 Room 관련 실습을 진행 중이었다. gradle에 관련 모듈 추가하고 데이터베이스를 불러오고 저장하는 실습을 진행중이었는데 갑자기 아래와 같은 오류가 떴다. 'compileDebugJavaWithJavac' task (current target is 1.8) and 'kaptGenerateStubsDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version 아니 강의랑 똑같이 따라하고 있는데 왜 이런 오류가 나지,,?? 얼른 강의 들으면서 실습을 진행하고자 오류에 대해 검색해보기로 했다. 흠🤔 일단 찾아보니 gradle의 sour..

Studying/Kotlin

[Kotlin In Action] 5장. 람다로 프로그래밍(2) - 컬렉션 함수형 API

✅ 컬렉션 함수형 API 함수형 프로그래밍 스타일을 사용하면 컬렉션을 다룰 때 편리함 대부분의 작업에 라이브러리 함수를 활용할 수 있으며 그로 인해 코드를 간결하게 작성할 수 있음 📌 필수적인 함수 : filter와 map filter와 map은 컬렉션을 활용할 때 기반이 되는 함수로 대부분의 컬렉션 연산을 이 두 함수를 통해 표현할 수 있음 filter 함수는 컬렉션을 이터레이션하면서 주어진 람다에 각 원소를 넘겨 람다가 true를 반환하는 원소만 모음 컬렉션에서 원치 않는 원소를 제거 하지만 원소를 변환할 수는 없음 원소를 변환하기 위해서는 map 함수 사용 map 함수는 주어진 람다를 컬렉션의 각 원소에 적용한 결과를 모아서 새 컬렉션을 만듦 /* filter 예제 */ val list = list..

Studying/Kotlin

[Kotlin In Action] 5장. 람다로 프로그래밍(1) - 람다 식과 멤버 참조

람다 식 또는 람다는 기본적으로 다른 함수에 넘길 수 있는 작은 코드 조각을 뜻함 람다를 사용하면 쉽게 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있음 코틀린 표준 라이브러리는 람다를 아주 많이 사용함 ✅ 람다 식과 멤버 참조 📌 람다 소개 : 코드 블록을 함수 인자로 넘기기 "이벤트가 발생하면 이 핸들러를 실행하자" 등의 수행을 코드로 표현하려면 어떻게 해야할까? 자바에서는 무명 내부 클래스를 통해 이런 목적을 달성하였음 무명 내부 클래스를 사용하면 코드를 함수에 넘기거나 변수에 저장할 수 있기는 하지만 상당히 번거로울 수 있음 하지만 코틀린에서는 함수를 값처럼 다뤄 이러한 문제를 해결함 클래스를 선언하고 그 클래스의 인스턴스를 함수에 넘기는 대신 함수형 언어에서는 함수를 직접 다른 함수에 전달 람..

Dahoonkk
'Kotlin' 태그의 글 목록 (2 Page)