Kotlin

[kotlin] 코틀린 간단 정리

2023. 1. 24. 17:33
목차
  1. 코틀린에서 변수
  2. 초기값을 지정해 주지 않는 경우?
  3. nullable 변수
  4. 객체 인스턴스화

코틀린에서 변수

가변 vs 불변

var number1 = 10L // 가변
val number2 = 10L // 불변

초기값을 지정해 주지 않는 경우?

var 일 때 오류 발생 - 컴파일러가 타입을 추론하기 어렵기 때문에
val 일때 오류 발생 - 최초에 값 지정해 줘야 한다.
val 컬렉션에는 element를 추가할 수 있다.

Primitive Type

  • long은 primitive, Long은 reference type
  • 코틀린은 구분이 없다
    • 박싱 언박싱 때매 성능 이슈 없을까?
      • 코틀린이 알아서 내부적으로 처리한다.

nullable 변수

  • 위의 예시에서 long은 null이 안되지만 Long은 null이 들어갈 수 있다.
  • 코틀린에서는?
var number3: Long? = 1_000L
  • :타입? => null이 들어갈 수 있다는 의미
  • 코틀린은 기본적으로 null이 들어갈 수 없게끔 설계해 줌

객체 인스턴스화

var person = Person("hyang")
  • new를 붙이지 않아야 한다.

null을 다루는 방법

  1. Kotlin에서의 null 체크
  2. Safe Call과 Elvis 연산자
  3. 널 아님 단언!!
  4. 플랫폼 타입
func startWithA1(str: String?) : Boolean {
  return str?.startsWith("A") ?: throw IllegalArgumentException("null")
}
 
 
Elvis 연산자 : 앞의 결과가 null이면 뒤의 값을 실행
fun startsWithA3(str: String?): Boolean {
  return str?.startsWith("A") ?: false
}​
 
 널 아님 단언
  • nullable type이지만, 아무리 생각해도 null이 될 수 없는 경우
    • "얘는 무조건 null이 아니야" 이런 경우
  • null필드가 들어올수 있지만, 사실 그런경우가 없다면 !!를 붙인다.
    • 안붙이면 컴파일러 오류난다.
    • 그렇지만 만약 null이 들어온다면 runtime 오류 난다. (컴파일 오류는 안남)

Kotlin Type

  1. 기본 타입
  2. 타입 캐스팅
  3. 3가지 특이한 타입
  4. String Interpolation, indexing

코틀린은 자바처럼 암시적 타입 변경이 불가하기 때문에 to변환타입()을 사용해야 한다.

 
var number1 = 3
val number2: Long = number1.toLong()
  • 일반 타입은 어떻게 캐스팅할까?
