KOTLIN

[Kotlin] 공부 4일차 (2022-01-15)

HJ39 2022. 1. 16. 02:03

코틀린 특징

코틀린 파일 구성

 

  • 코틀린 특징

코틀린은 자바 가상 머신(JVM)에 기반을 둔 언어이기 때문에 JVM에서 실행 가능하다.

확장자로. kt를 사용한다.

코틀린 컴파일러가. kt파일을 컴파일하면 자바 바이트코드가 만들어진다.

 

  • 표현력과 간결함(expressive and concise)

→ 코틀린으로 개발하면 훨씬 간결한 구문으로 작성할 수 있다.

 

  • 안전한 코드(safer code)

→ 널 안전성을 지원하는 언어(널 허용과 널 불허용으로 구분하여 선언한다)

 

  • 상호 운용성(interoperable)

→ 코틀린은 자바와 100% 호환된다.

→ 하나의 앱을 개발할 때 자바와 코틀린을 혼용하여 사용해도 된다.

 

  • 구조화 동시성(structured concurrency)

→ 코틀린 언어가 제공하는 코 루틴(corutines)이라는 기법을 이용하면 비동기 프로그래밍을 간소화할 수 있다.

→ 네트워크 연동이나 데이터베이스 갱신과 같은 작업을 할 때 이용하면 프로그램을 조금 더 간단하고 효율적으로 작성할 수 있다.

 

  • 코틀린 파일 구성
  • package

파일을 컴파일했을 때 만들어지는 클래스 파일의 위치를 나타낸다

 

  • import

package구문 아래 여러 줄 작성할 수 있다.

변수, 함수, 클래스 선언할 수 있다.

 

  • 변수, 함수, 클래스

변수, 함수, 클래스 내부뿐만 아니라 클래스 밖에도 선언할 수 있다.

다 파일을 같은 package에 선언했다면 import 없이 사용 가능하다.

 

  • 변수

val(value), var(variable)을 사용한다.

→ val : 초기값이 할당되면 바꿀 수 없는 변수를 선언할 때 사용

→ var : 초기값이 할당된 후에도 값을 바꿀 수 있는 변수를 선언할 때 사용

val 변수명: 타입 = 값
var 변수명: 타입 = 값

ex)
val data1 = 10
var data2 = 10

fun main(){
	data1 = 20	//오류
	data2 = 20	//성공
}

':'으로 변수 타입을 명시할 수 있다.

→ 최상위에 선언한 변수나 클래스의 변수는 선언과 동시에 초기값을 할당해야 하며, 함수 내부에 선언한 변수는 선언과 동시에 초기값을 할당하지 않아도 된다.

 

  • 초기화 미루기

lateinit, lazy 키워드를 이용하여 초기값을 나중에 할당할 것임을 컴파일러에게 알려준다.

lateinit var data1: Int //오류
lateinit val data2: String	//오류
lateinit var data3: String	//성공

lateinit은 선언과 동시에 초기값을 할당하지 않아도 되지만 2가지 규칙을 따른다.

→ lateinit은 var키워드로 선언한 변수에만 사용할 수 있다.

→ Int, Long, Short, Double, Float, Boolean, Byte 타입에는 사용할 수 없다.

 

 

lazy키워드는 변수 선언문 뒤에 by lazy { } 형식으로 선언하고 변수가 최초로 이용되는 순간 중괄호에 묶은 부분이 자동으로 실행되어 그 결괏값이 변수의 초기값으로 할당된다.

만약 중괄호 부분을 여러 줄로 작성한다면 마지막 줄의 실행결과가 변수의 초기값이 된다.

val data4: Int by lazy{
	println("in lazy...")
	10
}

fun main(){
	println("in main...")
	println(data4 +10)	//20출력
	println(data4 +10)	//20출력
}

 

  • 데이터 타입

코틀린의 모든 변수는 객체이다.

정수를 다루는 Int타입은 기초 데이터 타입이 아니라 클래스이다.

fun someFun(){
	var data1:Int = 10
	var data2: Int? = null

	data1 = data1+10
	data1 = data1.plus(10)	//객체메서드 이용가능
}

data1과 data2를 Int타입으로 선언했다.

만약 Int타입이 기초 데이터 타입이라면 변수에 null을 대입할 수 없고 메서드를 호출할 수 없을 것이다.

하지만 코틀린에서 변수는 객체이므로 null을 대입할 수 있고 객체의 메서드도 호출할 수 있다.

 

→ 코틀린에서 데이터 타입

val a1: Byte = 0b00001011
val a2: Int = 123
val a3: Short = 123
val a4: Long = 10L
val a5: Double = 10.0
val a6: Float = 10.0f
val a7: Boolean = true

val a: Char = 'a'
val str1 = "Hello \n World"
val str2 = """hello world"""

String 문자열에서 """ """ 사이에 들어간 문자열들은 줄 바꿈이나 들여 쓰기 등이 데이터에 그대로 반영된다.

안드로이드 스튜디오에서는 삼중 따옴표를 사용하면 뒤에. trimIndent() 함수가 자동으로 추가되어 앞뒤 공백을 없애준다.

 

String문자열에 변숫값이나 어떤 연산식의 결괏값을 포함해야 할 때는 $기호를 사용한다.(문자열 템플릿이라 한다.) 

 

→ Any

val data1: Any = 10	//정수
val data2: Any = "hello"	//문자열

class User	//클래스
val data3: Any = User()

코틀린에서 최상위 클래스이다.

모든 타입에 사용 가능하다.

 

→ Unit

Unit은 다른 타입과 드레게 데이터의 형식이 아닌 특수한 상황을 표현하려는 목적으로 사용한다.

Unit타입으로 선언 한 변수에는 Unit객체만 대입할 수 있다.(주로 함수에서 반환 문이 없음을 명시적으로 나타낼 때 Unit타입을 사용한다)

fun some(): Unit{	//Unit 타입 사용
	println(10+20)
}

fun some(){		//반환타입을 생략
	println(10+20)
}

 

→ Nothing-null

Nothing으로 선언한 변수에는 null만 대입할 수 있다.

Nothing으로 선언한 변수는 데이터로서는 의미가 없다.

주로 함수의 반환 타입에 사용한다. 어떤 함수의 반환 타입이 Nothing이면 반환은 하지만 의미 있는 값이 아니라는 뜻이다. 그래서 항상 null만 반환하는 함수이거나 예외를 던지는 함수의 반환 타입을 Nothing으로 선언한다.

 

→ null허용, null불허용

위에 설명했듯이 코틀린은 모든 타입은 객체이므로 변수에 null을 대입할 수 있다.

따라서 null값을 허용하거나 허용하지 않아야 하는데 이때 사용하는 기호가 '?'이다.

var data1: Int=10
data = null	//오류

var data2: Int? =10
data2 = null	//성공

 

대부분 쉬운 개념이지만 헷갈리는 부분이 있는 것 같다.

'KOTLIN' 카테고리의 다른 글

[Kotlin] 공부 6일차 (2022-01-18)  (0) 2022.01.18
[Kotlin] 공부 5일차 (2022-01-17)  (0) 2022.01.18
[Kotlin] 공부 3일차 (2022-01-14)  (0) 2022.01.15
[Kotlin] 공부 2일차 (2021-01-08)  (0) 2022.01.09
[Kotlin] 첫 공부 시작 (2022-01-07)  (0) 2022.01.08