idghst.dev
article thumbnail
[ Kotlin ] 비동기 처리
Kotlin 2023. 1. 11. 09:00

여러 개의 루틴을 동시에 실행하는 방법 코루틴 (coroutine) import kotlinx.coroutines.* 코루틴은 제어 범위 및 실행 범위 지정 가능 → 코루틴의 Scope GlobalScope 프로그램의 어디서나 제어, 동작 가능한 기본 범위 CoroutineScope 특정한 목적의 Dispatcher 를 지정하여 제어, 동작 가능한 범위 Dispatcher Dispatchers.Default - 기본적인 백그라운드 동작 Dispatcher.IO - 네트워크나 디스크 등 I/O에 최적화된 동작 Dispatcher.Main - 메인( UI ) 스레드에서 동작 모든 플랫폼에서는 지원되지 않으니 지원되는 플랫폼에 따라 사용해야 함 val scope = CoroutineScope(Dispatche..

article thumbnail
[ Kotlin ] 비트 연산
Kotlin 2023. 1. 9. 09:00

요약 정수형 변수를 10진법 대신 2진법으로 연산할 수 있는 단위 실무에서는 계산에서는 거의 사용하지 않으며 정수형의 값을 비트 단위로 나누어 데이터를 좀 더 작은 단위로 담아 경제성을 높이기 위한 용도로 사용( 2진법을 이용한 연산 최적화가 필요하다면 컴파일러의 기능을 사용하는 경우가 대부분 ) 변수 하나에 여러 개의 값을 담아 사용하는 등으로 사용 단, 비트연산을 사용하는 부하도 무시할 수 없으므로 주로 플래그 값을 처리하거나 네트워크에서 프로토콜의 데이터 양을 줄이기 위해 자주 사용됨 좌측으로 갈 수록 상위비트우측으로 갈 수록 하위비트 코틀린은 모든 정수형이 부호를 포함하므로 최상위 비트를 부호비트로 사용하기 때문에 데이터를 담지 않는 것이 좋음 bitwise shift operator 부호 비트를..

article thumbnail
[ Kotlin ] Enum Class
Kotlin 2023. 1. 6. 09:00

요약 열거형 여러 가지 상태를 구분하기 위한 객체들을 이름을 붙혀 여러 개 생성해 두고, 그 중 하나의 상태를 선택하여 나타내기 위한 클래스 상태는 대문자를 사용하는 것이 관례 Enum 의 객체들은 고유한 속성을 가질 수 있음 생성자를 만들어 속성을 갖도록 하면, 객체를 선언할 때 속성 설정 가능 일반 클래스처럼 함수 추가 가능 객체 추가 마지막 부분에 ;(세미콜론)을 추가한 후 함수 기술하면 됨 코드 fun main() { _state() } fun _state() { var a = state.SING println(a) a = state.EAT println(a.messeage) a=state.SLEEP println(a.isSleeping()) } enum class state(val messeag..

article thumbnail
[ Kotlin ] Data Class
Kotlin 2023. 1. 4. 09:00

요약 데이터를 다루는데 최적화된 Class 5가지 기능을 내부적으로 자동으로 생성 내용의 동일성 판단 - equals() 객체의 내용에서 고유한 코드 생성 - hashcode() 포함된 속성을 보기 쉽게 나타냄 - toString() 객체를 복사하여 똑같이 내용의 새 객체를 만듦 - copy() 파라미터 없이 생성할 수도 있고, 파라미터를 전달하여 일부 속성 교체 가능 속성을 순서대로 반환 - componentX() 배열이나 리스트 등에 Data Class 객체가 담겨 있을 때, 이 내용을 자동으로 꺼내 쓸 수 있는 기능을 지원하기 위한 함수 코드 fun main() { equals_hashcode_tostring() println() println("====================") printl..

article thumbnail
[ Kotlin ] 중첩 클래스
Kotlin 2023. 1. 2. 09:00

요약 클래스 안에 클래스를 넣는 방식 하나의 클래스가 다른 클래스의 기능과 강하게 연관되어 있다는 의미를 전달하기 위해 만들어진 형식 사용 시.. 외부 클래스 . 중첩(내부) 클래스 중첩 클래스는 외부 클래스 안에 존재하지만외부 클래스와는 내용을 공유할 수 없음 내부 클래스는 외부 클래스 안에 존재하며 외부 클래스와 내용을 공유하며 사용 시 반드시 외부클래스의 참조가 필요함 ‘inner’ 키워드를 사용하여 구현되어야함 코드 fun main() { outer.nested().introduce() println() val outer=outer() val inner =outer.inner() inner.introduceInner() inner.introduceOuter() println() outer.text..

article thumbnail
[ Kotlin ] 동일성
Kotlin 2022. 12. 30. 09:00

요약 내용의 동일성 ( == ) 객체의 동일성 ( === ) 내용의 동일성은 자동으로 판단되는 것이 아닌 코틀린의 모든 클래스가 내부적으로 상속받는 Any 라는 최상의 클래스의 equals() 함수가 반환받는 Boolean 값으로 판단 기본 자료형에는 자료형의 특징에 따라 equals() 함수가 이미 구현되어 있지만 우리가 커스텀 class 를 만들 때는 override fun equals(other: Any?): Boolean {} 동일성을 확인해주는 구문을 별도로 구현해야함 코드 fun main() { _product() } class Product(var name: String, var price: Int) { override fun equals(other: Any?): Boolean { if (o..

article thumbnail
[ Kotlin ] null 처리
Kotlin 2022. 12. 28. 09:00

요약 null safe operator ( ?. ) 객체가 null 인지 확인하고 null 이면 뒷 문장 실행 안함 문자열_객체?.실행될_구문 elvis operator ( ?: ) 객체가 null 인지 확인하고 null 이면 뒤에 작성한 문자열로 대체 문자열_객체?:"대체될 문자열" non-null assertion operator ( !!. ) 참조 연산자를 사용할 때, null 여부를 컴파일시 확인하지 않도록 하여 런타임시 null pointer exception 이 나도록 의도적으로 방치하는 연산자 문자열_객체!!.실행될_구문 ※ 스코프 함수 .run{} 함수를 사용하면 if 문을 통해 여러 문장을 실행시키는 역할을 대신할 수 있음 코드 fun main() { _null() } fun _null(..

article thumbnail
[ Kotlin ] 문자열 관련 함수
Kotlin 2022. 12. 26. 09:00

길이 변수.length 영문 대, 소문자 문자열.toLowerCase() 문자열.toUpperCase() 특정 기준에 따라 문자열을 배열로 나누는 함수 문자열.split(".") // 문자 '.'을 기준으로 문자열을 나눠 배열로 저장 문자열 배열을 하나의 문자열로 합치는 함수 문자열배열.joinToString() // 그냥 합쳐짐 (", "를 통해 합침) 문자열배열.joinToString("-") // 각 문자열 원소 사이를 '-'을 통해 합침 문자열의 일부분을 사용하는 함수 문자열.subString(첫 인덱스..마지막 인덱스) 문자열이 비었는지 확인하는 함수 문자열.isNullOrEmpty() // Null 또는 "" 이면 true 문자열.isNullOrBlank() // Null 또는 "" 또는 ""..

article thumbnail
[ Kotlin ] 컬렉션 클래스
Kotlin 2022. 12. 23. 09:00

List 설명 데이터를 코드에 지정한 순서대로 저장 데이터를 모아 관리하는 collection 클래스에서 상속받은 클래스 중 가장 단순한 형태 여러 개의 데이터를 원하는 순서대로 넣어 관리하는 형태 List 생성 시에 넣은 객체를 대체, 추가, 삭제 불가능 listOf( … ) MutableList 생성 시에 넣은 객체를 대체, 추가, 삭제 가능 mutableListOf( … ) 추가 add( 데이터 ) add( 인덱스, 데이터 ) 삭제 remove( 데이터 ) removeAt( 인덱스 ) 무작위 섞기 shuffle() 정렬 sort() 대체 list[ 인덱스 ] = 데이터 코드 fun main() { var _List = listOf("사과", "딸기", "배") println(_List) printl..

article thumbnail
[ Kotlin ] 제네릭
Kotlin 2022. 12. 21. 09:00

요약 클래스나 함수에서 사용하는 자료형을 외부에서 지정할 수 있는 기능 슈퍼 클래스와 서브 클래스가 있을 때 두 클래스의 인스턴스를 공용으로 사용하는 하나의 함수를 파라미터로 받으려면 슈퍼 클래스를 파라미터로 절달하면 됨 ( 하위 클래스는 자동으로 캐스팅 됨 ) → 캐스팅 연산을 거치는 것은 프로그램의 속도를 저하시킴 → Generic ( 고정적인 자료형 대신 실제 자료형으로 대체되는 타입 파라미터 사용 )* fun genericFunc (params: T): T class GenericClass (var pref: T) 특정 자료형이 할당되면 제네릭을 사용하는 모든 코드는 할당된 자료형으로 대체됨 타입 파라미터의 규칙은 Type의 이니셜인 ‘T’ 사용 여러 개를 사용하는 경우 T 이후의 U, V 등을 ..

article thumbnail
[ Kotlin ] 이벤트
Kotlin 2022. 12. 19. 09:00

함수로 직접 요청하지 않았지만 시스템 또는 루틴에 의해서 발생하게 되는 동작 옵저버 (observer) 이벤트가 일어나는 것을 감시하는 감시자의 역할 옵저버 패턴 이벤트가 발생할 때마다 즉각적으로 처리할 수 있도록 만드는 프로그래밍 패턴 구현 이벤트 수신 클래스( A )와 이벤트 발생 및 전달 클래스( B ) 필요 B 클래스에서 이벤트 발생 → A 클래스에서 함수 요청 → B 클래스에서 함수 전달 → 이 방법은 A 클래스만 상대 클래스에 요청을 보낼 수 있기 때문에 B 클래스는 요청할 수 없다. ☞ 그래서 두 클래스 사이에 인터페이스를 끼워 넣는다 → B 클래스에서 이벤트 발생 시 인터페이스의 값 변경 이러한 인터페이스를 옵저버..코틀린에서는 listener 라고 함 이렇게 이벤트를 넘겨주는 행위를 ca..

article thumbnail
[ Kotlin ] 오브젝트
Kotlin 2022. 12. 16. 09:00

object 클래스의 인스턴스를 단 하나만 만들어 사용하도록 하는 코딩 아키텍처 패턴 object 오브젝트명 { ... } 오브젝트명.속성 오브젝트명.함수() fun main() { println(Counter.count) Counter.add() println(Counter.count) Counter.add() println(Counter.count) Counter.clear() println(Counter.count) } object Counter{ var count=0 fun add(){ count++ } fun clear(){ count=0 } } companion object 클래스 내의 오브젝트 (static 과 비슷함) companion object { ... } 클래스명.속성 클래스명.함수..