코틀린 시작해보기 : 변수 선언부터 클래스까지

문지은·2021년 9월 13일
0

이번에 YAPP 이라는 동아리에서 백엔드를 맡게 되었다. 그래서 이번에 시작할 프로젝트의 설정을 다른 백엔드 분과 상의하다가 코틀린으로 서버를 해보는게 어떻냐는 의견이 나왔다. 간만에 새로운 언어도 배우고 코틀린이 뭐길래 그렇게 난리인지 확인도 해볼 겸 코틀린으로 서버를 구성하게 되었다.


😎 코틀린으로 hello world도 못 찍는 코린이의 코틀린 서버 구현기! 😎


그 첫번째는 코틀린의 문법을 알아보도록 하자.

구글의 Kotlin 언어 배우기 문서를 참조했다 : 구글 Kotlin 문서

변수 선언

// 변하는 변수에 var 사용
var count: Int = 10
count = 15

// 변하지 않는 변수에 val 사용
val languageName: String = "Kotlin"

코틀린에서의 var는 자바에서의 final 역할

val languageName = "Kotlin"
val upperCaseName = languageName.toUpperCase()

// type이 맞지 않아서 에러 발생 !
languageName.inc()

정적으로 입력된 언어. 컴파일 시간에 유형이 결정되고 절대 변하지 않는다.

// 코틀린은 null 허용하지 않음. 에러 발생 !
val languageName: String = null

// String? 유형을 사용해서 nullable 로 사용 가능 -> 신중히 사용하기
val nullableName: String? = null

조건부

// if else 사용
val answerString: String = if (count == 42) {
	"answer"
} else if (count < 42) {
	"smaller than answer"
} else {
	"bigger than answer"
}

println(answerString)

// when 표현식으로 가독성 높인 버전
val answerString = when {
	count == 42 -> "answer"
	count < 42 -> "smaller than answer"
    else -> "bigger than answer"
}

println(answerString)

코틀린에는 삼항 연산자가 없다!

함수

함수의 기본형을 먼저 살펴보자

// return 이용
fun answerFunction(countThreshold: Int): String {
    return if (countThreshold == 42) {
        "answer"
    } else if (countThreshold < 42) {
        "smaller than answer"
    } else {
        "bigger than answer"
    }
}

// 할당 연산자 이용
fun answerFunction(countThreshold: Int): String =
    if (countThreshold == 42) {
        "answer"
    } else if (countThreshold < 42) {
        "smaller than answer"
    } else {
        "bigger than answer"
    }

코틀린에도 익명 함수가 있다.

// 익명 함수
val lengthFunc: (String) -> Int {input -> input.length}

// 익명 함수 활용 예시
val length: Int = lengthFunc("몇 글자 일까요?")

다른 함수를 인자로 받는 고차 함수는 다음과 같다.

// 함수를 다른 함수의 인자로 받는 경우 : 고차 함수
fun lengthMapper(str: String, mapper: (String) -> Int): Int {
	return mapper(str)
}

// 위의 함수 활용 예시
lengthMapper("고차 함수 활용해볼까용"), { input -> input.length })
lengthMapper("마지막 매개변수가 익명함수면 이렇게도 쓸 수 있답니다") { input -> input.length }

클래스

// car 클래스의 생성자 예시
class Car(val wheels: List<Wheel>) {
	private val doorLock: DoorLick = ...
    
    fun unlockDoor(key: Key) : Boolean {
    	// do something
    }
}

// 클래스 인스턴스 생성
val wheels = listOf<Wheel>
val car = Car(wheels)
profile
백엔드 개발자입니다.

0개의 댓글