본문 바로가기
안드로이드/Kotlin

Kotlin 개념, 문법

by step 1 2021. 6. 13.
반응형

자바를 보완하기 위한 언어 (자바와 100% 호환이 된다.)

안드로이드 개발 공식 언어이다.

 

코틀린 공식 사이트

https://kotlinlang.org/

 

Kotlin Programming Language

 

kotlinlang.org

 

함수선언 문법

fun sum(a: Int, b: Int): Int {
	return a + b;
}

fun sum(a: Int, b: Int) = a + b

fun max(a: Int, b: Int) = if (a > b) a else b

변수(var), 상수(val) 선언

val a: Int = 1

val b = 2

val c = 3.14

val d: String
// d = "d의 초기값이 없으면 null이 될 수 있는데, kotlin은 null이 가능한 타입과 아닌 타입이 있기때문에
에러가 발생할 수 있다."
d = "필수로 있어야 하는 구문"

val e: String?

var d: String = "첫번째 초기화"
e = "두 번째 초기화"

For 반복문

for (i in 1..5){
	println(i)
}
// 1 2 3 4 5

for (i in 6 downTo 0 step 2) {
	println(i)
}
// 6 4 2 0

for (i in 1..5 step 3) {
	println(i)
}
// 1 4

val numberList = listOf(100, 200, 300)
for (number in numberList){
	println(number)
}
// 100 200 300

While 반복문

var x = 5
while (x > 0) {
	println(x)
    x--
}
// 5 4 3 2 1

x = 0
while (x > 0) {
 	println(x)
    x--
}
// 출력 없음

var y = 0
do {
	print(y)
    y--
} while (y > 0)
// 0

 

IF 문

var max: Int
if (a > b) {
	max = a
} else {
	max = b
}

// As expression
val max = if (a > b) {
	print("Choose a")
    a
} else {
	print("Choose b")
    b
}

when 문(자바에 switch문 대신)

when (x) {
	1 -> print("x == 1")
    2 -> print("x == 2")
    else -> {
    	print("x is neither 1 nor 2")
    }
}

when (x) {
	0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}

when (x) {
	in 1..10 -> print("x는 1부터 10범위 안에 있음")
    !in 1..20 -> print("x는 1부터 20범위 안에 없음")
    else -> print("otherwiese")
}

when (x) {
	is Int -> print("x는 인트형")
    else -> print("x는 인트형이 아님")
}

 

Null Safe

Integer a = 100;

//null 허용
val b: Int? =100

//null 허용X
val c: Int = 100

a = null;
// 중략
a.sum(); // NullPointException이 날 수도 있음

// null safe 한 코드를 구성해야함
if (a != null) {
	a.sum();
}

b?.sum() // null일 경우 실행하지 않음
c.sum() // 애초에 nullsafe함

 

Scope Function (apply, with, let, also, run)

코드를 좀더 읽기 쉽게 수정할 수 있다

사이트

https://kotlinlang.org/docs/scope-functions.html#function-selection

 

Scope functions | Kotlin

 

kotlinlang.org

Apply함수

객체의 확장함수(자바의 생성자와 같은 역할, 객체를 초기화할 때 사용)

val person = Person().apply{
	firstName = "Fast"
    lastName = "Campus"
}

 

Also 함수

람다 입력값을 받고 다시 리턴(객체의 유효성 확인, 디버깅 용도로 사용)

Random.nextInt(100).also {
	print("getRandomInt() generated value $it")
}

Random.nextInt(100).also { value ->
	print("getRandomInt() generated value $value")
}

 

Let 함수

null이 아닌 객체에서 사용

val number: Int?

// null이 아닐 경우 sum 사용 null일 경우 빈값으로 치환
val sumNumberStr = number?.let {
	"${sum(10, it)}"
}.orEmpty()

 

With 함수

person에 있는 함수를 사용

val person = Person()

with(person) {
	work()
    sleep()
    println(age)
}

 

Run 함수

객체 구성과 결과계산이 한번에 실행될 때 유용

val result = service.run {
	port = 8080
    query()
}

Data Class

데이터를 저장하는 목적으로 만든 클래스

// 생성자, getter, setter 등 모두 만들어 진다.
data class JavaObject(var s: String)

 

Lambda expression

// 자바방식
button.setOnClickListener(new View.OnClickListener() {
	@Override
    public void onClick(View view) {
    	...
    }
})

// kotlin 방식
button.setOnClickListener { v ->
	
}

 

lateinit

변수를 나중에 초기화 하는 방법

var nullableNumber: Int? = null

lateinit var lateinitNumber: Int

// 추후 초기화 하는 코드
lateinintNumber = 10

// 사용할 때
nullableNumber?.add()

lateinitNumber.add()

 

반응형

'안드로이드 > Kotlin' 카테고리의 다른 글

로또 추첨기 만들기 - 1  (0) 2021.06.20
BMI 계산기 - 계산 기능  (0) 2021.06.13
BMI 계산기 - 레이아웃  (0) 2021.06.13
안드로이드 스튜디오 에러  (0) 2021.06.13