1. 변수
- 자바와 다르게 코틀린에서는 타입 지정을 생략하는 경우도 많다.
- 변수는 변경이 가능한 변수, 변경이 불가능한 변수로 나뉜다.
val -> 변경 불가능한 변수(Value)
var -> 변경이 가능한 변수(Variable)
- 만약, 초기화 식을 사용하지 않고 변수를 선언하려면 변수 타입을 반드시 명시해야 한다.
2. Nullable
- 코틀린은 null이 될 수 있는 변수와 될 수 없는 변수를 구분해서 변수로 선언하기 때문에 null로부터 안전성을 갖는다.
- 코틀린에서는 null 값을 대입하려면 명시적으로 null이 될 수 있는 변수로 선언해야 한다.
변수에 null을 대입하려면 타입에 물음표(?) 기호를 이용하여 표현한다.
- A?: B -> A가 null이면 B 실행
- A?. length -> A가 null이면 null, null이 아니라면 length
- A!! B -> A가 null이 아닐 때만 B 실행, null이면 예외 발생
3. 상수 변수(Const)
- 먼저, 상수 변수란 처음에 초깃값을 변경하지 않고 그대로 사용하는 변수를 뜻한다.
코틀린에서는 위와 같은 변수를 만들 때 const라는 예약어를 붙인다.
상수 변수는 값이 변하지 않기 때문에 var을 사용할 수 없고, 최상위 레벨로 선언할 때만 사용할 수 있다.
const val myConst : Int = 10 //가능
const var myConst2 : Int = 20 //불가능
class MyClass {
const val myConst3 = 30 //불가능
}
4. 함수
- 코틀린에서 함수를 선언할 때는 fun이라는 예약어를 사용한다.
- 자바의 void처럼 반환 값이 없을 때는 Unit으로 명시한다. 하지만, Unit은 생략이 가능하고 만약 반환 타입이 선언되지 않았다면 기본으로 Unit이 적용된다.
fun helloWorld() {
println("Hello World")
println(add(3, 5))
}
fun add(a: Int, b: Int): Int {
return a + b
}
위와 같이 반환 타입을 명시해주어야 한다.
또한, 단일 구문으로 값을 반환하는 함수라면 중괄호를 생략하고 등호를 이용해 쉽게 정의할 수 있다.
fun add(a: Int, b: Int) : Int = a+b
5. 데이터 타입
- 먼저, 코틀린에서는 모든 것을 객체로 간주한다. 다른 언어에서는 데이터 타입을 명시할 때 int, double 등의 기초 타입과 Integer, Double 등의 Wrapper 클래스로 구분해서 사용하지만, 코틀린에서는 기초 타입 자체가 존재하지 않는다.
- 숫자 타입
코틀린의 숫자 타입 클래스들은 모두 Number 클래스의 서브 클래스이다.
코틀린에서 문자는 숫자 타입이 아니며, 숫자 타입에 대한 자동 형 변환을 제공하지 않는다.
숫자 타입에 값을 대입할 때의 규칙
- Decimals, Hexadecimals, Binaries 값 대입 가능
- Long 형은 값 뒤에 'L' 사용
- 실수 기본형은 Dobule
- 실수형은 10.0e2로도 표현 가능
- Float 형은 값 뒤에 'f', 'F' 사용
- 숫자 타입에 대입되는 데이터에 밑줄(_) 추가 가능 -> 보기 편하게 만들기 위한 표현식이고, 값에는 영향을 주 지 않음
- 논리, 문자와 문자열 타입
논리 타입 : 다른 언어들과 마찬가지로 논리합(||), 논리곱(&&), 부정(!)을 사용한다.
문자 타입 : Char 타입은 작은따옴표('')로 표현하고, 코틀린의 Char 타입은 Number타입으로 표현되지 않음(아스키 값 X)
문자 타입 : String 문자열은 큰따옴표("", """)로 표현이 가능하다. """은 키보드에서 입력한 엔터 등의 값이 문자열에 그대로 적용된다.
- 문자열 템플릿 사용 가능(문자열 리터럴이 필요하다면 ${변수명}를 사용한다.)
- Any 타입
코틀린 클래스의 최상위 클래스로, Any는 어떤 타입의 데이터도 대입할 수 있다.
즉, 특정 변수에 대입되는 타입을 예측할 수 없을 때 유용하게 사용할 수 있다.
데이터 타입의 캐스팅은 toXXX()를 사용한다. ex) toString(), toInt()
- 컬렉션 타입
배열(Array)
Array는 get(), set(), size() 등의 함수를 표함 하는 클래스이다.
배열을 만드는 가장 간단한 방법은 arrayOf() 함수를 이용한다.
List - 순서가 있는 데이터 집합, 데이터의 중복 허용
Set - 순서가 없으며 데이터의 중복 허용 x
Map - 키와 값으로 이루어지는 데이터의 집합, 순서와 데이터의 중복 허용x
이터레이터(Iterator) : 컬렉션 타입의 데이터를 hasNext(), next() 함수를 이용해 차례로 얻어서 사용하기 위한 인터페이스.
여기서 hasNext() 함수는 가져올 수 있는 데이터가 있으면 true, 없으면 false 반환
next()는 실제 값을 가져올 때 사용
- 코틀린에서는 &, |, 비트 연산자(~, <<, >>, ^), 삼항 연산자(? a : b) 등을 제공하지 않는다.
6. 조건문
if : 사용 방식은 다른 프로그래밍 언어와 비슷한데, 코틀린에서는 if문이 표현식으로 사용 가능하다.
여기서 표현식이란 변수, 상수, 연산자, 함수로 구성되어 무언가 값을 만드는 문장을 의미한다.
만약 if가 표현식으로 사용되면 else 문을 생략할 수 없기 때문에 주의해야 한다.
when
when은 자바의 switch-case문과 유사하지만 기능이 더 다양하다.
인수로 지정한 값과 일치하는 분기 조건을 찾아서 실행하는 로직은 유사하지만, when에서는 기존 switch-case문과 다르게 정수 이외에도 다양한 타입의 데이터를 지정할 수 있고, 아예 데이터 타입 자체를 지정할 수도 있다.
if문과 동일하게 when도 코틀린에서는 표현식으로 사용된다.
fun checkNum(score : Int) {
when(score) {
0 -> println("0")
1 -> println("1")
2, 3 -> println("2, 3")
else -> println("random")
}
var b = when(score) {
1-> 1
2 -> 2
else -> 3
}
println("b : $b")
//a..b : a에서 b사이
when(score) {
in 90..100 -> println("good")
in 10..80 -> println("notbad")
else-> println("okay")
}
}
위처럼 다양한 방식으로 사용 가능하다.
7. 반복문
반복문은 다른 언어들과 유사하게 사용된다.
fun forandWhile() {
//컬렉션 타입의 데이터 개수만큼 for문 반복
val students = arrayListOf("joyce", "james", "jenny", "jennifer")
for(name in students){
println("${name}")
}
//1부터 100전까지의 합구하기(until은 뒤의 값 전까지)
var sum : Int = 0
for(i in 1 until 100) {
sum += i
println(sum)
}
//기본적인 while문
var index = 0
while (index < 10) {
println("current Index : ${index}" )
index++
}
}
코틀린 (프로그래밍 언어) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 코틀린패러다임다중 패러다임 (객체 지향, 함수형, 명령형, 선언형, 범용, 블록, 반영, 병행)설계자젯브레인즈개발자젯브레인즈발표일2011년 7월 22일(12년 전)(201
ko.wikipedia.org
Kotlin Programming Language
kotlinlang.org
https://developer.android.com/kotlin?hl=ko
Kotlin과 Android | Android Developers
Kotlin은 최신 Android 개발을 위해 Android에서 권장되는 프로그래밍 언어입니다.
developer.android.com
참고 서적
- 깡샘의 코틀린 프로그래밍