본문 바로가기

Language/Kotlin

(30)
[Kotlin] 코루틴을 통한 비동기 처리 여러 개의 루틴을 동시에 실행하여 결과를 내고 싶다면 비동기처리를 지원하는 코루틴을 사용한다. 코루틴은 메인루틴과 별도로 진행이 가능한 루틴으로 개발자가 루틴의 실행과 종료를 마음대로 제어할 수 있는 단위이다. 코루틴을 사용할 때는 코루틴 extensions의 패키지를 모두 import 해야한다. import kotlinx.coroutines.* 코루틴의 Scope 코루틴은 제어범위 및 실행범위를 지정할 수 있다. GlobalScope : 프로그램 어디서나 제어, 동작이 가능한 기본 범위 CoroutineScope : 특정한 목적의 Dispatcher를 지정하여 제어 및 동작이 가능한 범위 CoroutineScope를 만들 때 적용가능한 Dispatcher Dispatchers.Default : 기본적인..
[Kotlin] 비트연산 비트연산: 정수형 변수를 10진법 대신 2진법 비트 단위로 연산할 수 있는 기능 실무에서 비트연산은 거의 계산에는 사용하지 않으며 (2진법을 이용한 연산 최적화가 필요하다면 컴파일러의 기능을 사용하는 경우가 대부분!!) 정수형의 값을 비트 단위로 나누어 데이터를 좀 더 작은 단위로 담아 경제성을 높이기 위한 용도로 사용된다. 예를 들어, 32비트인 Int 타입 안에 0과 1로 된 서로 다른 값을 넣는다거나 앞의 5비트와 뒤의 27비트에 서로 다른 값을 넣는 식으로 변수 하나에 여러 개의 값을 담아 사용할 수 있다. 다만 비트연산을 사용하는 부하도 무시할 수 없으므로 주로 플래그 값(여러 개의 상태값을 0과 1로 담는 방법)을 처리하거나 네트워크 등에서 프로토콜의 데이터 양을 줄이기 위해 자주 사용된다. ..
[Kotlin] 변수의 고급 기술 (상수, lateinit, lazy) 상수 val은 할당된 객체를 바꿀 수 없을 뿐이지 객체 내부의 속성을 변경할 수는 없는 것은 아니다. 그러나 ‘상수’는 절대 변경이 불가능하다. 컴파일 시점에 결정되어 절대 바꿀 수 없다. const val CONST_A = 1234 상수로 선언될 수 있는 값은 기본 자료형만 가능하다.(String 자료형 포함) 상수의 이름을 만들 때는 의례적으로 대문자와 언더바(_)만 사용한다. 이를 통해 변수가 아닌 상수라는 점을 알린다. 런타임에 생성될 수 있는 일반적인 다른 클래스의 객체들은 담을 수 없다. 상수는 클래스의 속성이나 지역 변수 등으로는 사용할 수 없으며, 반드시 companion object 안에 선언하여 객체의 생성과 관계없이 클래스와 관계된 고정적인 값으로만 사용하게 된다. 선언 class S..
[Kotlin] 컬렉션 함수 (2) associateBy : 아이템에서 key를 추출하여 map으로 변환하는 함수 name, birthYear 속성이 있는 객체들을 List에 넣어두었을 때 collection.associateBy{ it.name } 중괄호 안에 key로 사용할 속성의 이름을 넣어주면 자동으로 map으로 변환하여 반환한다. groupBy : key가 같은 아이템끼리 배열로 묶어 map으로 만드는 함수 collection.groupBy{ it.birthYear } partition : 아이템에 조건을 걸어 두 개의 컬렉션으로 나누어 줌 collection.partition{ it.birthYear > 2002 } 두 컬렉션은 두 객체를 담을 수 있는 Pair라는 클래스 객체로 반환되므로 각각의 컬렉션을 first, secon..
[Kotlin] 컬렉션 함수 (1) 여태까지 컬렉션을 for문으로 반복하여 포함된 아이템을 하나하나 꺼내어 사용했었다. 하지만 코틀린은 함수형 언어의 특징을 가지고 있기 때문에 좀 더 편리하게 컬렉션을 사용할 수 있다. 컬렉션 함수: list나 set, map과 같은 컬렉션 또는 배열에 일반 함수 또는 람다 함수 형태를 사용하여 for문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 함수 forEach : 컬렉션에 포함된 모든 아이템을 it이라는 변수로 순서대로 참조 collection.forEach{ println(it) } filter : it에 조건을 걸어주면 조건에 맞는 객체만 collection으로 만들어서 반환 collection.filter{ it < 4 } map : it에 수식을 적용하여 값을 변..
[Kotlin] 컬렉션(2) Set과 Map https://winterflower.tistory.com/399 [Kotlin] 컬렉션(1) 리스트 리스트는 데이터를 모아 관리하는 컬렉션 클래스를 상속받는 서브 클래스 중 가장 단순한 형태로, 여러 개의 데이터를 원하는 순서로 넣어 관리하는 형태이다. 리스트에는 두 가지가 있다. List : winterflower.tistory.com 컬렉션 1탄에서는 컬렉션 중 List에 대해 알아보았다. 이번 게시물에서는 나머지 컬렉션인 Set과 Map을 알아보자. Set : 리스트와 달리, 순서가 정렬되지 않으며 중복이 허용되지 않는 컬렉션 인덱스로 위치를 지정하여 객체를 참조할 수는 없으며 contains로 객체가 set 안에 존재하는지를 확인하는 식으로만 확인한다. sampleSet.contains(”디모”..
[Kotlin] Data Class와 Enum Class Data Class : 데이터를 다루는 데 최적화된 클래스 5가지 기능을 내부적으로 자동으로 생성해준다. 1. 내용의 동일성을 판단하는 equals() 자동구현 2. 객체의 내용에서 고유한 코드를 생성하는 hashcode()의 자동구현 3. 포함된 속성을 보기쉽게 나타내는 toString()의 자동구현 4. 객체를 복사하여 똑같은 내용의 새 객체를 만드는 copy()의 자동구현 copy() 함수를 통해 새 객체를 생성할 때는 아무 파라미터가 없으면 똑같은 내용으로 생성함 val a = Data("A", 7) val b = a.copy() 파라미터가 있다면 해당 파라미터를 교체하여 생성함 val a = Data("A", 7) val b = a.copy("B") // b는 Data("B", 7)으로 생성됨 ..
[Kotlin] 중첩클래스와 내부클래스 중첩클래스 (Nested Class) : 하나의 클래스가 다른 클래스의 기능과 강하게 연관되어 있다는 의미를 전달하기 위해 만들어진 형식. 형태만 내부에 존재할 뿐 실질적으로는 서로 내용을 공유할 수 없다. 선언 class Outer{ class Nested{ } } 사용 Outer.Nested() 내부 클래스 (Inner Class) : 혼자서 객체를 만들 수는 없고 외부 클래스의 객체가 있어야만 생성과 사용 가능. 외부 클래스 객체의 속성이나 함수를 사용할 수 있다. class Outer{ inner class Inner{ } } Outer 클래스와 Inner 클래스에 같은 이름의 속성이나 함수가 있다면 this@OuterClass이름으로 참조한다. fun main(){ Outer.Nested().i..