일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- 네이버클라우드
- github
- ci/cd
- kubernetes
- Jenkins
- docker
- Notification
- C언어
- data serialization formats
- 3D 프린터 용어
- docker container
- 3D프린터 입문
- 리눅스 파일동기화
- 3d프린터 초보
- git
- octoprint
- 3D모델링
- 3D프린터
- 3D
- Token인증방식
- IoTNetwork
- NAS HDD교체
- OnlineIDE
- linux job
- 데이터 직렬화 포맷
- 3D프린터입문
- nas
- gitlab
- 코틀린개발환경
- Today
- Total
0과 1을 공부하다.
[Kotlin] 코틀린 자료형 / 변수 / 상수 / 연산자 본문
변수(var)와 상수(val, const)
코틀린 언어는 변수를 선언 할 때 선언 키워드를 기입해야 한다. 선언 키워드는 생략할 수 없으며, 키워드로는 val와 var이 있다.
선언 키워드 val와 var의 차이는 아래와 같다.
- val (value) = Immutable = Final variable = 할당 후 변경 불가
- var (variable) = Mutable = Non-Final variable = 언제든 변경 가능
변수 또는 상수를 사용하는 문법은 아래와 같다.
[선언 키워드] [변수이름]: [자료형] = [값]
변수
변수(var)를 사용하는 예제는 아래와 같다.
fun main() {
var name = "jihwan"
var age = 30
var weight = 71.5
var graduate = true
println("name : " + name)
println("age : " + age)
println("name : " + weight)
println("name : " + graduate)
}
/* [result]
name : jihwan
age : 30
name : 71.5
name : true
*/
코틀린은 변수를 추론하는 기능이 있어 별도로 지정하지 않아도 되지만 필요하다면 아래와 같이 지정하여 할 수 있다.
자료형은 첫 글자 대문자로 이뤄진 형태로 되어 있고 자바에서 제공하는 대부분의 자료형을 제공한다.
fun main() {
var name : String = "jihwan"
var age : Int = 30
var weight : Double = 71.5
var graduate : Boolean = true
println("name : " + name)
println("age : " + age)
println("name : " + weight)
println("name : " + graduate)
}
/* [result]
name : jihwan
age : 30
name : 71.5
name : true
*/
변수를 초기화 한 경우에는 자료형을 생략할 수 있지만 초기화 되지 않은 변수는 반드시 자료형을 기입한다.
상수
코틀린에서 상수를 사용할 수 있는 방법은 java에서 Final과 동일한 기능을 제공하는 val과 const가 있다. val과 const의 차이는 val은 런타임 시기에 초기화 될 수 있고 const는 컴파일 과정에서 반드시 초기화 되야 한다.
앞서 알아본 변수 var과 상수 val, const의 예시는 아래와 같다.
- var
fun main() {
var num = 10
num = 20
println("num: " + num)
}
/* [result]
num: 20
*/
- val
fun main() {
val num = 10
num = 20
println("num: " + num)
}
/* [result]
Exception !!!
*/
- const
const val num = 10
fun main() {
num = 20
println("num: " + num)
}
/* [result]
Exception !!!
*/
네이밍 규칙
코틀린에서 변수 상수를 정의할 때의 권장되는 네이밍 규칙은 아래와 같다.
변수
- 숫자로 시작하지 않는다
- 카멜 표기법을 사용한다.
- 의미있는 약어를 사용한다.
- 예약어를 사용하지 않는다.
상수
- 숫자로 시작하지 않는다.
- 대문자를 사용하여 정의한다.
- 단어 사이에는 밑줄(_)을 사용하여 구분한다.
- 상수의 의미를 명확하게 표현할 수 있는 이름을 사용한다.
자료형
자료형에는 기본형 자료형과 참조형 자료형이 있다. 기본형 자료형과 참조형 자료형의 특징은 아래와 같다.
- 기본형 자료형
- 실제 값을 그대로 메모리에 할당
- 메모리 크기 고정
- null로 초기화가 불가능, 기본(디폴트) 값이 정해져있음.
- 스택에 값을 저장
- 값을 직접 비교
- 참조형 자료형
- 스택에 참조 주소를 저장
- null로 초기화 가능
- 참조 주소 위치에 해당하는 곳(힙)에 실제 객체 저장
- 참조를 통해 값 간접 접근
보통 프로그래밍 언어는 기본형과 참조형을 모두 사용한다. 반면에 코틀린은 기본형 자료형도 사용이 가능하지만 참조형 자료형 사용을 권장한다. (JVM에서는 기본형으로 cast 됨.)
JAVA에서는 boxing(기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환)과 unboxing(래퍼 클래스의 인스턴스에 저장된 값을 기본 타입의 데이터로 변환)을 고려해야 했지만 코틀린은 고려하지 않아도 된다.
코틀린에서 사용 가능한 참조형 자료형은 아래와 같다.
- 부호 있는 정수 (Long, Int, Short, Byte)
- 부호 없는 정수 (ULong, UInt, UShort, UByte)
- 실수형 (Double, Float)
- 논리 자료형 (Boolean)
- 문자 자료형 (Char)
- 문자열 자료형 (String)
코틀린에서만 존재하는 특이한 타입들은 아래와 같다.
- Any - 자바의 obj 역할
- unit - 자바의 void
- Nothing - 함수가 정상적으로 끝나지 않았다는 사실을 표현
형변환
- 자바의 타입 변환은 기본 타입간의 변환은 암시적으로 이루어질 수 있다.
- 코틀린의 타입 변환은 기본 타입간의 변환은 명시적으로 이루어져야 한다.
코틀린에서의 형변환은 JAVA에서 전통적으로 사용하는 (int)num 형태의 형변환은 사용할 수 없다. 코틀린에서 형변환하는 방법은 아래와 같이 ".to변환타입" 형태로 해야 한다.
명시적인 형변환
표준 라이브러리에서 제공하는 여러 확장 함수를 사용하여 변환한다.
fun main() {
var num1 = 20 // integer
var num2:Long? = null // long
num2 = num1.toLong() //long type 변수에 integer 변수 형변환 후 넣기
println("num: " + num2)
}
스마트 캐스트(is)
코틀린은 안전한 형변환을 위해 is 연산자와 스마트 캐스트를 제공한다. is 연산자를 사용하여 특정 변수의 타입을 확인한 후, 해당 블록 내에서 자동으로 해당 타입으로 캐스팅 된다.
- value is Type = true / false
- value !is Type = false / true
fun main() {
val obj: Any = "Kotlin"
if (obj is String) {
// obj는 여기서 자동으로 String으로 캐스팅됨
println("String length: ${obj.length}")
}
val num: Any = 42
if (num is Int) {
// num은 여기서 자동으로 Int로 캐스팅됨
println("Double of num: ${num * 2}")
}
}
안정적인 형변환(as?)
안전한 형변환을 위해 as? 연산자를 사용할 수 있다. 이는 변환이 실패하면 null을 반환한다.
- value as Type = Type으로 타입 캐스팅 / 예외발생
- value as? Type = Type으로 타입 캐스팅 / null / null
fun main() {
val obj: Any = "Kotlin"
val str: String? = obj as? String // obj를 String으로 안전하게 캐스팅, 실패 시 null 반환
println(str) // Kotlin
val num: Any = 42
val strNum: String? = num as? String // 변환 실패, null 반환
println(strNum) // null
}
강제 형변환(as)
as 연산자를 사용하여 강제 형변환을 할 수 있다. 변환이 실패하면 ClassCastException이 발생한다.
kotlin코드 복사
fun main() {
val obj: Any = "Kotlin"
val str: String = obj as String // obj를 String으로 강제 캐스팅
println(str) // Kotlin
val num: Any = 42
// val strNum: String = num as String // 변환 실패, ClassCastException 발생
// println(strNum)
}
연산자
동일성 vs 동등성
- 동등성: 동일한 값인가 ?
- 동일성: 완전히 동일한 주체인가 ?
코틀린은 자바와 다르게 자동으로 compareTo()를 호출해준다. 연산자만으로 값을 비교할 수 있다.
동일성에는 === 연산자를 사용하고 동등성에는 == 연산을 사용한다.
data class Person(val name: String, val age: Int)
fun main() {
val person1 = Person("JAY", 29)
val person2 = Person("KIM", 30)
val person3 = person2
val person4 = Person("KIM", 30)
println(person2 == person4) // 동등성 비교 (일치)
println(person1 == person2) // 동등성 비교 (불일치)
println(person2 === person3)// 동일성 비교 (일치)
println(person2 === person4)// 동일성 비교 (불일치)
}
lazy evaluation
코틀린은 자바와 동일하게 lazy 연산을 수행한다.
fun main() {
fun funTrue() : Boolean {
println("i am true")
return true
}
fun funFalse() : Boolean {
println("i am false")
return false
}
println(funTrue() || funFalse()) // 이미 첫번째 항이 true를 반환하여 두번째 연산자를 검사하지 않음.
println(funFalse() && funTrue()) // 이미 첫번째 항이 false르 반환하여 두번째 연산자를 검사하지 않음.
}
코틀린에서만 존재하는 특이한 연산자
- in / !in : 컬렉션이나 범위에 포함되어 있다. / 포함되어 있지 않다.
- a..b : a부터 b까지의 범위 객체를 생성한다.
이외에도 코틀린에서는 객체의 값끼리 연산자를 직접 정의할 수 있다.
참고 사이트
※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.
* CopyRight 2024. Jay Park All rights reserved.
'Study > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 리스트/배열 (0) | 2024.07.02 |
---|---|
[Kotlin] 코틀린 문자열 (0) | 2024.07.02 |
[Kotlin] 코틀린 Null Safety (0) | 2024.07.02 |
[Kotlin] 코틀린 시작하기 (0) | 2024.06.30 |
[Kotlin] 코틀린 특징 및 개발환경 구성 (0) | 2023.09.16 |