fun printAgeIfPerson(obj: Any?) {
  if( obj is Person) { // java의 instanceof와 같다
    val person = obj as? Person // java에서 Person (obj)와 같다, as Person은 생략 가능
    println(person?.age)
  }
  • instanceof의 반대도 존재 하나?
if( obj !is Person)
  1. 코틀린의 특이한 타입 3가지
  • Any
    • java의 object 역할
    • primitive type의 최상위 타입도 Any
    • Any 자체로는 null을 포함할 수 없어 null을 포함하고 싶다면, Any?
    • Any에 equals / hashCode / toString 존재
  • Unit
    • java의 void와 동일한 역할
    • void와 다르게 unit은 그 자체로 타입 인자로 사용 가능하다. (나중에 제네릭 다룰때 다시 나옴)
    • 함수형 프로그래밍에서 Unit은 단 하나의 인스턴스만 갖는 타입을 의미, 즉 코틀린의 Unit은 실제 존재하는 타입이라는 것을 표현
  • Nothing
    • Nothing은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할
    • 무조건 예외를 반환하는 함수 / 무한 루프 함수 등

Kotlin 예외 처리

try catch finally 구문

fun parseIntOrThrow(str: String): Int {
  try {
    return str.toInt()
  } catch (e: NumberFormatException) {
    throw IllegalArgumentException("주어진 ${str}는 숫자가 아닙니다")
  }
}
  • toType 으로 형변환 (toInt())
  • new가 없음
  • 포맷팅이 간결함

Checked Exception과 Unchecked Exception

fun readFile() {
  val currentFile = File(".")
  val file = File(currentFile.absolutePath + "/a.txt")
  val reader = BufferedReader(FileReader(file))
  println(reader.readLine())
  reader.close()
}
  • kotlin에서는 Checked Exception과 Unchecked Exception을 구분하지 않는다. 모두 UnChecked Exception이다.
    • 즉 throws가 없다.

try with resources

fun readFile(path: String) {
  BufferedReader(FileReader(path)).use { reader ->
    println(reader.readLine())
  }
}
  • kotlin에서는 try with resources가 사라지고 use를 사용

코틀린 함수

  1. 함수 선언 문법
  2. default parameter
  3. named argument
  4. 같은 타입의 여러 파라미터 받기(가변 인자)
// 함수 선언 문법
fun max(a: Int, b: Int) = if (a > b) a else b
// default parameter

fun repeat(
    str: String,
    num: Int = 3,
    useNewLine: Boolean
) {
  for (i in 1..num) {
    if (useNewLine) {
      println(str)
    } else {
      print(str)
    }
  }
}
// named argument

repeat("Hello World", useNewLine = false)
  • 장점 : builder를 직접 만들지 않고 builder의 장점을 가지게 된다.
  • Kotlin에서 Java함수를 가져다 사용할 때는 named argument를 사용할 수 없다.
// 같은 타입의 여러 파라미터 받기 (가변 인자)

fun printAll(vararg strings: String) {
  for (str in strings) {
    println(str)
  }
}

fun main() {
  printAll("A", "B", "C")
  
  val array = arrayOf("A", "B", "C")
  printAll(*array)
}

 

자바 개발자를 위한 코틀린 입문

'Kotlin' 카테고리의 다른 글

[kotlin] kotest styles에 대해서  (0) 2024.01.25
  1. 코틀린에서 변수
  2. 초기값을 지정해 주지 않는 경우?
  3. nullable 변수
  4. 객체 인스턴스화
'Kotlin' 카테고리의 다른 글
  • [kotlin] kotest styles에 대해서
향찡
향찡
백엔드 개발자
향찡
Dev Story
향찡
전체
오늘
어제
  • 분류 전체보기 (97)
    • Java (42)
      • design pattern (7)
      • JavaCafe Study (4)
    • Kotlin (2)
    • Spring (4)
    • TypeScript (1)
    • DevOps (2)
      • AWS (1)
    • DB (4)
      • Real Mysql (2)
      • Redis (1)
    • OS (3)
      • Linux (3)
    • Algorithm (7)
    • Clean Code (1)
    • Git (5)
    • 환경 설정 (2)
    • 그냥 생각 (1)
    • 서평 (12)
      • 한빛미디어, 나는리뷰어다 2022 (4)
    • 세미나 (11)
    • 기타 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 자바스터디
  • 코딩교육
  • java
  • 파이썬
  • 스터디올래
  • 깃 #깃허브
  • 자바
  • 알고리즘
  • 제이펍
  • Kotlin
  • 코딩테스트
  • Real MySQL
  • 백기선
  • git #github #doit #형상관리
  • 유스콘
  • 스터디할래
  • 패캠
  • 백준
  • 인프런
  • 한빛미디어
  • 스터디
  • 자바카페
  • 패스트캠퍼스
  • java #study
  • 코딩자격증
  • fastcampus
  • 패스트캠퍼스후기
  • LeetCode
  • OKKY
  • 자바스크립트

최근 댓글

최근 글

hELLO · Designed By 정상우.
향찡
[kotlin] 코틀린 간단 정리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.