Kotlin CheatSheet
코틀린 치트시트
변수
개요
val: 불변(immutable), 재할당 불가 (Java의final에 해당)var: 가변(mutable), 재할당 가능타입 추론 지원: 명시하지 않아도 컴파일러가 타입을 결정
예시1 (기본 문법)
(1) Java → Kotlin 전환
// Java
int count = 10;
final String greeting = "Hello";// Kotlin
var count = 10 // 가변
val greeting = "Hello" // 불변(2) 타입 추론
예시2 (실무 활용)
(1) 서버 설정값 정의
→ MAX_RETRY는 상수, currentRetry는 실행 중 변경되는 값.
(2) Spring Boot 환경설정
→ 설정값은 val로 불변, 실행 중 수집되는 통계는 var로 관리.
Null
개요
코틀린은 Null Safety를 언어 차원에서 제공
?: nullable 타입?.: Safe call?:: Elvis 연산자!!: Not-null 단언 (주의 필요, 실무에서는 최소화)
예시1 (기본 문법)
(1) Java → Kotlin 전환
(2) 안전하지 않은 코드 vs 안전한 코드
예시2 (실무 활용)
(1) DB 조회 결과 처리
→ DB에서 유저가 없을 경우 Guest 반환.
(2) API 요청 파라미터 처리
→ 필수 값은 ?: throw, 선택 값은 기본값으로 처리.
Type
개요
코틀린은 **기본 타입도 객체(Reference Type)**로 다룸
컴파일러가 최적화 시 JVM의 primitive로 변환 (성능 동일)
스마트 캐스트(smart cast) 지원 →
is로 타입 검사 후 안전하게 변환Any (최상위 타입), Unit (Java의 void), Nothing (절대 리턴 불가 타입) 존재
예시1 (기본 문법)
(1) Java Primitive vs Kotlin
(2) 스마트 캐스트
예시2 (실무 활용)
(1) API 응답 처리
→ JSON 파싱, DB 결과 변환 등에서 다양한 타입을 안전하게 처리 가능.
(2) Nothing 타입 활용
→ Nothing은 함수가 정상적으로 리턴하지 않음을 표현 → null-safe 코드 작성 가능.
연산자
개요
코틀린의 연산자는 사실상 함수 호출로 해석됨 (
a + b→a.plus(b))==vs===: 값 비교와 참조 비교 구분is,!is: 타입 검사in,!in: 포함 여부 검사범위 연산자:
..,until,downTo,stepif/when도 표현식(Expression) 으로 값 할당 가능
예시1 (기본 문법)
(1) 값 비교 vs 참조 비교
(2) 범위 연산자
예시2 (실무 활용)
(1) 권한 검사
→ API 보안 로직에서 값 비교(==) 활용.
(2) 리스트 필터링
→ 서버에서 특정 값이 컬렉션에 포함되는지 in으로 직관적으로 확인.
조건문
개요
if는 문(statement)뿐 아니라 표현식(expression) → 값 할당 가능when은 자바의switch를 확장한 문법값 매칭, 타입 검사, 범위 검사, 여러 조건 지원
else는 default와 동일한 역할
실무에서는 권한 처리, 입력 검증, 상태 전이 로직에 자주 활용
예시1 (기본 문법)
(1) if 표현식
(2) switch vs when
예시2 (실무 활용)
(1) API 권한 처리
→ API 보안 로직에서 enum 기반 권한 분기.
(2) 요청 파라미터 검증
→ 서버 입력값 검증 로직에서 범위 조건 활용.
반복문
핵심 요약
for (i in 0 until n)→ 범위 기반 반복for (item in list)→ Iterable 반복withIndex()→ 인덱스 + 값 동시 사용while,do-while→ 자바와 동일실무: 배치, 로그 출력, 컬렉션 처리에서 활용
예시1 (기본 문법)
(1) Java for vs Kotlin for-in
(2) 리스트 순회
예시2 (실무 활용)
(1) 인덱스와 값 동시 사용
→ 서버 로그 출력 시 유용.
(2) 데이터 처리 로직
→ 배치 작업에서 주문 만료 처리 로직.
예외
개요
코틀린은 Checked Exception 없음 → 모든 예외는 Unchecked
try/catch/finally문법은 자바와 동일, 하지만 표현식으로도 사용 가능함수형 스타일로
runCatching,Result타입 자주 활용사용자 정의 예외는
RuntimeException상속
핵심 요약
Checked Exception 없음 →
throws불필요try/catch/finally는 표현식으로도 사용 가능함수형 스타일:
runCatching,Result<T>실무 활용: API 응답 Wrapping, 트랜잭션 처리
1. Checked Exception 없음
기본 문법 예시
실무 활용 예시
2. try/catch/finally (표현식)
기본 문법 예시
실무 활용 예시
3. runCatching
기본 문법 예시
실무 활용 예시
4. Result<T>
기본 문법 예시
실무 활용 예시
5. 사용자 정의 예외 (RuntimeException 상속)
기본 문법 예시
실무 활용 예시
함수
개요
fun키워드로 함수 선언반환 타입은
: Type, 추론 가능 시 생략블록 본문 vs 식(Expression) 본문 (
=사용)기본값 파라미터, 이름 붙은 인자, 가변 인자 지원
최상위 함수 가능 (클래스 밖 함수)
자바의 static 유틸 메소드보다 간결
핵심 요약
fun name(param: Type): Return블록 본문
{}vs 식 본문=기본값 파라미터 + 이름 붙은 인자 → 오버로딩 대체
최상위 함수 지원 → 유틸/헬퍼 함수 작성 용이
실무 활용: 컨트롤러 파라미터 처리, 유틸 메소드, DTO 변환 등
예시1 (기본 문법)
(1) Java → Kotlin 변환
(2) 기본값 + 이름 붙은 인자
예시2 (실무 활용)
(1) Spring Boot Controller
→ 기본값 파라미터로 오버로딩 줄이고 코드 간결화.
(2) 유틸 함수 (최상위 함수)
→ 자바처럼 static 유틸 클래스 필요 없음, 최상위 함수로 해결.
클래스
개요 & 핵심 요약
class키워드로 클래스 선언생성자: 주 생성자(primary) + 보조 생성자(secondary)
프로퍼티(Property):
val(읽기 전용),var(읽기/쓰기)기본 접근 제어자는
publicinit블록으로 초기화 로직 실행getter/setter는 자동 생성되며, 필요 시 오버라이딩 가능
핵심 요약
class User(val id: Int, var name: String)→ 프로퍼티 + 생성자 한 줄로init블록 → 생성 시 로직 실행val불변,var가변자바보다 보일러플레이트가 대폭 감소
예시1 (기본 문법)
(1) Java → Kotlin 전환
(2) init 블록
→ 객체 생성 시 검증 로직 수행.
예시2 (실무 활용)
(1) JPA Entity 정의
→ 불변 id + 가변 필드 조합으로 DB 엔티티 표현.
(2) DTO 클래스 정의
→ Entity와 API 응답 DTO를 구분해서 사용하는 패턴.
상속
개요 & 핵심 요약
코틀린 클래스는 기본적으로
final→ 상속 불가상속을 허용하려면
open키워드 필요메소드 오버라이드는
override키워드 필수추상 클래스(
abstract)는 인스턴스화 불가, 하위 클래스에서 구현 강제인터페이스도 구현 가능하며, default 구현 지원
핵심 요약
open class→ 상속 가능abstract class→ 미구현 메소드 강제interface→ 다중 구현 가능, 디폴트 메소드 지원오버라이드 시
override반드시 명시
1️⃣ open
🔹 기본 문법 예시
(1) 클래스 상속 허용
(2) 메서드 재정의 허용
🔹 실무 활용 예시
(1) 확장 가능한 서비스 클래스
(2) 테스트에서 Mocking 용이
2️⃣ abstract
🔹 기본 문법 예시
(1) 추상 클래스
(2) 추상 메서드 + 구현 메서드 혼합
🔹 실무 활용 예시
(1) 서비스 템플릿
(2) UI 컴포넌트 추상화
3️⃣ interface
🔹 기본 문법 예시
(1) 단순 인터페이스
(2) default 메서드 제공
🔹 실무 활용 예시
(1) 전략 패턴
(2) Enum + 인터페이스 조합
4️⃣ override
🔹 기본 문법 예시
(1) 메서드 오버라이드
(2) 프로퍼티 오버라이드
🔹 실무 활용 예시
(1) JPA Entity 재정의
(2) 스프링 시큐리티 UserDetails 구현
접근 제어
개요 & 핵심 요약
코틀린 접근 제어자:
public,private,protected,internal기본값은
public(Java의 default와 다름)protected: 상속 관계에서만 접근 가능 (Java처럼 패키지 단위 X)internal: 같은 모듈(module) 내에서만 접근 가능파일 최상위 함수/프로퍼티에도 접근 제어자 사용 가능
프로퍼티 getter/setter에 서로 다른 접근 제어자 부여 가능
핵심 요약
기본은
publicinternal: 모듈 경계 제어protected: 패키지 무시, 상속만 허용getter/setter 가시성 다르게 설정 가능
예시1 (기본 문법)
(1) Java vs Kotlin 기본값 차이
(2) 프로퍼티 가시성 제어
예시2 (실무 활용)
(1) 모듈 경계 제어 (internal)
→ 다른 모듈에서 접근 불가, 라이브러리 내부 구현 숨김.
(2) 생성자 제어
→ 팩토리 메소드 패턴, 외부에서 직접 생성 제한.
object 키워드
개요 & 핵심 요약
object키워드는 세 가지 주요 용도싱글톤 객체 선언: 클래스 정의 + 인스턴스 생성 동시에 수행
companion object: 클래스와 함께 존재하는 유일 객체, Java의 static 대체
익명 객체(Anonymous object): 일회성 구현체 생성
멀티스레드 환경에서도 안전하게 초기화됨
핵심 요약
object→ 싱글톤companion object→ static 대체, 팩토리/유틸리티 메소드 제공object : 인터페이스 {}→ 익명 객체
예시1 (기본 문법)
(1) 싱글톤 객체
(2) companion object
예시2 (실무 활용)
(1) Repository 싱글톤
→ 간단한 캐싱/저장소 패턴 구현.
(2) Spring Bean Factory 메소드
→ companion object로 환경 변수 기반 Factory 메소드 제공.
중첩 클래스
개요 & 핵심 요약
코틀린에서 클래스 내부에 선언된 클래스는 기본적으로 static nested class처럼 동작 (외부 클래스 참조 X)
바깥 클래스 참조가 필요할 경우
inner키워드 명시 → 바깥 인스턴스에 접근 가능바깥 클래스 참조는
this@Outer문법 사용자바는 기본이 non-static inner class, 코틀린은 반대 (안전성이 우선)
핵심 요약
class Nested→ static nested classinner class Inner→ 외부 클래스 참조외부 참조 문법:
this@Outer기본적으로 static nested → 메모리 누수 방지
예시1 (기본 문법)
(1) Java vs Kotlin 기본 차이
(2) 외부 참조 접근
예시2 (실무 활용)
(1) Helper 클래스 (Nested)
→ 외부 상태 필요 없음 → Nested class로 안전하게 설계.
(2) Validator (Inner)
→ Order의 상태(items)를 참조해야 하므로 inner class로 구현.
다양한 클래스 (Data, Enum, Sealed)
개요 & 핵심 요약
Data class
data키워드 → equals, hashCode, toString, copy, componentN 자동 생성주로 DTO, 값 객체(Value Object)에 사용
Enum class
제한된 상수 집합 표현
각 상수에 필드/메소드 정의 가능
Sealed class
제한된 클래스 계층
when과 함께 사용 시 컴파일러가 모든 경우 체크상태(State)와 결과(Result) 표현에 적합
핵심 요약
Data → DTO/VO, 불변 객체
Enum → 권한, 상태, 타입 구분
Sealed → API 응답, 상태 전이, 오류 처리
📌 Data Class
🔹 기본 문법 예시
(1) DTO 정의
(2) copy & toString
🔹 실무 활용 예시
(1) 엔티티 → DTO 변환
→ 컨트롤러에서 Entity → DTO 변환을 간결하게 처리.
(2) API 요청/응답 직렬화
→ REST API 요청/응답 모델을 직렬화/역직렬화에 활용.
📌 Enum Class
🔹 기본 문법 예시
(1) 상수 집합
(2) 값 포함
🔹 실무 활용 예시
(1) 권한 체크
(2) 주문 상태 관리
📌 Sealed Class
🔹 기본 문법 예시
(1) 결과 표현
(2) 상태 표현
🔹 실무 활용 예시
(1) API 응답 Wrapping
(2) UI 상태 전이
배열과 컬렉션
개요 & 핵심 요약
배열:
arrayOf,intArrayOf,Array(size) { init }등으로 생성하지만 코틀린에서는 배열보다 컬렉션(List, Set, Map) 사용이 권장됨
컬렉션은 불변(immutable) 과 가변(mutable) 버전이 구분됨
함수형 API (
filter,map,reduce,sortedBy등) 제공핵심 요약
배열보단 컬렉션 활용
불변:
listOf,setOf,mapOf가변:
mutableListOf,mutableSetOf,mutableMapOf컬렉션 처리 → 함수형 API 적극 활용
예시1 (기본 문법)
(1) 배열 생성
(2) 불변/가변 컬렉션
예시2 (실무 활용)
(1) DTO 변환
→ DB 조회 결과를 API DTO 리스트로 변환.
(2) 캐싱된 데이터 필터링
→ 만료되지 않은 토큰만 남기기.
고급 함수 문법 (infix, inline, local function)
개요 & 핵심 요약
infix 함수
중위 호출 지원 →
a to b처럼 더 읽기 좋은 DSL 스타일 문법조건: 멤버 함수/확장 함수, 단일 파라미터만 허용
inline 함수
함수 호출 대신 함수 본문을 호출 지점에 삽입 → 람다 객체 생성/호출 오버헤드 제거
고차 함수 성능 최적화에 사용
지역 함수(local function)
함수 내부에 함수 정의 가능
중복 제거 및 캡슐화 강화, 외부로 노출 방지
핵심 요약
infix → DSL/가독성
inline → 성능 최적화
local function → 코드 중복 제거 + 스코프 제한
📌 Infix 함수
중위 호출 지원 →
a to b처럼 DSL 스타일 문법 가능조건: 멤버 함수/확장 함수여야 하고, 단일 파라미터만 허용
🔹 기본 문법 예시
(1) Int 확장
(2) Pair 생성기
🔹 실무 활용 예시
(1) DSL 스타일 API (권한 체크)
(2) 컬렉션 빌더 DSL
📌 Inline 함수
함수 호출 대신 본문을 호출 지점에 삽입
람다 객체 생성/호출 오버헤드 제거 → 고차 함수 성능 최적화
🔹 기본 문법 예시
(1) 실행 시간 측정
(2) repeat 실행
🔹 실무 활용 예시
(1) 안전 실행 블록
(2) 트랜잭션 처리
📌 Local Function
함수 내부에 함수 정의 가능
중복 제거 및 캡슐화 강화, 외부로 노출되지 않음
🔹 기본 문법 예시
(1) 간단한 중복 제거
(2) 내부 전용 유틸
🔹 실무 활용 예시
(1) 검증 로직 캡슐화
(2) 파싱 로직 분리
람다
개요 & 핵심 요약
람다(lambda): 함수 자체를 값처럼 다루는 문법 (
{ 파라미터 -> 본문 })함수 타입:
(매개변수 타입, ...) -> 반환 타입마지막 파라미터가 함수라면, 소괄호 밖에 작성 가능 (트레일링 람다)
클로저(closure): 외부 변수를 캡처 가능 (자바와 달리 final 필요 없음)
핵심 요약
val f: (Int) -> Int = { x -> x * 2 }list.forEach { println(it) }runCatching { ... }처럼 함수형 스타일 활용실무에서는 컬렉션 처리, 고차 함수, DSL에 자주 쓰임
예시1 (기본 문법 전/후)
(1) Java Stream vs Kotlin 람다
(2) 클로저 활용
예시2 (실무 활용)
(1) 공통 로직 유틸
→ 고차 함수로 성능 로깅을 간결하게 처리.
(2) DSL 스타일 API
→ Ktor 같은 서버 프레임워크에서 라우팅 DSL을 직관적으로 정의.
컬렉션을 함수형으로
개요 & 핵심 요약
코틀린 컬렉션은 함수형 스타일 API를 기본 지원
filter,map,reduce,groupBy,flatMap등 풍부한 연산 제공null-safe 버전(
mapNotNull,firstOrNull)도 함께 제공컬렉션 조합으로 데이터 변환, 집계, 필터링, 매핑을 간단히 처리 가능
핵심 요약
필터링:
filter,filterIndexed매핑:
map,mapIndexed,mapNotNull조건:
all,any,none집계/정렬:
count,sortedBy,distinctBy변환:
groupBy,associateBy,flatMap,flatten
🔹 필터링
1. filter
filter기본 문법
실무 활용
2. filterIndexed
filterIndexed기본 문법
실무 활용
🔹 매핑
3. map
map기본 문법
실무 활용
4. mapIndexed
mapIndexed기본 문법
실무 활용
5. mapNotNull
mapNotNull기본 문법
실무 활용
🔹 조건
6. all
all기본 문법
실무 활용
7. any
any기본 문법
실무 활용
8. none
none기본 문법
실무 활용
🔹 집계/정렬
9. count
count기본 문법
실무 활용
10. sortedBy
sortedBy기본 문법
실무 활용
11. distinctBy
distinctBy기본 문법
실무 활용
🔹 변환
12. groupBy
groupBy기본 문법
실무 활용
13. associateBy
associateBy기본 문법
실무 활용
14. flatMap
flatMap기본 문법
실무 활용
15. flatten
flatten기본 문법
실무 활용
이모저모
개요 & 핵심 요약
typealias: 타입에 별칭(alias)을 붙여 코드 가독성 향상자바 개발자를 위한 코틀린 …
as import: import 시 이름 변경 가능 → 충돌 방지자바 개발자를 위한 코틀린 …
구조분해 선언:
componentN함수를 기반으로 객체를 여러 변수로 분해PPTJump와 Label:
return,break,continue를 라벨과 함께 사용 가능 (권장X)PPTtakeIf / takeUnless: 조건 만족 여부에 따라 객체를 반환하거나 null 반환 → 메서드 체이닝 가능PPT
핵심 요약
typealias: 복잡한 제네릭 단순화
as import: 동일 클래스명 충돌 해결
구조분해: DTO/Pair/Triple 분해
Jump+Label: break/continue 확장 (지양)
takeIf/takeUnless: 조건부 반환으로 코드 간결화
예시1 (기본 문법 전/후)
(1) typealias & as import
(2) 구조분해 선언
예시2 (실무 활용)
(1) 조건부 실행 (takeIf)
→ 유효성 검증을 한 줄로 처리.
(2) Map 처리 with destructuring
→ 설정값을 구조분해로 직관적으로 순회.
Scope Function
개요 & 핵심 요약
Scope Function: 객체에 대해 **일시적인 영역(scope)**을 만들어 코드를 간결하게 하거나 메서드 체이닝에 활용자바 개발자를 위한 코틀린 …
종류:
let,run,also,apply,with자바 개발자를 위한 코틀린 …구분 기준:
결과 반환:
let,run→ 람다 결과 반환객체 반환:
also,apply,with람다 내부 접근:
it(let/also),this(run/apply/with)PPT
핵심 요약
let: null-safe 호출, 임시 변수 활용run: 객체 초기화 + 반환 값 계산apply: 객체 설정(빌더 스타일)also: 부수효과(side-effect) 로깅, 디버깅with: 객체 컨텍스트에서 여러 연산 수행
1) let
기본 문법 예시
실무 활용 예시
2) run
기본 문법 예시
실무 활용 예시
3) apply
기본 문법 예시
실무 활용 예시
4) also
기본 문법 예시
실무 활용 예시
5) with
기본 문법 예시
실무 활용 예시
배열
Array<Array<T>>
크기가 고정됨.
자바와의 호환성 필요할 때 유리.
예: 그래프 인접 행렬, 게임 보드.
MutableList<MutableList<T>>
크기 가변적.
행/열 추가·삭제가 쉬움.
예: 테이블 데이터, 동적 좌석 예약.
📌 2차원 배열/리스트 정리
1️⃣ 기본 예시 (Array 기반)
예시 1: 고정 크기 배열
예시 2: 초기값 채워넣기
2️⃣ 기본 예시 (MutableList 기반)
예시 1: 고정 크기 + 값 변경
예시 2: 행/열 자유롭게 추가
3️⃣ 실전 예시 (Array 기반)
예시 1: 게임 보드 초기화
예시 2: 인접 행렬 (그래프 표현)
4️⃣ 실전 예시 (MutableList 기반)
예시 1: 가변적인 좌석 예약 시스템
예시 2: 다차원 데이터 테이블
중첩 컬렉션
1️⃣ List → Map (List<Map<K,V>>)
✅ 기본 예시
💡 실전 예시
2️⃣ List → Set (List<Set<T>>)
✅ 기본 예시
💡 실전 예시
3️⃣ Map → List (Map<K, List<V>>)
✅ 기본 예시
💡 실전 예시
4️⃣ Map → Set (Map<K, Set<V>>)
✅ 기본 예시
💡 실전 예시
5️⃣ Set → Map (Set<Map<K,V>>)
✅ 기본 예시
💡 실전 예시
6️⃣ Set → List (Set<List<T>>)
✅ 기본 예시
💡 실전 예시
Last updated