1) 코틀린 언어 소개
코틀린 등장 배경
코틀린은 젯브레인스에서 오픈소스 그룹을 만들어 개발한 프로그래밍 언어이다. 2017년 구글에서 안드로이드 공식 언어로 지정되었다. 코틀린으로 안드로이드 앱을 개발할 수 있는 것은 자바의 가상 머신인 JVM에 기반을 둔 언어이기 때문이다. 즉, 코틀린으로 작성한 프로그램은 JVM에서 실행할 수 있다.
코틀린 파일 구성
코틀린 파일의 확장자는 '.kt'이다. 다음은 User.kt라는 이름의 코틀린 파일에 package와 import 구문을 선언하고 data라는 변수, formatDate( )라는 함수, 그리고 User라는 클래스를 선언한 예이다.
package com.example.test3
import java.text.SimpleDateFormat
import java.util.*
var data = 10
fun formatDate(date: Date): String {
val sdformat = SimpleDateFormat("yyyy-mm-dd")
return sdformat.format(date)
}
class User {
var name = "hello"
fun sayHello() {
println("name : $name")
}
}
package 구문은 이 파일을 컴파일했을 때 만들어지는 클래스 파일의 위치를 나타내며 소스파일에서 맨 처음 한 줄로 선언한다. 즉, 이 파일의 클래스 파일은 com/example/test3 폴더에 생성된다.
import 구문은 package 구문 아래에 여러 줄 작성할 수 있다. 그리고 import문 아래에 변수, 함수, 클래스를 선언할 수 있다. 변수와 함수는 클래스 안뿐 아니라 클래스 밖(최상위)에도 선언할 수 있다.
2) 변수와 함수
변수 선언하기
코틀린에서 변수는 val, var 키워드로 선언한다. val은 value의 줄임말로 초깃값이 할당되면 바꿀 수 없는 변수를 선언할 때 사용한다. var은 variable의 줄임말로 초깃값이 할당된 후에도 바꿀 수 있는 변수를 선언할 때 사용한다.
- 변수 선언 형식
val(혹은 var) 변수명: 타입 = 값
데이터 타입
!코틀린의 모든 변수는 객체이다!
Int, Short, Long, Double, Float, Byte, Boolean - 기초 타입 객체
기초 데이터를 객체로 표현하는 타입이다. 정수를 표현하는 Int, Short, Long과 실수를 표현하는 Double, Float, 2진수를 표현하는 Byte, 그리고 true나 false를 표현하는 Boolean 타입이 있다.
Char, String - 문자와 문자열
Char는 문자를 표현하는 타입이다. 코틀린 코드에서 Char 타입의 데이터는 문자를 작음따옴표( ' )로 감싸서 표현하며 Number 타입으로 표현할 수 없다.
Any - 모든 타입 가능
Any는 코틀린에서 최상위 클래스이다. 모든 코틀린 클래스는 Any의 하위 클래스이다. 따라서 Any 타입으로 선언한 변수에는 모든 타입의 데이터를 할당할 수 있다.
예시)
val data1: Any = 10
val data2: Any = "hello"
class User
val data3: Any = User()
Unit - 반환문이 없는 함수
Unit은 다른 타입과 다르게 데이터의 형식이 아닌 특수한 상황을 표현하려는 목적으로 사용한다. 이런 Unit 타입은 주로 함수의 반환 타입으로 사용한다.
예시) 반환문이 없는 함수
fun some(): Unit {
println(10 + 20)
}
Nothing - null이나 예외를 반환하는 함수
Nothing도 Unit과 마찬가지로 의미 있는 데이터가 아니라 특수한 상황을 표현한다. Nothing은 주로 함수의 반환 타입에 사용한다. 어떤 함수의 반환 타입이 Nothing이면 반환은 하지만 의미 있는 값은 아니라는 의미이다.
예시)
fun some1(): Nothing? {
return null
}
fun some2(): Nothing {
throw Exception()
}
함수 선언하기
코틀린에서 함수를 선언하려면 fun이라는 키워드를 이용한다.
fun 함수명(매개변수명: 타입): 반환타입 { ... }
컬렉션 타입
컬렉션타입이란 여러 개의 데이터를 표현하는 방법이며 Array, List, Set, Map이 있다.
Array - 배열 표현
코틀린의 배열은 Array 클래스로 표현한다. Array 클래스의 생성자에서 첫 번째 매개변수는 배열의 크기이며 두 번째 매개변수는 초깃값을 지정하는 함수이다. 배열의 타입은 *제네릭으로 표현한다.
* 제네릭은 선언하는 곳이 아니라 이용하는 곳에서 타입을 지정하는 기법
예시)
val data1: Array<Int> = Array(3, {0})
기초 타입의 배열
앞에서는 배열의 타입을 Array<Int>처럼 제네릭으로 명시한다고 했다. 그런데 만약 배열의 데이터가 기초 타입이라면 Array를 사용하지 않고 각 기초 타입의 배열을 나타내는 클래스를 이용할 수도 있다. 즉, BooleanArray, ByteArray, CharArray, DoubleArray, FlaoutArray, LongArray, ShortArray 클래스를 이용할 수도 있다.
예시)
val data1: IntArray = IntArray(3, {0})
val data2: BooleanArray = BooleanArray(3, { false })
List, Set, Map
List, Set, Map은 Collection 인터페이스를 타입으로 표현한 클래스이며 통틀어 컬렉션 타입 클래스라고 한다.
- List : 순서가 있는 데이터 집합으로 데이터 중복 허용
- Set : 순서가 없으며 데이터의 중복을 허락하지 않음
- Map : 키와 값으로 이루어진 데이터 집합으로 순서가 없으며 키의 중복은 허용하지 않음
Collection 타입의 클래스는 가변 클래스와 불변 클래스로 나뉜다. 불변 클래스는 초기에 데이터를 대입하면 더 이상 변경할 수 없는 타입이다. 그런데 가변 클래스는 초깃값을 대입한 이후에도 데이터를 추가하거나 변경할 수 있다.
구분 | 타입 | 함수 | 특징 |
List | List | listOf( ) | 불변 |
MutableList | mutableListOf( ) | 가변 | |
Set | Set | setOf( ) | 불변 |
MutableSet | mutableSetOf( ) | 가변 | |
Map | Map | mapOf( ) | 불변 |
MutableMap | mutableMapOf( ) | 가변 |
3) 조건문과 반복문
조건문 if ~ else와 표현식
fun main() {
var data = 10
if (data > 0) {
println("data > 0")
}
else {
println("data <= 0")
}
}
if 문에 명시한 조건을 만족하면 if 부분을 실행하고, 그렇지 않으면 else 부분을 실행한다.
조건문 when
fun main() {
var data = 10
when (data) {
10 -> println("data is 10")
20 -> println("data is 20")
else -> {
println("data is not valid data")
}
}
}
when 키워드 다음의 소괄호 ( ) 안에 넣은 데이터가 조건이 되고 이 값에 따라 각 구문을 실행한다. 10 -> println( ) 코드는 when의 조건으로 지정한 데이터가 10이면 -> 오른쪽에 있는 구문을 실행한다.
반복문 for와 while
for 문은 제어 변숫값을 증감하면서 특정 조건이 참일 때까지 구문을 반복해서 실행한다. 이때 for 문의 조건에는 주로 범위 연산자 in을 사용한다.
fun main() {
var sum: Int = 0
for (i in 1...10) {
sum += i
}
println(sum)
}
위 소스는 for문을 이용해 1부터 10까지 더하기를 수행한다. for문의 소괄호 안에 있는 i in 1...10코드는 1부터 10까지 1씩 증가하면서 for문의 실행 영역을 반복하라는 의미이다.
'안드로이드 with 코틀린' 카테고리의 다른 글
08. 사용자 이벤트 처리하기 (0) | 2022.03.10 |
---|---|
07. 뷰를 배치하는 레이아웃 (0) | 2022.03.09 |
06. 뷰를 이용한 화면 구성 (0) | 2022.03.07 |
05. 코틀린의 유용한 기법 (0) | 2022.03.07 |
04. 코틀린 객체지향 프로그래밍 (0) | 2022.03.05 |