nueijeel
[Kotlin 이론] 0511 변수와 함수, 반복문 본문
2023.05.11
1. Kotlin
- JetBrains에서 만든 프로그래밍 언어
- 2017년 Google IO 행사에서 안드로이드 개발 공식 언어로 Kotlin을 지정해 Java를 대체할 언어로 주목받고 있다.
- 코틀린 파일 확장자는 '.kt'로 코틀린 컴파일러가 파일을 컴파일하면 자바 바이트코드가 만들어지고, 이를 JVM이 실행한다.
- 코틀린은 java와 달리 파일명과 클래스명을 다르게 작성해도 된다.
< 코틀린의 특징 >
- 간결한 코드 표현
- 널 안전성 지원
- 자바와의 상호 운용성
- 구조화 동시성
2. 주석
코틀린에서 사용하는 주석은 자바에서 사용하는 주석의 종류와 동일하다
fun main(){
// 한 줄 주석
/*
여러
줄
주석
*/
/** */
}
원래 자바에서 주석을 사용하면 자바 파일이 클래스 파일로 바뀔 때 컴파일러에 의해 주석이 제거되는데, 코틀린에서 주석을 사용하면 자바 바이트 코드로 만들어질 때 빠진다.
3. 기본 출력
print()와 println() 두 가지의 출력문을 사용한다.
fun main(){
print("문자열1")
println("문자열2")
print("문자열3")
print("문자열4")
println("문자열5")
println("문자열6")
println("숫자를 문자열로 출력하는 방법" + 100)
}
print()문은 내용 출력 후 개행하지 않고, println()문은 내용을 출력한 뒤 개행한다.
자바에서는 한 줄의 명령문 끝부분에 반드시 세미콜론을 붙여줘야 했는데 코틀린은 그렇지 않다.
하지만 한 줄에 여러 명령문을 작성하는 경우에는 세미콜론으로 구분해야 한다.
4. 변수
val 변수명 : 타입 = 값
var 변수명 : 타입 = 값
코틀린에서는 변수를 선언할 때 var, val 키워드를 사용한다. val 키워드로 선언한 변수에 저장된 값은 변경할 수 없고, var 키워드로 선언한 변수의 값은 바꿀 수 있다. val은 상수 선언, var은 변수 선언이라고 생각하면 쉬울 것 같다.
코틀린에서는 사용자가 선언하려는 변수의 자료형을 명시하지 않아도 자동으로 타입을 추론해 할당한다. 예제를 살펴보자.
fun main(){
//타입 지정
val data1 : Int = 100
var data2 : Int = 200
//타입 추론
var data3 = 314
var data4 = 3.14
var data5 = "Hello World"
val data6 = 'a'
val data7 = 10000L
val data8 = 9.9f
println("data1 : $data1")
println("data2 : $data2")
println("data3 : $data3")
println("data4 : $data4")
println("data5 : $data5")
println("data6 : $data6")
println("data7 : $data7")
println("data8 : $data8")
}
예제에서 변수 타입을 명시하지 않은 data3 ~ data8의 변수들을 선언했는데 오류나지 않고 정상적으로 작동한다.
println() 출력문을 사용해 변수에 저장된 값들을 출력했다. 자바에서는 변수 값의 출력을 위해 printf()문과 서식 문자를 사용하는데, 코틀린에서는 $ 기호를 통해 변수 값을 직접 출력할 수 있다.
이 예제를 통해 알 수 있는 점은 바로 변수를 선언할 때 반드시 초깃값을 할당해줘야 한다는 것이다.
자바와는 달리 코틀린에서는 변수 선언 시 무조건 초기화를 해야한다.
5. 함수
fun 함수이름 ( 매개변수 ) : 반환타입 { 기능 }
코틀린에서는 fun 키워드를 사용해서 함수를 선언한다. 반환타입은 : 콜론 기호 뒤에 작성해준다.
함수의 매개변수를 정의할 때 반드시 변수 타입을 명시해야 한다.
fun main(){
testFunction1()
testFunction2(1,2)
testFunction3(9)
testFunction3(b2 = 100, b1 = 200)
}
fun testFunction1(){
println("testFunction1 호출")
}
fun testFunction2(a1:Int, a2:Int){
println("testFunction2 호출")
println("a1 + a2 = ${a1+a2}")
}
fun testFunction3(b1:Int = 10, b2:Int = 20):Int{
println("testFunction3 호출")
return b1+b2
}
testFunction1은 매개변수도 반환타입도 없는 함수이고, testFunction2는 매개변수는 있고 반환타입은 없는 함수, testFunction3은 매개변수와 반환타입이 모두 있는 함수이다.
testFunction3의 매개변수에 값이 지정되어 있는데 이 값은 함수 호출 시 인자가 전달되지 않았을 때 저장되는 기본값이다.
따라서 main함수에서 testFunction에 9만 넣어 호출한 경우 b1에 9가 할당되고, b2에는 기본값인 20이 할당된다.
코틀린에서는 testFunction3(b2 = 100, b1 = 200) 처럼 매개변수를 직접 지정해 값을 할당할 수 있는데 이 경우에는 매개변수의 호출 순서가 중요하지 않다.
6. 조건문
- if문
코틀린 if문은 Java의 if문과 동일한 문법을 따른다.
fun main(){
//if문
val a1:Int = 10
if(a1==10){
println("a1은 10입니다.")
}
if(a1==20){
println("a1은 20입니다.")
}
//if-else if-else문
val a2:Int = 100
if(a2==0){
println("a2는 0입니다.")
} else if(a2 == 10){
println("a2는 10입니다.")
} else if(a2 == 50){
println("a2는 50입니다.")
} else{
println("a2는 100입니다.")
}
//값을 저장하는 if-else문
//if와 else로만 이루어져 있어야 하고, 값을 반환하는 형태일 때만 사용
val a3 = if(a1>a2) a1 else a2
println("a3 : $a3")
//각 구문별 블럭 내에서 제일 마지막 줄에 작성된 부분이 변수에 저장된다.
val a5:String = if(a3>0){
val a4:String = ""
a4 += "a3은 0보다 크다"
a4
} else{
val a4:String = ""
a4 += "a3은 0보다 작거나 같다"
a4
}
println("a5 : $a5")
}
단순히 값 저장만을 목적으로 할 때 값을 저장하는 if-else문을 사용한다면 코드를 보다 간결하게 작성할 수 있다.
- when 문
코틀린의 when문은 자바의 switch문과 비슷한 분기문이다. 수식이나 값의 결과에 따라 수행될 부분이 결정된다.
fun main(){
//수행할 코드가 한 줄이면 그냥 작성하고
//두 줄 이상이면 {}로 묶어준다
val a1:Int = 100
when(a1){
10-> println("a1은 10입니다.")
100-> println("a1은 100입니다.")
else-> {
println("a1은 10, 100이 아닙니다.")
println("a1은 10, 100이 아닙니다.")
}
}
//다른 자료형의 변수 값도 조건으로 설정 가능하고(논리값은 불가)
//두 가지 이상의 조건을 한번에 설정하거나 범위를 설정하는 것도 가능하다
val a2: Double = 3.14
when(a2){
1.0 -> println("1.0")
2.0, 3.0 -> println("2.0 or 3.0")
in 4.0..6.0 -> println("4.0 - 6.0")
else -> println("이외의 수")
}
}
분기 조건에 값을 여러 개 작성하거나 값의 범위를 지정해줄 수도 있다.
두 번째 when 문에서는 실수 값을 넣어봤는데 문자나 문자열 같은 값이나 조건식도 사용 가능하다.
7. 반복문
- For문
코틀린에서 for문은 자바의 for문과 달리 in, step, downTo 등의 키워드를 가지고 작성한다.
fun main(){
//1부터 10까지 증가
for(item1 in 1..10){
println("item1 : %item1")
}
//2씩 증가시킬 경우
for(item2 in 1..10 step 2){
println("item2 : %item2")
}
//10부터 1까지 감소
for(item3 in 10..1){
println("item3: $item3")
}
for(item3 in 10 DownTo 1){
println("item3: $item3")
}
//2씩 감소
for(item4 in 10 DownTo 1 step 2){
println("item4: $item4")
}
}
for문에 in 키워드를 사용해서 반복하려는 범위를 나타낸다. 여기서 범위로 지정된 숫자들도 포함하는 범위를 순회한다.
증가 간격은 step 키워드로, 내림차순 범위는 DownTo로 나타낼 수 있다.
- while문
while문과 do-while문은 자바와 동일하게 사용한다.
fun main(){
var a1 = 0
while(a<5){
println("a1 : $a1")
a1++
}
var a2 = 0
do{
println("a2 : $a2")
a2++
}while(a2<5)
var a3 = 0
while(a>0){
println("a3: $a3")
}
do{
println("a3: $a3")
}while(a3>0)
}
while문은 조건을 먼저 검사하고 do-while문은 조건을 마지막에 검사하는 구조를 가진다. 그래서 변수 a3의 값을 출력하는 while문에서는 조건이 거짓이기 때문에 값이 한 번도 출력되지 않고, do-while문에서는 조건이 거짓이어도 값이 한 번 출력된다.
'Kotlin' 카테고리의 다른 글
[Kotlin 이론] 0516 Any, 추상 클래스와 인터페이스 (0) | 2023.05.24 |
---|---|
[Kotlin 이론] 0515 지연 초기화와 오버라이딩 (0) | 2023.05.22 |
[Kotlin 이론] 0515 상속과 접근 제한자 (0) | 2023.05.22 |
[Kotlin 이론] 0512 클래스와 생성자 (0) | 2023.05.19 |
[kotlin 문법] 변수와 데이터 타입 (0) | 2023.02.28 |