코틀린에서 비동기 처리로 여러개의 루틴을 동시에 처리할 수 있는 방법 메인의 동기처리와 별도로 움직이며 개발자가 제어 가능한 루틴 처리 import kotlinx.coroutines.* import 필수 코르틴은 제어범위 및 실행범위를 지정할 수 있다 -> 코루틴의 Scope Global Scope 프로그램 어디서나 제어, 동작이 가능한 기본범위 CoroutineScope 특정한 목적의 Dispatcher를 지정하여 제어 및 동작이 가능한 범위 모든 플랫폼에서 지원되는 것은 아님, 지원되는 플랫폼에 따라서 사용 Dispatchers.Default(기본적인 백그라운드 동작) Dispatchers.IO(I/O에 최적화 된 동작) Dispatchers.Main메인(UI) 스레드에서 동작 Scope에서 제어되도..
비트연산 정수형 변수를 사람이 사용하는 10진법으로 연산하는 대신 2진법인 비트 단위로 연산할 수 있는 기능 실무에서는 비트연산을 계산에는 거의 사용하지 않음 2진법을 이요한 연산 최적화가 필요하다면 컴파일러의 기능을 사용하는 경우가 대부 분 정수형의 값을 비트단위로 나누어 데이터를 좀더 작은 단위로 담아 경제성을 높이기 위한 용도로 사용함 32비트에서 5비트 따로 27비트 따로 다른 값을 넣어 사용하는 등 변수 하나에 여러개의 값을 담아 사용 주로 플래그 값(상태를 0과 1로 담음) 처리 하거나 네트워크 등에서 프로토콜의 데이터량을 줄이기 위해 사용 좌측으로 갈수록 상위 비트 우측으로 갈 수록 하위 비트 이다 최상위는 부호 비트이기때문에 데이터를 담지 않는 것이 좋다 bitwise shift opera..
기존의 var , val의 차이는 알고 있다 ( 할당된 객체를 바꿀 수 있는 지의 유무) 그러나 val에서 객내 내부의 속성을 변경 할 수 없는 것은 아니다 그러나 상수는 절대 변경 할 수 없다 상수 절대 변경할 수 없는 값 const val CONST_A = 1234 String과 같은 기본 자료형으로만 가능 클래스 객체들을 담는 것은 불가능 클래스의 속성(field)이나 함수의 지역변수로는 사용 불가능 반드시 companion object 안에서 사용하여 객체의 생성과 관계 없이 고정적인 값으로만 사용 됨 이름은 의례적으로 대문자와 언더바만 사용 const val CONST_A = 1234 예제 fun main() { val foodCourt = FoodCourt() foodCourt.searchPr..
그 외 컬렉션 함수 설명 associateBy 아이템에서 key를 추출하여 map으로 변환하는 함수 collection.associateBy { it.name } key로 사용할 name을 걸어준다 -> 자동으로 map 으로 변환하여 반환 groupBy key가 같은 아이템끼리 배열로 묶어 map 으로 만드는 함수 collection.groupBy { it.birthYear } 특정한 값이 같은 객체를 배열로 묶어 반환 partition 조건을 걸어 true, false 나눠준다 collection.partition { it.birthYear > 2002 } 두 컬렉션은 Pair라는 객체로 반환 -> frist, second 로 참조 val (over2002, under2002) = collection...
기존의 방식 : for(item in collection) 으로 반복해서 아이템을 꺼내어 사용 But, 코틀린은 함수형 언어의 특징을 가지고 있기 때문에 좀더 편리하게 사용 가능 컬렉션 함수 list, set, map 과 같은 컬렉션 또는 배열에 일반 함수, 또는 람다 함수 형태를 사용하여 for 문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 여러가지 함수를 지칭 ForEach it이라는 변수로 순서대로 참조 가능 filter it에 조건을 걸어주면 해당하는 값만 컬렉션으로 반환됨 map it에 수식을 적용 : 값을 일괄적으로 변경할 수 있음 any, all, none -> 조건을 걸어 사용 collection.any { it == 0 } : 하나라도 조건에 맞으면 true..
Set List와 달리 순서가 정렬되지 않으며 중복이 허용되지 않는 컬렉션 인덱스로 위치를 지정하여 객체를 참조할 수 없음 sampleSet.contains("A")로 존재하는지 확인하는지로만 사용 Set, MutableSet 존재 객체의 추가, 삭제 여부에따라 사용 add(Data) remove(데이터) 예제 fun main() { val a = mutableSetOf("귤", "바나나", "키위") for (item in a) { println("${item}") } a.add("자몽") println(a) a.remove("바나나") println(a) println(a.contains("귤")) } Map Map 은 객체를 넣을 때 그 객체를 찾아낼 수 있는 Key를 쌍으로 넣어줄 수 있는 컬렉션..
특별한 기능이나 형태의 클래스 Data Class 데이터를 다루는데 최적화된 class로 '5가지'기능을 내부적으로 자동으로 생성해준다 내용의 동일성을 판단하는 equals()의 자동 구현 객체의 내용에서 고유한 코드를 생성하는 hashcode()의 자동구현 포함된 속성을 보기쉽게 나타내는 toString()의 자동구현 객체를 복사하여 똑같은 내용의 새 객채를 만드는 copy()의 자동 구현 아무 패러미터가 없으면 똑같은 내용으로 생성 val a = Data("A",7) val b = a.copy() 패러미터가 있다면 해당 패러티머를 교체하여 생성 val a = Data("A",7) val b = a.copy("B") b ->Data("B",7) 로 생성 속성을 순서대로 반환하는 componenetX(..
클래스 안에서 클래스가 중첩되는 두가지 유형 중첩 클래스(Nested Class) class Outer { class Nested { } } 하나의 클래스가 다른 클래스의 기능과 강하게 연관 되어 있다는 의미를 전달하기 위해 만들어진 형식으로 사용할 때는 Outer.Nested()와 같이 사용 외부 클래스의 내용을 공유 할 수 없음(별개) 내부 클래스(Inner class) class Outer { inner class Inner { } } 혼자서 객채를 만들 수는 없고 외부 클래스의 객체가 있어야지 생성과 사용이 가능한 클래스를 말함 외부 클래스의 속성과 함수의 사용이 가능 예제 fun main() { Outer.Nested().introduce() val outer = Outer() val inner..
코틀린도 함수의 overloading 지원됨 : 같은 Scope 안에서 같은 이름의 함수를 여러개 만들 수 있는 것 ex) fun same (x: Int) fun same (x: Int, text: String) fun same (x: Int, y: Int) 다만 패러미터 이름만 같은 경우는 오버로딩 할 수 없다. overloading 예시 패러미터의 형식에 맞게 자동으로 함수가 매칭되는 것을 확인 할 수 있다 fun main() { read(7) read("감사합니다") } fun read(x: Int) { println("숫자 $x 입니다") } fun read(x: String) { println(x) } 디폴트 매개 변수 (default arguments) 별다른 패러미터가 없을떄도 기본값으로 동..
nullable 변수에서 null을 처리하는 법 nullable 변수 var sample: String? = null But null상태로 속성이나 함수를 쓰려고 하면 -> null pointer exception 발생 (null 인 객체를 참조하면 발생하는 오류) var sample: String? = null if (sample != null) println(sample.toUpperCase()) 위와 같은 null Check 필요 ?. null safe operator sample?.toUpperCase() 참조연산자를 실행하기 전에 먼저 객체가 null 인지 확인부터 하고 객체가 null이라면 뒤의 구문을 실행하지 않는 연산자 이다. ?: elvis operator sample?:"default"..
코틀린에서는 기본적으로 " "사이에 문자열이 들어있으면 String 객체 생성 됨 이 String 클래스에 관련된 여러 속성과 함수 존재 문자열을 다루는 함수 var test1 = "Test.Kotlin.String" println(test1.length) println(test1.toUpperCase()) println(test1.toLowerCase()) //문자열 나누기 -> List val test2 = test1.split(".") println(test2) //문자열 합치기 println(test2.joinToString()) println(test2.joinToString("-")) //시작과 끝 설 println(test1.substring(5..10)) Boolean값 Return하는 함..
리스트(List) 데이터를 코드에서 지정한 순서대로 저장하는 List '데이터를 모아 관리' 하는 Collection 클래스 상속 Collection 클래스를 상속하는 서브클래스 중 가장 단순한 형태(순서 있음) List 생성시에 넣은 객체를 대체, 추가, 삭제 할 수 없음 listOf(1,2,3) mutableListOf("A","B","C") MutableList 생성시에 넣은 객체를 대체, 추가, 삭제가 가능함 추가 add(data) add(index,data) 삭제 remove(data) removeAt(index) 섞기 shuffle() 정렬 sort() 값 넣기 list[index] = data 예제 fun main() { val a = listOf("사과","딸기","배") println(a..