3. Operators & expressions

연산자와 표현식

1) 기본 연산자

  • 산술: +, -, *, /, %

  • 비교: >, <, >=, <=

  • 논리: &&, ||, !

  • 대입: =, +=, -=

👉 자바와 같지만, 코틀린에서는 모두 함수 호출로 해석됩니다. 예: a + ba.plus(b)


2) 동등성 / 동일성

  • == → 값 비교 (Java의 equals)

  • === → 참조 비교 (Java의 ==)

val s1 = "hello"
val s2 = "hello"
println(s1 == s2)   // true (내용 비교)
println(s1 === s2)  // true/false (참조 비교, JVM intern 여부에 따라 달라짐)

3) 널 안전 관련 연산자 (복습)

  • Safe call: ?.

  • Elvis: ?:

  • Not-null 단언: !!

👉 이전 파트에서 다룬 내용이지만, 연산자 시스템의 일부로 이해하세요.


4) 타입 검사 연산자

  • is → 타입 검사 (Java의 instanceof)

  • !is → 부정


5) 포함 여부 연산자

  • in, !in → 컬렉션/범위 안에 포함되는지 검사


6) 범위와 진행(Range & Progression)

  • 1..10 → 1에서 10까지 포함

  • until → 끝 값 제외 (0 until 10 → 0~9)

  • downTo, step


7) 연산자 오버로딩

  • 클래스에 특정 함수 이름을 정의하면 연산자를 재정의 가능

  • 예: plus, minus, times, div, get, set, compareTo

👉 자바에는 없는 기능. 👉 다만 남용하지 말고, “의미상 자연스러운” 경우에만 쓰세요.


8) 표현식(Expression) vs 문(Statement)

코틀린의 큰 차별점: 대부분의 제어문이 “표현식”. 즉, 값을 반환할 수 있습니다.

if 표현식

when 표현식

👉 자바의 switch보다 강력. 타입 검사, 범위, 여러 조건 동시 처리 가능.


9) 실무 패턴 예시

A. 안전한 컬렉션 접근

→ 자바의 if-null-check + 삼항연산자 대신 한 줄.

B. 도메인 모델 연산자

→ 도메인 주도 설계(DDD)에서 Value Object를 자연스럽게 다룰 수 있음.

C. when으로 sealed class 분기

→ 컴파일러가 exhaustiveness 검사 → 실수 방지.

Last updated