Kotlin 37

Kotlin - coroutine★

# 코루틴의 기본적인 예제 package chap02.section1 import kotlinx.coroutines.* /* 기초적인 코루틴 */ fun main() { // 메인 스레드의 문맥 GlobalScope.launch { // 새로운 코루틴을 백그라운드에서 실행 delay(1000L) // 1초의 넌블로킹 지연(시간의 기본 단위는 ms) println("world!") // 지연 후 출력 } println("Hello,") // 메인 스레드의 코루틴이 지연되는 동안 계속 실행 Thread.sleep(2000L) // 메인 스레드가 JVM에서 바로 종료되지 않게 2초 기다림 } /** * 실행 결과를 보면 "Hello,"는 메인 스레드에 의해 바로 출력됩니다. * "world!"는 코루틴 코드의..

Kotlin 2022.06.22

Kotlin - 람다식을 사용하는 표준 라이브러리★

# let() 함수 활용하기 package chap02.section1 /* let() 함수 활용하기 */ fun main() { //val score : Int? = 32 val score = null // 일반적인 null 검사 fun checkScore() { if (score != null) { println("Score : $score") } } // let 함수를 사용해 null 검사를 제거 fun checkScoreLet() { score?.let { println("Score : $it") } val str = score.let { it.toString() } println(str) } checkScore() checkScoreLet() } # also() 함수 활용하기 package ch..

Kotlin 2022.06.21

Kotlin - 클로저★

# 클로저 package chap02.section1 /* 클로저 * 람다식으로 표현된 내부 함수에서 외부 범위에 선언된 변수에 접근할 수 있는 개념 * 이때 람다식 안에 있는 외부 변수는 값을 유지하기 위해 람다식이 포획(capture)한 변수라고 부른다 * - final 변수를 포획한 경우 변수 값을 람다식과 함께 저장한다. * - final이 아닌 변수를 포획한 경우 변수를 특정 래퍼(wrapper)로 감싸서 나중에 변경하거나 읽을 수 있게 한다. * 이때 래퍼에 대한 참조를 람다식과 함께 저장한다. * */ // 클로저 테스트하기 fun main() { val calc = Calc() var result = 0 // 외부의 변수 calc.addNum(2,3) {x,y -> result = x + ..

Kotlin 2022.06.21

Kotlin - 람다식과 고차함수(review) ★

# review package chap02.section1 /*★ 람다식과 고차함수 복습하기 ★*/ fun main() { val result1 = high("Sean") { x -> inc(x + 3) } // 함수를 이용한 람다식 val result2 = high("Sean") {inc(it + 3)} // 소괄호 바깥으로 빼내고 생략 val result3 = high("Kim", ::inc) // 매개변수 없이 함수의 이름만 사용할 때 val result4 = high("Sean") {x -> x + 3} // 람다식 자체를 넘겨준 형태 val result5 = high("Sean") {it + 3} // 매개변수가 1개인 경우 생략 println(result1) println(result2) pr..

Kotlin 2022.06.21

Kotlin - 시퀀스의 활용

# 요소 값 생성하기 package chap02.section1 /* 시퀀스(Sequence) : 순차적인 컬렉션으로 요소의 크기를 특정하지 않고, 나중에 결정할 수 있는 특수한 컬렉션이다. 예를들어, 특정 파일에서 줄 단위로 읽어서 요소를 만들 때 해당 파일의 끝을 모르면 줄이 언제 끝날지 알 수 없는 경우가 있는데 이럴 때 사용할 수 있다. * */ fun main() { val nums : Sequence = generateSequence(1) { it + 1} // 시드 값 1을 시작으로 1씩 증가하는 시퀀스 정의 println(nums.take(10).toList()) // take()를 사용해 원하는 요소 개수만큼 획득하고 toList()를 사용해 List 컬렉션으로 반환 val squares..

Kotlin 2022.06.21

Kotlin - 컬렉션의 확장 함수

# 컬렉션의 연산 package chap02.section1 /* 컬렉션의 연산 */ fun main() { val list1 : List = listOf("one","two","three") val list2 : List = listOf(1,3,4) val map1 = mapOf("hi" to 1, "hello" to 2, "Goodbye" to 3) println(list1 + "four") // 문자열 값 추가 println(list2 + 1) // 정수형 값 추가 println(list2 + listOf(5,6,7)) // 리스트 병합 println(list2 - 1) // 값 제거 println(list2 - listOf(3,4,5)) // 일치하는 요소 제거 println(map1 + Pair..

Kotlin 2022.06.21

Kotlin - 배열

# 배열의 선언 및 접근 package chap02.section1 /* 배열의 선언 및 접근 */ import java.util.Arrays // 배열을 사용하기 위해 자바 표준 라이브러리 임포트 fun main() { val arr = intArrayOf(1,2,3,4,5) println("arr : ${arr.contentToString()}") // 배열의 내용을 문자열로 반환 println("size : ${arr.size}") // 배열의 크기 println("sum() : ${arr.sum()}") // 배열의 합 계산 // 게터에 의한 접근과 대괄호 연산자 표기법 println(arr.get(2)) println(arr[2]) // 세터에 의한 값의 설정 arr.set(2,7) arr[0]..

Kotlin 2022.06.20

Kotlin - 제네릭

# 제네릭 : 제네릭(Generic)은 클래스 내부에서 사용할 자료형을 나중에 인스턴스를 생성할 때 확정한다. 제네릭을 사용하면 객체의 자료형을 컴파일할 때 체크하기 떄문에 객체 자료형의 안정성을 높이고 형 변환의 번거로움이 줄어든다. 의도하지 않은 자료형의 객체를 지정하는 것을 막고 객체를 사용할 때 원래의 자료형에서 다른 자료형으로 형 변환 시 발생할 수 있는 오류를 줄인다. package chap02.section1 /* 간단한 제네릭의 예제 */ class Box(t: T) { // 형식 매개변수로 받은 인자를 name에 저장 var name = t } fun main() { val box1 : Box = Box(1) // 인스턴스 생성 시 Int형으로 자료형이 결정됨 val box2 : Box ..

Kotlin 2022.06.20