2022. 12. 4. 01:15ㆍ_Study/AndroidStudio
코틀린 언어 소개
본 자료는 강의 학습자료 입니다.
코틀린의 등장 배경
코틀린은 젯브레인스(JetBrains)에서 오픈소스 그룹을 만들어 개발한 프로그래밍 언어로 2017년 구글에서 안드로이드 공식언어로 지정하였다. JVM에 기반을 둔 언어로 자바소스와 굉장이 비슷하다. 따라서 큰 강점이 있다.
- 최신 언어 기법을 이용하면 훨씬 간결한 구문으로 프로그램을 작성할 수 있다.
- 코틀린은 널 안정성null Safety을 지원하는 언어이다.
- 코틀린은 자바와 100% 호환된다.
- 코루틴 coroutines 라는 기법을 이용시 비동기 프로그래밍을 간소화 할 수 있다.
코틀린 소스 -> 자바 바이트코드 -> 자바 가상머신
코틀린 소스를 테스트하는 방법
코틀린 소스를 테스트하는 방법 main()/ 함수 실행방법 (tistory.com)
fun main(){
println("hello world")
}
링크참고
변수와 함수
변수 선언하기
변수는 val, var 키워드로 선언
val은 value의 줄임말로 초깃값이 할당되면 바꿀 수 없는 변수를 선언
var는 variable의 줄임말로 초깃값이 할당된 수헤옫 값을 바꿀 수 있는 변수를 선언
val 변수명: 타입 = 값
- 타입 지정과 타입 추론
- 변수명 뒤에는 콜론(;)을 추가해 타입을 명시
- 대입하는 값에 따라 타입을 유추할 수 있을 때에는 생략
- 초깃값 할당
- 최상위에 선언한 변수나 클래스의 멤버 변수는 선언과 동시에 초깃값을 할당해야하며(전역변수로 선언), 함수 내부에 선언한 변수는 선언과 동시에 초깃값을 할당하지 않아도 됩니다.(field가 됨)
package com.example.ch3
fun main(){
println("in main....")
someFun()
}
val data1: Int // 오류 : 최상위에 선언 동시에 초깃값
val data2 = 10
fun someFun(){
var data3: Int // 함수내부라서 가능
println("data3: $data3") // 오류 : 값이 없음.
data3 =10
println("Data3: $data3")
}
class User {
val data4: Int // 오류 : 클래스말고 함수내부만 가능
val data5: Int = 10
}
- 초기화 미루기 (늦은 초기화)
- lateinit 키워드는 이후에 초깃값을 할당할 것임을 명시적으로 선언
- var 키워드만 가능
- String가능. Int, Long, Short, Float, Boolean, Byte 타입 불가
- by lazy{} 형식으로 선언, 소스에서 변수가 최초로 이용되는 순간 묶은 부분이 자동으로 실행되어 그 결괏값이 변수의 초깃값으로 할당
- by lazy 실행화면
package com.example.ch3
val data by lazy{
println("lazy")
10
}
fun main(){
println("in main....")
println(data+4)
println(data+10)
}
- 데이터 타입 : 코틀린의 모든 변수는 객체
Int, Short, Long, Double, Float, Byte, Boolean - 기초 타입 객체
Char, String - 문자와 문자열
- String 타입의 데이터는 큰따옴표나 삼중따옴표로 감싸서 표현
package com.example.ch3
fun main(){
println("in main....")
var str1 = "Hello \n world"
var str2 = """
Hello
WORLD
""".trimIndent()
println(str1)
println(str2)
}
문자 표현
아스키코드처럼 if 문을 숫자로 변환하여 사용할 수 없다.
문자열 템플릿 : String 타입의 데이터에 변숫값이나 어떤 연산식의 결괏값을 포함해야 할 때는 $ 기호를 이용해야 한다.
package com.example.ch3
fun main(){
println("in main....")
fun sum(no: Int):Int{
var sum =0
for(i in 1..no){
sum += i
}
return sum
}
val name: String = "kkang"
println("name : $name, sum ${sum(10)}, plus : ${10+20}")
}
Any - 코틀린에서 최상위 클래스 : Any 타입 변수에는 모든 타입의 데이터 할당이 가능하다.
Unit - 데이터의 형식이 아닌 특수한 상황을 표현 : Unit 타입 변수 선언은 가능하나 의미는 없음
- 반환문이 없는 함수의 반환타입으로 주로 사용
- 함수의 반환 타입을 생략하면 자동으로 Unit이 적용된다.
Nothing : 의미 있는 데이터가 아닌 특수한 상황을 표현
- Nothing으로 선언한 변수에는 null 만 대입할 수 있음
- 함수의 반환타입이 Nothing 이면 반환은 하지만 의미 있는 값은 아니라는 의미
- 항상 null 만 반환하는 함수나 예외를 던지는 함수의 반환 타입을 Nothing 으로 선언
널 허용과 널 불허용 (nullable vs not null)
- 널 허용 변수: 타입 뒤에 ?를 붙여서 변수선언
- 널 불허용 변수 : 타입 뒤에 ? 없이 변수 선언
package com.example.ch3
fun main(){
println("in main....")
val data1: Nothing? = null
val data10 : Nothing =null
//val data2: Any = null // ? 없으면 any도 안되나봄
val data3: Any? = null
var data5 : Int =10
//data5 = null // ? 없음
var data6: Int? = 10
data6 = null
fun some1():Nothing?{
return null
}
fun some2(): Nothing{
throw java.lang.Exception()
}
fun some3(): Nothing{
throw null // ? 없어서 오류
}
some1()
some2()
}
nothing 이라도 ?가 없으면 null을 집어 넣을 수 없다.
nothing? = null
nothing = Exception()
함수 선언하기
함수를 선언하려면 fun이라는 키워드를 이용한다.
반환타입을 선언할 수 있으며 생략하면 자동으로 Unit 타입이 적용된다.
함수의 매개변수에는 var나 val 키워드를 사용할 수 없으며 val이 자동으로 적용된다.
함수의 매개변수값을 변경할 수 없다.
fun 함수명(매개변수명 : 타입): 반환타입 {...}
함수의 매개변수에는 기본값 선언이 가능하다.
package com.example.ch3
fun main(){
println("in main....")
fun some(data1:Int, data2:Int =10): Int{
return data1*data2
}
println(some(10))
println(some(10,20))
}
매개변수명을 지정하여 호출하는 것을 명명된 매개변수 라고 하며, 이렇게 하면 함수 선언문의 매개 변수 순서에 맞춰 호출하지 않아도 된다.
컬렉션 타입
Array - 배열 표현
배열은 Array 클래스로 표현하며 배열의 데이터에 접근할 땐 대괄호를 이용해도 되며 set() 이나 get() 함수를 이용해도 된다.
val data1: Array<Int> = Array(3,{0})
기초 타입의 배열
- 기초타입이라면 Array를 사용하지 않고 BooleanArray, ByteArray, CharArray, DoubleArray, FloatArray, IntArray, LongArray, ShortArray 클래스를 이용할 수도 있습니다.
val data2: BooleanArray = BooleanArray(3,{false})
arrayOf()라는 함수를 이용하면 배열 선언시 값을 할당할 수 있다.
기초타입 대상으로하는 함수를 제공한다. ex) booleanArrayOf()
package com.example.ch3
fun main(){
val data1 = intArrayOf(10,20,30)
val data2 = booleanArrayOf(true,false,true)
val data3 = arrayOf<Int>(100,200,300)
}
List, Set, Map
- List : 순서가 있는 데이터 집합으로 데이터의 중복을 허용
- Set : 순서가 없으며 데이터 중복을 허용하지 않음.
- Map: 키와 값으로 이루어진 데이터 집합으로 순서가 없으며 키의 중복은 허용하지 않음
collection 타입은 가변 클래스와 불변클래스로 나뉘며
- 불변 클래스 : 초기에 데이터를 대입하면 더이상 변경할 수 없음
- 가변 클래스 : 초깃값을 대입한 이후에도 데이터를 추가하거나 변경할 수 있음 (mutable)
구분 | 타입 | 함수 | 특징 |
List | List | listOf() | 불변 |
MutableList | mutableListOf() | 가변 | |
Set | Set | setOf() | 불변 |
MutableSet | mutableSetOf() | 가변 | |
Map | Map | mapOf() | 불변 |
MutableMap | mutableMapOf() | 가변 |
var list = listOf<Int>(10,20,30)
var mutableList = mutableListOf<Int>(10,20,30)
- Map 객체는 키와 값으로 이루어진 데이터의 집합
- Map 객체의 키와 값은 Pair 객체로 이용할 수도 있으며 'key to value' 형태로 이용할 수 있다.
var map = mapOf<String, String>(Pair("one","hello"),"two" to "world")
'_Study > AndroidStudio' 카테고리의 다른 글
안드로이드 스튜디오 조건문과 반복문 (0) | 2022.12.04 |
---|---|
코틀린 소스를 테스트하는 방법 main()/ 함수 실행방법 (0) | 2022.12.04 |
안드로이드 앱의 기본 구조 (2) | 2022.12.04 |
안드로이드 스튜디오 개인 세팅 (0) | 2022.12.04 |
액티비티 제어 정리 (0) | 2022.12.03 |