코틀린 기본 구문 (제어문, 클래스)
*참고저서 <오준석의 안드로이드 생존코딩>
1. 제어문
1) if
자바의 if 문과 동일하다.
val max = if (a>b) a else b
와 같이 식으로도 사용이 가능하다.
2) when
자바의 switch 문에 대응하는 제어문이다. 조건을 상수값 하나로 주는 것은 당연히 가능하고
in 키워드를 이용해 범위로 주는 것도, else와 같이 지정하는 것도 가능하다. 자바에서는 각 case마다 break문이 필요했으나, 코틀린은 그렇지 않다. '숫자..숫자'의 문법은 두 숫자간의 범위를 말한다. 뒤 쪽 숫자도 포함하는 범위이다.
val x = 1
when (x) {
1 -> println("x==1")
2,3 -> println("x==2 or x==3")
in 4..7 -> println("4~7")
!in 8..10 -> println("not 8~10")
else -> {
println("else")
}
}
if문처럼 식으로 사용할 수도, 함수의 반환값으로 사용할 수도 있다.
3) for
코틀린의 for문은 자바의 foreach에 대응된다. 파이썬의 for라고 말할 수도 있다.
감소식에서는 downTo, 증가 범위 설정시 step을 사용한다.
val numbers = arrayOf(1,2,3,4,5)
for (num in numbers) {
println(num)
}
for (i in 10 downTo 0 step 2) {
println(i)
}
4) while
자바의 while과 같다. do-while 문 역시 사용이 가능하다.
2. 클래스
코틀린에서 클래스를 선언하고 인스턴스를 생성하는 법은 다음과 같다.
class Person{
}
val person = Person()
인스턴스 생성 시 자바와는 다르게 new 키워드를 사용하지 않는다.
1) 생성자
코틀린에서 생성자를 작성할 때는 constructor라는 키워드를 사용한다.
class Person {
constructor(var name:String) {
println(name)
}
}
생성자 외에도 init블록에 작성한 코드가 가장 먼저 초기화된다.
class Person (var name:String) {
init {
println(name)
}
}
2) 프로퍼티
코틀린에서는 자바의 getter/setter등을 기본으로 제공하기에, 프로퍼티로 곧바로 접근하면 된다.
class Person (var name:String) {
}
val person = Person()
person.name = "홍길동"
println(person.name)
3) 접근 제한자
public: 전체 공개. 기본값
private: 현재 파일 내부에서만 사용 가능
internal: 같은 모듈 내에서만 사용 가능
protected: 상속받은 클래스에서 사용 가능
4) 상속
코틀린에서는 기본적으로 상속이 금지돼 있다. 상속을 하려할 시 부모 클래스를 open으로 명시해줘야 한다.
open class Animal(val name: String) {
}
class Dog(name:String): Animal(name) {
}
그 외에도 내부 클래스를 선언할 시 inner를 앞에 붙여줘야 하고, 추상 클래스의 경우 자바와 동일하다.