본문 바로가기

전체 글71

[코틀린/Kotlin] 코루틴(Coroutine) 코루틴 기초가벼운 비동기 처리 방식기존의 Thread, Callback 기반보다 간결하고 안전하게 비동기 작업 처리 가능코루틴 사용 이유복잡한 콜백 지옥(callback hell) 제거UI 스레드 방지동기식처럼 읽히는 비동기 처리네트워크 통신, 데이터베이스 작업 등에 많이 사용기본 예시fun main() = runBlocking { launch { delay(1000L) println("World!") } println("Hello,")}Hello,World!주요 키워드키워드 설명suspend일시 중단 가능한 함수에 사용launch새 코루틴을 실행 (결과 X)async결과를 반환하는 코루틴 (Deferred)runBlockingmain 함수나 테스트에서 사용 (코.. 2025. 8. 28.
[코틀린/Kotlin] sealed class/when sealed class상속 계층을 제한하는 클래스같은 파일 내에서만 상속이 가능모든 서브클래스를 컴파일 시점에 알 수 있음when과 함께 사용하기 용이추상 클래스처럼 동작하지만 서브클래스를 한정하여 완전한 경우의 수 처리가 가능작동 예시sealed class Result { data class Success(val data: String): Result() data class Error(val errorMsg: String): Result()}Result: sealed classSuccess, Error: Result의 서브 클래스사용 이유when 문으로 Result를 처리할 경우 모든 경우를 다루었는지 컴파일러 체크가 가능else없이 안전하게 분기 처리 가능when 사용 예시fun handl.. 2025. 8. 22.
[코틀린/Kotlin] 스코프 함수 스코프 함수객체의 컨텍스트 내에서 코드 블록을 실행 할 수 있게하는 함수특정 객체에 대하여 임시로 이름 없이 작업을 수행할 때 유용대표적인 스코프 함수함수명수신 객체 이름반환값주사용 목적letit람다 결과값null 체크, 임시 변수 범위 제한, 체이닝runthis람다 결과값객체 구성 + 결과 반환withthis람다 결과값외부 객체 구성 (확장 X)applythis객체 자기 자신객체 구성 (초기화 등)alsoit객체 자기 자신부수 작업 수행 (로깅, 디버깅 등)주요 스코프 함수 예시letnull 체크임시 변수 범위 제한val name: String? = "희우"name?.let { println("이름은 ${it} 입니다.") // null이 아닐 경우 실행}run객체 구성최종 결과 리텅val textLe.. 2025. 8. 21.
[코틀린/Kotlin] null처리와 스마트캐스트 Null 안전성kotlin은 NullPointerException(NPE)를 방지하기 위하여 Null 안전성을 제공커파일 타임에 null 관련 오류를 방지null 타입 선언타입 뒤에 ? 을 붙여서 null이 가능함을 명시var name: String = "희우" // null 불가능var nickname: String? = null // null 가능 (nullable)Null-safe 연산자?.safe call operatornull일 경우에는 실행을 하지 않음val length = nickname?.length // nickname이 null이면 length도 null?:Elvis operatornull일 경우에도 default 값을 줄 수 있음val length = nickname?.leng.. 2025. 8. 20.
[코틀린/Kotlin] 확장함수 확장 함수기존 클래스에서 새 함수를 추가하는 기능기존 클래스의 코드를 수정하지 않고 기능 확장kotlin의 클래스는 기본적으로 final이므로 open이 없으면 상속이 어려움Extension, 확장을 사용하여 기능 추가사용 방법fun 클래스명.확장함수명() {...}기본 문법 예시// String 클래스에 확장 함수 추가fun String.addExclamation(): String { return this + "!"}fun main() { val greeting = "Hello" println(greeting.addExclamation()) // 출력: Hello!}this는 호출한 객체(String)을 가리킴확장 함수는 마치 해당 클래스의 멤버 함수처럼 호출 가능주의확장 함수는 실제.. 2025. 8. 19.
[코틀린/Kotlin] 람다와 고차함수 람다이름이 없는 함수: 익명함수간단한 처리를 하므로 fun으로 함수를 만들기 번거로울 때 사용filter, map, forEach 같은 함수 내에서 사용기본 문법val lamdaName = { arg1: Type, arg2: Type -> return }[예시]val result = listOf(1, 2, 3).map { it * 2 } // it * 2는 람다식val result = listOf(1, 2, 3).map { it * 2 } // it * 2는 람다식람다 표기법소괄호로 묶은 파라미터와 리턴, 화살표 표기법으로 연관// 매개변수 없음() -> A// 매개변수 있음(A, B) -> C파라미터 타입은 생략 가능하나 리턴은 생략 불가능// 생략 전(a: Int, b: Int) -> Int// 생략.. 2025. 8. 18.