티스토리 뷰
변수 선언
- Java : 값 자체를 직접 저장하는 원시 타입(int, double 등), 객체의 참조 값을 저장하는 참조 타입(String 등)으로 나뉜다.
- Kotlin : 모든 타입을 객체로 표현하기 때문에 원시타입과 래퍼 클래스를 구분하지 않는다.
- val로 변수를 선언해놓고 변경해야 할 때 var로 바꾸는 방법을 권장(오류 발생 확률을 낮출 수 있음)
val value = "" var variable = 0L
기본 자료형
-
자바와는 달리 코틀린은 모든 타입을 객체로 표현하기 때문에 타입체크를 해야 한다.
-
숫자 타입들간에는 묵시적 변환을 지원하지 않아 toInt(), toFloat(), toDouble()과 같이 명시적으로 타입을 변환해야 한다.
// String -> Int val yearString = "1990" val year: Int get() = yearString.toInt() // Int -> Float val dp10: Int get() = 10 val itemSize: Float get() = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp10.toFloat(), this.context.resources.displayMetrics)
-
기본 자료형 (숫자)
-
16진수, 2진수 지원 / 8진수는 지원하지 않음
-
부동소수점 지원
val int = 123 val float = 123F val double = 123.0 val long = 123L // 16진수, 2진수 지원 - 8진수는 지원하지 않음 val decimalNumber = 0x0F val binaryNumber = 0b00001011 // 부동소수점 지원 val floatingPointToDouble: Double get() = 123.5 // 123.5e10 val floatingPointToFloat : Float get() = 123.5F // 123.5f
- 일반적으로는 정수 자료형을 사용하지만, 음의 부호를 사용하지 않는 정수 자료형이 코틀린 1.3버전에서 실험적으로 출시됨.
- 언더스코어로 자릿값을 구분할 수도 있음
val number = 1_000_000_000 val cardNum = 1234_1234_1234_1234L val hexVal = 0xAB_CD_EF_12 companion object { private const val REQUEST_CODE_INTRODUCTION = 1001_0000 private const val REQUEST_CODE_EDUCATION = 1001_0001 }
- 자료형에 별칭 붙이기
- 제네릭, 고차함수 및 람다식, 클래스 등에서 별칭을 사용할 수 있다.
typealias set = Set<String> typealias onClickListener = (Int, String, Any) -> Unit typealias AInner = A.Inner typealias BInner = B.Inner typealias UserName = String typealias Password = Int
자료형 검사/변환
- ?(물음표) 기호를 통해 변수의 널 허용여부 설정 가능
- ?. 세이프콜 잘 활용
_page.value?.let { ... }
- !! 단정기호를 사용해 null이 일어나지 않을 지점을 단정지을 수 있다
- 개인적으로는 조심해서 사용해야 한다고 생각함. (정말 단정기호를 포함할 수 있는지 생각해 본 후)
- 엘비스 연산자 활용
fun getSearchText(): String { return _searchText.value ?: "" }
- 결과적으로 참조 주소를 비교하는 ‘===‘ 연산으로 반환값을 확인할 수 있다.
기본 자료형 (기본형과 참조형 자료형의 비교)
-
문자열은 코틀린에선 힙 영역의 String Pool 공간에 문자열을 저장하고 변수가 값을 참조하도록 한다.
- 결과적으로 참조 주소를 비교하는 ‘===‘ 연산으로 반환값을 확인할 수 있다.
-
Int형으로 선언된 number1은 기본형으로 변환되어 스택에 128 값을 저장하고, number는 참조형으로 저장되어 128이 저장된 힙 참조 주소가 저장되어 있어 주소값이 다르게 나온다.
val str1: String = "H" val str2 = "W" var str3 = "H" val number1: Int = 128 val number2: Int? = 128 fun strPrint() { println("str1 === str3 : ${str1 === str2}") // false println("str1 === str3 : ${str1 === str3}") // true println("number1 == number2 : ${number1 == number2}") // true println("number1 === number2 : ${number1 === number2}") // false }
-
스마트 캐스트 : 컴파일러가 자동으로 형 번환을 도와준다.
- as에 의한 스마트 캐스트 지원
-
자료형 검사
-
is 키워드 사용
val number3: Number = 12.2F // Float 형으로 스마트캐스트 val str4: String = number3 as String fun smartCastWithIsAs() { when (number3) { is Int -> print("int = $number3") is Float -> print("float = $number3") } print(str4) }
-
-
묵시적 변환
val object1: Any = 1 // Int형 val object2: Any = 20L // Long형 fun checkObject(type: Any) { when (type) { is String -> { } is Int -> { } } }
-
연산자
-
기본연산자
- 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)
-
대입연산자
- 값 할당(=, -=, +=, *=, /=, %=)
-
증가/감소 연산자
- ++, --
-
비교 연산자
- '>, <, >=, <=, ==, !='
- 참조 주소 비교(===, !==)
-
논리 연산자
- &&, ||, !
-
비트 연산
val andValue: Int = (6 and 5) // 비트 연산 AND(논리곱) val orValue: Int = (6 or 5) // 비트 연산 OR(논리합) val xorValue: Int = (6 xor 5) // 비트 연산 XOR(상호배제) val invValue: Int = 6.inv() // 비트 연산 NOT(부정) val shiftLeftValue: Int = 178 shl 2 // 왼쪽으로 시프트(부호 비트 유지) val shiftRightValue1: Int = 178 shr 2 // 오른쪽으로 시프트(부호 비트 유지) val shiftRightValue2: Int = 178 ushr 2 // 오른쪽으로 시프트(부호 비트 무시)
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] 흐름제어(조건문, 반복문) (0) | 2020.03.15 |
---|---|
[Kotlin] 고차함수 / 람다식, 코틀린의 다양한 함수 알아보기 (0) | 2020.03.15 |
[Kotlin] Kotlin Coding Convention (0) | 2019.08.03 |
[Kotlin] 컬렉션(Collection) (0) | 2018.12.30 |
[Kotlin] 기본 자료형 2 (0) | 2018.12.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 단어 길이 재기
- 10826
- 알고리즘
- OpenCV
- 조세퍼스 문제
- #android #motionlayout
- algorithm
- 큰 수 A+B
- 영상처리
- 1237
- GCD 합
- 피보나치 수 4
- kotlin
- constraintlayout
- a^b
- mssql
- 최대공약수와 최소공배수
- 1158
- 1260
- 자동타입
- 함수형사고 Kotlin Java
- algorihtm
- 2743
- 문자열
- #kotlin
- 10828
- Eclipse
- javacv
- 10827
- 10757
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함