본문 바로가기
Kotlin

2. 코틀린 기본 문법

by programmer-ds 2024. 10. 13.

1. 주석

주석 : 코드에 프로그래머의 의견이나 코드의 설명을 적을 수 있는데, 이것을 주석(comment)이라고 한다. 주석은 프로그램 코드에 삽입하더라도 프로그램을 수행하는 데 전혀 영향을 끼치지 않는다. 이유는 컴파일할 때 주석은 자동으로 바이너리 코드에서 제거되기 때문이다.

(Clean Code 관점에서 보면 주석을 최대한 사용하지 않는 것이 좋음. 주석이 없어도 변수명 혹은 함수명 등 식별자로도 충분히 이해할 수 있는 코드가 깔끔한 코드기 때문)

  • 한줄짜리 주석 : //로 시작
  • 여러줄 주석 : /*로 시작  */로 종료
  • KDoc 여러줄 주석 : /**로 시작 */로 종료 (자바독과 비슷한 리치 텍스트 문서 생성)
// 한 줄 주석

/* 여러 줄 주석 */

/* 
여러 
/* 줄 */ Java와 다르게 여러 줄 주석을 여러 번 내포시킬 수 있음
주석 
*/

println("Sample Code") // 한 줄 주석 사용하기

 

 

2. 변수 정의

 

  • 변수 정의 형태
  • 변수 정의 시, val 혹은 var 키워드 사용
  • var (variable, 변수) : 변경 가능한 변수 
  • val (value, 값) : 변경 불가능한 변수 
  • 세미콜론 붙이지 않음
val age = 20

 

  • 사용자의 입력을 받는 함수는 readln() 함수로 사용
  • toInt()함수로 입력받은 값을 int형으로 변경
fun main() {
    val input1 = readln().toInt()
    val input2 = readln().toInt()
    println(input1 + input2)
    
    // val input1 = readLine()!!.toInt()
    // 이전 방식의 input
}

 

  • 변수 이름 뒤에 "콜론(:) + 타입"을 작성하여 타입을 직접 명시하는 것도 가능
val n: Int = 10
val text: String = "Hello World!"

// val n: Int = "Hello World!"
// 에러 발생, 초깃값에 맞는 Type 설정이 필요

 

 

※ IntelliJ에서는 타입을 명시하거나 명시된 타입을 제거하는 단축키가 있음, 캐럿을 변수 식별자에 두고 "Alt + Enter"를 클릭하면 아래와 같이 타입을 자동으로 생성 및 제거 가능

 

  • 초깃값 생략이 가능한데, 초깃값을 생략하기 위해서는 타입을 명시해야 함
  • 초깃값 생략 시, 변수를 사용하기 전에는 꼭 초기화 해야함
  • val 키워드로 만든 변수는 '불변 변수'로 값 변경이 불가능함. 따라서 1번은 초기화가 가능하지만 2번 초기화는 에러 발생
val text: String
// val text
// Error 발생, 타입 명시가 안 되어있어서

// println(text)
// Error 발생, 초기화가 안 된 상태라서

text = "Hello World!"

// text = "Change Again"
// Error 발생, val 키워드로 생성하여 변수 값 변경 불가능하기 때문

println(text)

 

 

3. 식별자

식별자(Identifier)는 변수, 함수, 상수 등에 붙여주는 이름을 말한다.

 

- Kotlin 식별자 규칙

  • 식별자는 문자, 숫자, 언더바(_)만 포함한다.
  • 숫자로 시작할 수는 없다 (ex. 2age)
  • 하드 키워드를 식별자로 쓸 수 없다.
    • 하드 키워드(val, fun, for, if 등)
    • 소프트 키워드(by, catch, import 등)는 특별한 문맥에서만 키워드로 간주되기에, 키워드로 간주되지 않는 경우에 사용 가능
    •  https://kotlinlang.org/docs/keyword-reference.html 코틀린 공식 페이지에서 키워드 리스트 확인 가능
  • 자바와 다르게 코틀린 식별자에는 달러 기호($)를 쓸 수 없음

 

4. 가변 변수

  • val 키워드는 불변(immutable) 변수이기에 한번 초기화하면 다시는 값을 변경할 수 없다. (자바의 final 변수와 같음)
  • 불변 변수를 많이 사용하는 것이 좋음
    • 불변 변수를 사용하면 함수가 부수 효과를 일으키지 못하고, 함수형 스타일 코드를 장려할 수 있음
    • 코드에 대한 추론이 쉬워짐
  • 가변 변수는 아래와 같이 var 키워드 사용
var sum = 1
sum = sum + 2
sum = sum + 3

 

  • 처음 변수에 값을 초기화할 때 설정된 변수 타입은 계속 유지되기 때문에 다른 형식의 타입으로 변경하는 것은 불가능
var sum = 1
sum = "Hello World"

 

  • 복합 대입 연산자 사용 가능
var sum = 1
sum += 2
sum += 3

 

  • 자바와 달리 코틀린 대입은 문(Statement)이다. 따라서 아무 값도 돌려주지 않는다. 이로 인해 코틀린에서는 자바의 a = b = c와 같은 대입문 연쇄를 사용할 수 없다.
  • 증감 연산자 사용이 가능하다.
var num = 1
println(num++)
println(++num)
println(num--)
println(--num)

 

5. 식과 연산자

  • 지금까지 사용한 코틀린식은 다음과 같다.
    • 각 타입에 속하는 구체적인 값을 표현하는 리터럴(12, 3.56)
    • 변수/프로퍼티 참조와 함수 호출(a, readln(), "abc".length, "12".toInt())
    • 전위 후위 단항 연산 ( -a, ++b, c-- )
    • 이항 연산 ( a + b, 2 * 3,  x < 1 )
  • 모든 식은 정해진 타입이 있다.
    • ex) 1이라는 리터럴은 Int 타입이며, readln()이라는 식은 String 타입이다.
  • 함수 호출에 수신된 객체 연산을 포함 시킬 수 있다.
    • 변수 참조와 함수 호출에 점(.)으로 구분된 수신 객체(receiver) 연산을 포함시킬 수 있다.
    • ex) readln().toInt()는 readln()이 만든 String에 정의된 toInt()라는 함수를 호출한다.
  • 연산마다 연산 순서를 결정하는 우선순위가 정해져 있다.
분류 연산자 예제 우선순위를 감안한 해석
후위 ++ -- . a*b++ a * (b++)
++b-- ++(b--)
a*b.foo() a * (b.foo())
전위 + - ++ -- ! +a*b (+a) * b
++a*b (++a) * b
!a || b (!a) || b
곱셈 *, /, % a*b + c (a*b) + c
a - b%c a - (b%c)
덧셈 +, - a + b and c (a + b) and c
중위 이름이 붙은 중위 연산자들 a < b or b < c (a < b) == (b < c)
a == b and b == c (a == b) and (b == c)
비교 < > <= >= a < b == b < c (a < b) == (b < c)
a < b && b < c (a < b) && (b < c)
동등 == != a == b || b != c (a == b) || (b != c)
논리곱(conjunction) && a || b && c a || (b && c)
논리합(disjunction) || a && b || c (a && b) || c
대입 = += -= *= /= %= a = b*c a = (b*c)
a *= a + b a *= (a + b)

 

'Kotlin' 카테고리의 다른 글

4. 코틀린 Null  (1) 2024.11.09
3. 코틀린 자료형  (0) 2024.11.09
1. 코틀린 시작하기 (설치 및 환경 설정)  (2) 2024.10.13