본문 바로가기
프로그래밍언어/Kotlin

[Kotlin] : 코틀린 기초

by 오주현 2022. 4. 17.
반응형
fun main(args: Array<String>) {
    println("Hello, World!")
}

코틀린은 함수를 선언할 때 fun 키워드를 사용한다. 그리고 파라미터 이름 뒤에 그 파라미터의 타입을 적어준다. 변수를 선언할 때에도 마찬가지다.

 

또, 함수를 최상위 수준에 정의할 수 있어서 자바와 달리 꼭 함수를 클래스에 넣을 필요가 없다.

 

System.out.println 대신 println을 사용한다. 이처럼 자바 라이브러리 함수를 간결하게 사용할 수 있게 감싼 Wrapper, 래퍼를 제공한다.

 

마지막에 세미콜론(;)을 붙이지 않아도 된다.


블록이 본문인 함수, 식이 본문인 함수

fun max(a:Int, b:Int): Int {
     return if (a>b) a else b
 }

함수 이름(파라미터 목록): 반환 타입 { 함수 본문} 이렇게 함수가 이루어진다. Java의 3항 연산식과 비슷하다.

 

fun max(a: Int, b: Int): Int = if (a > b) a else b

위에 식을 더 간결하게 한 줄로 식이 본문인 함수도 작성이 가능하다. 중괄호를 없애고 return을 제거하고 등호(=)를 넣어 더 간결하게 표현이 가능하다.

 

코틀린에서는 식이 본문인 함수가 자주 사용된다.

 

여기서 반환 타입을 생략할 수 있는 이유는 사용자가 반환 타입을 적지 않아도 컴파일러가 함수 본문 식을 분석해서 식의 결과 타입을 함수 반환 타입으로 정해준다.


변수

val answer = 42
val answer: Int = 42

타입 추론으로 타입 표기를 생략해도 되고 명시해도 된다. 타입을 지정하지 않으면 컴파일러가 초기화 식을 분석해 초기화 식의 타입을 변수 타입으로 지정한다.

 

초기화 식을 사용하지 않고 변수를 사용하려면 변수 타입을 반드시 명시해야 한다.

초기화 식은 = 42를 말한다.


변경 가능한 변수, 변경 불가능한 변수

변수 선언 시 키워드는 2가지다.

 

val : 변경 불가능한 참조를 저장하는 변수, 자바로 따지면 final 변수

var : 변경 가능한 변수, 자바로 따지면 일반 변수

 

기본적으로는 모든 변수를 val 키워드를 사용해 불변 변수로 선언하고 나중에 꼭 필요할 때에만 var로 변경해서 사용하자.

 

val message: String
 if (canPerformOperation()) {
     message = "Success"
//..연산 수행
 } else {
     message = "Failed"
 }

val 참조 자체는 불변이지만 참조가 가리키는 객체의 내부 값은 변경될 수 있다.

 

message는 val로 불변 객체로로 선언됐지만 message가 가리키는 값 자체는 변경이 가능한 것이다.(Success, Failed)

 

var answer = 42
answer = "no answer" // <- 컴파일 오류가 발생한다.

위 코드는 오류 코드이다. var 키워드는 변수의 값을 변경할 수 있지만 타입은 고정된다. 때문에 위 코드는 오류가 발생하게 된다. 컴파일러가 기대하는 타입은 Int 타입이다. 타입이 다른 String 타입은 오류를 발생시킨다.

 


더 쉽게 문자열 형식 지정: 문자열 템플릿

fun main(args: Array<String>) {
    val name = if (args.size > 0) args[0] else "Kotlin"
    println("Hello, $name!")
}

문자열 템플릿이라는 기능을 보여준다.

 

name 변수를 선언하고 다음 줄에 있는 문자열 리터럴 안에서 변수를 사용했다.

문자열 리터럴 사용을 위해 변수 앞에 $를 추가해서 변수와 같이 넣어주었다.

Java의 (”Hello, ” + name + “!”)와 같다고 보면 된다. 대신 더 간결하고 효율적이다.

여기서 만약 $name 문자 자체를 출력시키고 싶다면 \\ 를 넣어 \\$name 로 사용하면 $name가 출력이 된다.

fun main(args: Array<String>) {
     println("Hello, ${if (args.size > 0) args[0] else "someone"}!")
 }

중괄호로 둘러싼 식에서 큰 따옴표를 사용할 수도 있다.

반응형

댓글