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 |