본문 바로가기
Programming/Kotlin

[ Kotlin ] 코틀린 기초 문법 | 함수와 변수 선언 | Kotlin IN ACTION

by 코뮤(commu) 2021. 10. 4.
728x90
반응형

 

본 포스팅은 Kotlin IN ACTION을 읽은 후의 정리본입니다.

문제 시 댓글로 남겨주세요.

 

 

 

 

 


 

 

 

함수와 변수

 

 

실습에 사용되는 환경은 웹에서 코틀린을 실행시킬 수 있게 만들어둔 환경인 코틀린 플레이그라운드이다.

 

https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS41LjMxIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiLyoqXG4gKiBZb3UgY2FuIGVkaXQsIHJ1biwgYW5kIHNoYXJlIHRoaXMgY29kZS4gXG4gKiBwbGF5LmtvdGxpbmxhbmcub3JnIFxuICovXG5cbmZ1biBtYWluKCkge1xuICAgXHRcbn0ifQ==

 

Kotlin Playground: Edit, Run, Share Kotlin Code Online

 

play.kotlinlang.org

 

 

 

이 환경을 이용하면, 다른 환경 필요없이 브라우저 상에서 코틀린을 실행하고 연습할 수 있기 때문에

기초 문법을 할 때는 이 환경 내에서 코드를 실행할 것 같다.

 

함수

 

 

 

원래 어떤 언어를 배우든지 Hello world를 출력해보는 것이 인지상정이다.

 

위 코드는 main  함수 내에서 그저 Hello, world! 라는 문장을 출력하는 코드이다.

코틀린은 함수를 선언할 때 fun 이라는 키워드를 사용한다.

 

참 재밌다고 생각했다. func 까지도 아닌 fun. 어감이 좋다!

 

또 여기서 우리는 코틀린은 함수를 최상위 수준에 정의할 수 있네?

 

라는 생각을 할 수 있다.

 

 

자바를 기준으로 놓고 봤을 때, 자바는 클래스 내부에 함수가 있었다. 

그렇지만 코틀린은 그렇지 않아도 된다.

 

그리고 System.out.println 대신 println을 사용해 출력했다.

코틀린 표준 라이브러리는 여러 가지 표준 자바 라이브러리 함수를 간결하게 사용할 수 있게 감싼 래퍼를 제공한다.

또한 파이썬과 같이 끝에 세미콜론을 붙이지 않아도 된다.

 

 

이렇게 아무 값도 반환하지 않는 함수를 살펴봤다.

그렇다면 반환값이 존재하는 함수는 그 타입을 어디에 지정할까?

 

아래와 같이 할 수 있다.

 

 

fun add(n1: Int, n2: Int):Int{
    return n1 + n2
}

fun main() {
   	println(add(2,4))
}

 

 

이렇게 타입은 : (콜론) 뒤에 붙여주면 된다.

 

이는 변수에서도 동일하게 적용된다.

 

 

아래 코드를 살펴보자.

 

 

fun max(a: Int, b: Int): Int{
	return if (a>b) a else b
}
fun main(){
	println(max(1,2))
}

 

 

위 예제의 if는 값을 만들지 못하는 문장이 아니라 결과를 만드는 식이다.

 

코틀린에서 if 는 식이지 문이 아니라고 한다.

 

식은 값을 만들고, 다른 식의 하위 요소로 계산에 참여할 수 있지만

문은 자신을 둘러싸고 있는 가장 안쪽 블록의 최상위 요소로 존재하고 아무런 값도 만들어내지 못한다.

 

 

자바에서는 모든 제어구조가 문이지만, 코틀린에서는

루프를 제외한 대부분의 제어 구조가 식이다.

 

 

방금 본 함수를 좀 더 간결하게 표현할 수도 있다.

 

함수 본문이 if식 하나로만 되어있기 때문에,

중괄호를 없애고 return 을 제거하며 등호를 붙이면 된다.

 

 

 

fun max(a:Int, b: Int): Int = if (a>b) a else b
fun main(){
	println(max(1,2))
}

 

 

본문이 중괄호로 둘러싸인 함수는 블록이 본문인 함수라 칭한다.

등호와 식으로 이뤄진 함수는 식이 분문인 함수라 칭한다.

 

 

 

반환 타입을 생략하면 max 함수를 더 간략하게 만들 수도 있다.

 

식이 본문인 함수는 굳이 사용자가 반환타입을 적지 않아도 컴파일러가 함수 본문 식을 분석해 자동으로 알아서 정해준다.

 

변수

 

변수 선언은 아래와 같이 할 수 있다.

 

fun main(){
	val a: Int
    val b = 3
    val c = "안냐세여"
}

 

 

 

변수 선언 시 사용하는 키워드는 2가지가 있다.

 

 

  • val
  • var

 

val은 값을 뜻하는 value 에서 따왔다.

val 키워드로 변수선언 하면 변경 불가능한 참조를 저장한다.

val 로 선언된 변수는 한번 초기화하면 다시 대입하는 것이 불가능하다. 자바의 final 변수라고 생각하면 된다.

 

var은 변수를 뜻하는 variable 에서 따왔다.

var 키워드로 변수를 선언하면 변강 가능한 참조이다.

자바에서 우리가 일반적으로 선언한 변수이다.

 

 

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

 

아래 코드도 된다는 말이다.

 

 

fun main(){
	val lang = arrayListOf("Java")
    lang.add("Kotlin")
    
    println(lang)  
}

 

 

또 유의해야할 점은, var 키워드를 사용하면 변수의 값을 변경할 수 있지만,

변수의 타입은 고정되어 바뀌지 않는다는 것이다.

 

 

처음 정수형으로 초기화를 한 변수 a가 있다고 가정했을 때, 이 a 에 string 인 "hello" 을 대입할 수 없다는 소리다.

 

아마 이 경우 타입 미스매치 컴파일 오류가 발생할 것이다.

 

 

 

 

728x90
반응형