on
[Chap 3] 코틀린 시작하기
[Chap 3] 코틀린 시작하기
코틀린 언어 소개
코틀린의 등장 배경
- 코틀린이란? JetBrains에서 오픈 소스 그룹을 만들어 개발한 프로그래밍 언어.
- 자바의 가상머신인 JVM에 기반을 둔 언어.
코틀린의 장점
1) 표현력과 간결함(expressive and concise) : 자바보다 간결한 구문
2) 안전한 코드(safer code) : 코틀린은 Null safety를 지원
-> 객체지향 프로그램에서 객체는 널 상태일 수 있으며, 이 때 NullPointerException이 발생할 수 있는데
코틀린에서는 변수를 nullable과 not null로 구분해서 선언하기 때문에 null과 관련된 여러 부분을 컴파일러가 해결
3) 상호 운용성(interoperable) : 코틀린은 자바와 100% 호환. 자바와 코틀린 혼용 가능
4) 구조화 동시성(structured concurrency) : 코루틴corutines을 이용하면 비동기 프로그램을 간소화 가능
- 네트워크 연동이나 데이터베이스 갱신 등에 사용
코틀린 파일 구성
- 확장자는 '.kt'
- package 이름은 kt 파일의 위치와 상관없는 별도의 이름으로도 선언할 수 있다. 이 경우, 컴파일된 클래스 파일은 별도의 이름 폴더에 생성된다.
- 코틀린 파일명을 클래스 파일명과 다르게 선언할 수 있다.
- 변수와 함수는 클래스 안뿐만 아니라 클래스 밖에도 선언할 수 있다.(파일명+Kt로 컴파일)
- 같은 package 안에 선언된 파일은 import 없이 사용할 수 있다.
변수와 함수
변수 선언
1) val(value) : 초깃값이 할당되면 바꿀 수 없는 변수
2) var(variable) : 초깃값이 할당된 후에도 값을 바꿀 수 있는 변수를 선언
val(var) 변수명: 타입 = 값 val data1 = 10
타입 지정과 타입 추론
변수명 뒤에는 콜론(:)을 추가해 타입 명시 가능.
대입하는 값에 따라 타입 유추 가능하다면 생략 가능.
var data1: Int = 10
초깃값 할당
- 최상위에 선언한 변수/클래스의 멤버 변수 : 선언과 동시에 초깃값 할당 필요
- 함수 내부에 선언한 변수 : 선언과 동시에 초깃값 할당할 필요 X
초깃값 미루기
변수를 선언할 때 초깃값을 할당할 수 없는 경우 - 컴파일러에게 알림 필요
1) lateinit : 이후에 초깃값을 할당할 것임을 명시적으로 선언
- 선언과 동시에 초깃값을 할당하지 않아도 되지만 모든 유형의 변수 선언에는 사용 불가
- var 키워드로 선언한 변수에만 사용 가능
- Int, Long, Short, Double, Float, Boolean, Byte 타입에는 사용 불가
lateinit var data: String
2) lazy : 소스에서 변수가 최초로 이용되는 순간 중괄호로 묶은 부분 자동 실행되어 그 결괏값이 변수 초깃값으로 할당
- 변수 선언문 뒤에 by lazy { } 형식으로 선언
val data: Int by lazy{ println("In lazy....") 10 }
데이터 타입
코틀린의 모든 변수는 객체 = 코틀린의 모든 타입은 객체 타입( 기초 데이터 타입 클래스) > 대문자로 시작
- null값 대입
- 객체의 메서드 호출 가능
var data1: Int = 10 var data2: Int? null // null 대입 가능 data1 = data1.plus(10) // 객체의 메서드 이용 가능
1. 기초 타입 객체 : Int, Short, Long / Double, Float / Byte / Boolean
- 기초 데이터를 객체로 표현하는 타입
2. 문자와 문자열 : Char, String
1) Char : 문자를 표현하는 타입. 작은 따옴표로 표시. Number 타입으로 표현 불가
2) String : 문자열을 표현하는 타입
- 큰따옴표(")로 표현한 문자열 : enter, tab 유지하려면 \로 시작하는 이스케이프 시퀀스 필요 ex)
, \t
- 삼중따옴표(""")로 표현할 때는 키보드로 입력한 줄바꿈이나 들여쓰기 등이 데이터에 그대로 반영
-> 사용 시 닫는 따옴표 뒤에 .trimIndent() 자동 추가(문자열 앞에 공백 제거)
- $를 이용해 변숫값 표시
3. Any : 모든 타입 가능
코틀린에서 최상위 클래스. 모든 타입의 데이터 할당 가능
class User var data1: Any = User()
4. Unit : 반환문이 없는 함수
Unit 객체만 대입 가능. 함수에서 반환문이 없음을 명시적으로 나타낼 때 Unit 타입 사용
반환 타입을 생략하면 자동으로 Unit 적용
fun some(): Unit {}
5. Noting : null이나 예외를 반환하는 함수
null만 대입 가능.(데이터로서의 의미 X)
val data1: Nothing? = null fun some1(): Nothing? { return null } // null 반환 함수 fun some2(): Nothing { throw Exception } // 예외를 던지는 함수
6. 널 허용과 불허용
널 허용 : 타입 뒤에 물음표를 추기
널 불허용 : 물음표를 추가하지 않음
함수 선언하기
- fun 키워드 이용
- 함수의 매개변수에는 val이 자동으로 적용.
컬렉션 타입 : 여러 개의 데이터를 표현하는 방법
1. Array : 배열표현
- 배열의 크기, 초깃값 지정 / 배열의 타입은 제네릭(이용하는 곳에서 타입 지정)
(size: Int, init: (Int) -> T) // Array 클래스의 생성자
2. 기초 타입의 배열
- BooleanArray, ByteArray, CharArray, DoubleArray, FloatArray, IntArray, LongArray, ShortArray
val data1: IntArray = IntArray(3, {0, })
- arrayOf() : 배열을 선언할 때 값 할당 -> 기초 타입을 대상으로 하는 ___ArrayOf() 함수 제공
val data1 = arrayOf(10, 20, 30)
3. List, Set, Map(컬렉션 타입 클래스)
Collection 인터페이스를 타입으로 표현한 클래스
순서 중복 List O O Set X X Map 키와 값으로 구성 X(키의 중복)
1) 가변 클래스 : 초깃값을 대입한 이후에도 데이터를 추가하거나 변경 가능 -> size(), get() + add(), set()
2) 불변 클래스 : 초기에 데이터를 대입하면 더 이상 변경할 수 없는 타입 -> size(), get()
구분 타입 함수 특징 List List listOf() 불변 MutableList MutableListOf() 가변 Set Set setOf() 불변 MutableSet MutableSetOf() 가변 Map Map mapOf() 불변 MutableMap mutableMapOf() 가변
- map : Pair 객체를 이용하거나 '키 to 값' 형태로 이용
var map = mapOf(Pair("one", "hello"), "two" to "world")
조건문과 반복문
from http://dev-minji.tistory.com/118 by ccl(A) rewrite - 2021-11-19 01:27:57