티스토리 뷰
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!
1. 기초데이터 타입
1. 1. 숫자타입
- 코틀린에서 모든 것은 객체!!
- C나 자바는 int, double 기초 타입과 Integer, Double 래퍼 클래스를 구분해서 사용하지만 코틀린에서는 기초 타입 자체가 없다.
- 숫자 타입에 값을 대입할 때는 다음과 같은 규칙이 있다.
- Decimals(10진수), Hexadeicmals(16진수, 0x), Binaries(2진수, 0b) 값 대입 가능
- Long 형은 값 뒤에 'L' 사용
- 실수 기본형은 Double
- 실수형은 10.0e2로도 표현 가능
- Float 형은 값 뒤에 'f', 'F' 사용
1. 2. 논리, 문자와 문자열 타입
- 논리합(||), 논리곱 (&&), 부정(!)
- 문자열 템플릿 개념으로 문자열 내에 변수의 데이터나 특정 연산식 결과에 의한 데이터를 $ 기호로 쉽게 포함할 수 있습니다.
"result : $name .. $(sum(10))"
1. 3. Any 타입
- 코틀린 클래스의 최상위 클래스는 Any!!!!
- 타입을 선언할 때 Any를 이용하는 것은 어떤 타입의 데이터도 대입할 수 있다는 뜻
- 특정 변수에 대입되는 타입을 예측할 수 없을 때도 사용
1. 4. null 허용 타입
- 코틀린은 null 이 대입될 가능성이 있는 곳에는 명시적으로 nullable을 표현해야 한다.
- 타입 선언시 타입 뒤에 ? 기호를 추가해주면 된다.
- Any 타입으로 선언되었어도 null을 허용하기 위해서는 ? 기호를 명시적으로 선언해야 한다.
1. 5. Any, Any? 타입
- Any 타입은 Any? 타입에 대입할 수 있지만, 반대로 Any? 타입은 Any 타입에 대입할 수 없다.
1. 6. Unit과 Nothing
- Unit은 흔히 함수의 반환 구문이 없다는 것을 표현하기 위해 사용된다.
- Unit은 자바의 void와 비슷한 느낌이지만 엄밀히 말하자면 조금의 차이가 있다. 차이점은 나중에 알아보자.
- Nothing은 의미 있는 데이터가 없다는 것을 명시적으로 선언하기 위해 사용하는 타입이다.
- Unit과 Nothing의 차이는 지금 명확하게 구분하기가 좀 어려운데 구분이 왜 필요한지 제네릭에 대해서 이해해야 한다고 한다.
- 제네릭은 객체지향 프로그래밍 언어에서 흔히 제공하는 기능으로 소스에서 <>을 이용하여 타입을 명시하는 것을 말한다.
- 흔히 형식 타입이라고 부르며 선언하는 곳이 아닌 이용하는 곳에서 타입을 지정하기 위한 기법이다.
- 더 자세한 내용은 추후에 다뤄보자.
1. 7. 타입 확인과 캐스팅
- 코틀린에서는 is 연산자를 이용해 타입을 확인하고 만약 특정 타입으로 확인되면 명시적으로 타입 캐스팅을 자동으로 진행한다. 이를 스마트 캐스트라고 한다.
- 코틀린은 자바랑 달리 데이터 타입의 변환이 자동으로 이루어지지 않는다.
- 따라서 자바에서 가능했던 int의 double로 변환하는 기초 타입의 캐스팅도 toXXX() 형식의 함수를 이용해 명시적으로 진행해야 한다.
- 코틀린에서 형 변환이 자동으로 이뤄지는 때는 값의 형 변환이다.
val sum_result = 1L + 3 // Long + Int => Long
- 상하위 클래스 관계에서의 캐스팅으로 as 연산자를 사용할 수 있다.
- 기초 데이터 타입(Int, Double, String 등)에는 상하위 개념이 없기 때문에 사용할 수 없다.
2. 컬렉션 타입
2. 1. 배열
- 배열을 만드는 가장 쉬운 방법은 arrayOf() 함수를 이용하는 것이다.
var array1 = arrayOf(1, "weekyear", false)
- 특정 타입의 데이터만 대입할 수 있게 한정할 수도 있다.
var arrayInt = arrayOf<Int>(10, 20, 30)
- 기초 데이터 타입은 전용 배열을 만드는 함수가 따로 있다.
booleanArrayOf()
floatArrayOf()
intArrayOf()
...등등
- Array 클래스의 생성자를 사용해서 배열을 만들 수 있다. 생성자의 첫 번째 매개변수는 배열의 크기이고 두 번째 매개변수는 배열의 데이터이다.
var array2 = Array(3, {i -> i * 10})
- 배열을 정의할 때 크기만 지정하고 데이터는 대입하지 않는 빈 상태로 정의하는 방법은 두 가지가 있다.
- arrayOfNulls() 함수를 이용
var array3 = arrayOfNulls<Any>(3)
- 배열 클래스에 초깃값을 빈 상태로 주는 법
var array4 = Array<String>(3, {""})
2. 2. List, Set, Map
- List : 순서가 있는 데이터 집합, 데이터 중복 허용
- Set : 순서가 있는 데이터 집합, 데이터 중복 X
- Map : 키와 값으로 이뤄진 데이터 집합, 순서가 없고 키의 중복이 없다.
- 각 컬렉션은 기본 컬렉션과 Mutable이 있는데 기본 List, Set, Map은 한 번 초기화 되면 데이터 변경이 불가능하고 MutableList, MutableSet, MutableMap은 변경이 가능해서 add(), set() 함수를 이용할 수 있다.
- ArrayList랑 MutableList의 기능적 차이는 거의 없는 듯하다.
// List
val immutableList: List<String> = listOf("hello", "kotlin")
// MutableList
val mutableList: MutableList<String> = mutableListOf("hello", "kotlin")
mutableList.add("weekyear")
mutableList.set(1, "tistory")
// ArrayList
val arrayList: ArrayList<String> = ArrayList()
arrayList.add("hello")
arrayList.add("java")
arrayList.set(1, "kotlin")
- mapOf() 함수에 데이터를 추가하는 방법은 Pair 클래스를 이용하는 방법과 "키 to 값" 형태를 이용하는 방법이 있다.
val immutableMap1 = mapOf<String, String>(Pair("one", "hello"), Pair("two", "kotlin"))
val immutableMap2 = mapOf<String, String>("one" to "hello", "two" to "kotlin")
val mutableMap = mutableMapOf<String, String>()
mutableMap.put("one", "hello")
mutableMap.put("two", "kotlin")
2. 3. 이터레이터(Iterator)
- 이터레이터는 컬렉션 타입의 데이터를 hasNext()와 next() 함수를 이용해 차례로 얻어서 사용하기 위한 인터페이스다.
- 사실 지금 당장은 일반적인 반복문과 어떤 차이가 있어서 따로 기능을 만들었는지 잘 모르겠다.
- 나중에 실력이 늘어나면 다시 찾아보면 좋을 것 같다.
다시 상기 시킬 것!!
- 코틀린에서 모든 것은 객체다!!
- 그렇다고 Int나 Double이 자바로 매핑될 때 래퍼 클래스로 매핑되는 것은 아니다. Nullable(?)이 붙어야 래퍼 클래스로 매핑된다.
- 코틀린에서 최상위 객체의 타입은 Any다!
- 코틀린에서는 자바와 다르게 기초 데이터 타입에 대한 자동 캐스팅을 지원하지 않는다.
- 코틀린에서는 모든 것이 객체다! 즉, Int도 클래스이고 Double도 클래스인데 두 클래스는 상하위 관계가 성립하지 않기 때문에 자동 캐스팅이 지원되지 않는 것이 당연하겠다.
- 코틀린에는 switch-case 구문이 없다.
- 대신 when을 제공하는데 자바의 switch-case 구문은 정수를 가지고 조건을 명시하지만 코틀린의 when은 다른 타입의 데이터로 조건을 명시할 수 있다.
- 코틀린은 배열을 []로 선언하지 않으며 {}을 이용하여 초기화하지도 않는다.
- 코틀린에서는 모든 것이 객체로 이용되므로 배열도 Array 클래스의 객체로 표현된다.
- 배열을 표현할 때
val array: Array
형태로 이용해야 하며 초깃값을 대입할 때도 arrayOf() 등의 함수를 이용해야 한다.
반응형
'Programming > 코틀린(Kotlin)' 카테고리의 다른 글
[코틀린] 07. 클래스 (feat. 깡샘) (0) | 2021.04.08 |
---|---|
[코틀린] 06. 흐름 제어 구문과 연산자 (feat. 깡샘) (0) | 2021.04.05 |
[코틀린] 04. 변수와 함수 (feat. 깡샘) (0) | 2021.03.31 |
[코틀린] 01. 코틀린 간단 소개 (feat. 깡샘) (0) | 2021.03.29 |
[코틀린] data class 간단 요약 (0) | 2021.03.24 |
댓글