안녕하세요, 꼬맹입니다. 부스트코스 코틀린 프로그래밍 기본1을 수강하며 정리하였습니다.
사용 가능한 플랫폼
- JVM: 모바일 앱 개발 가능
- JS: 브라우저에서 동작하는 앱 개발 가능
- Native: 윈도우, IOS, ANDROID 등 멀티 플랫폼 용 앱 개발 가능
코틀린의 장점
- 정적 언어: 자료형에 대한 오류를 미리 잡을 수 있음, 컴파일러가 타입을 검증
- NPE에서 자유로움: 널 포인터 익셉션으로 인한 중단 예방
- 자바와 완벽하게 상호운영이 가능
- 간결하고 효율적인 코드
- 함수형, 객체 지향 모두 가능
- 세미콜론 생략 가능
코틀린의 실행 진입점 main()
- 자바는 최소 하나의 클래스와 그 안에 실행가능한 main()함수가 필요함
- 코틀린은 main()함수만 있으면 실행 가능
fun main(){ //fun은 function
println("Hello")
}
변수 선언
- val (value) - 불변형
- var (variable) - 가변형
fun main(){
//선언키워드 변수이름: 자료형 = 값
var userName: String = "kkomaeng"
//var userName = "kkomaeng" 처럼 추론 가능한 값이 있을 시 자료형 생략 가능
//var userId (x)
var userId: String //(o) 뒤에서 꼭 초기화 필요
}
- 변수 이름은 숫자로 시작 불가능
- 변수 이름에 if, while 같은 키워드 사용 금지
- 이름 짓기는 카멜 표기법 사용
- 일반변수, 함수명 등 -> userName (카멜 표기법)
- 클래스, 인터페이스 등 -> UserName (파스칼 표기법)
문자열 표현식
fun main(){
var a = 1
var s1 = "a is $a" //== "a is 1"
var s2 = "a is ${a + 1}" // == "a is 2"
}
null
- 코틀린의 변수 선언은 기본적으로 null 비허용, 초기화 안할 경우 컴파일 단계에서 오류, null을 허용하는 선언이 따로 필요함
fun main(){
var str1: String
println(str1) // 초기화 안했다고 에러 발생
var str2: String?
println(str2) // ?를 붙이면 null 허용, null이 출력됨
}
세이프콜 ?, non-null 단정 기호 !!, 엘비스 연산자 ?:
- 세이프콜 ? -> null이어도 NPE가 뜨지 않도록 함
- 단정기호 !! -> null이 반드시 아닐 경우 붙임, 근데 null이면 에러 호출
- 엘비스 연산자 ?: -> null인지 아닌지 검사하여 null이 아니면 왼쪽, null이면 오른쪽 식 수행
fun main(){
var str: String?
str = null
println("str: $str, length: ${str?.length}") // 둘 다 null 출력
//println("length: ${str.length}")
//str을 참조할 때 세이프콜하지 않을 경우 ?나 !!를 반드시 붙이라고 에러 출력
println("str: $str, length: ${str!!.length}") // null인데 단정기호 써서 에러 발생
var len = str?.length ?: -1 //null 아니면 길이로 정의 null이면 -1로 정의
}
자료형 변환
- 코틀린은 기본형(int, float..) 말고 참조형(Int, Float..)만 사용
- 서로 다른 자료형은 변환 과정을 반드시 거쳐야 함
fun main(){
var a: Int =1
var b: Double = a // 자료형 불일치 오류 발생
var c: Int = 1.1 // 자료형 불일치 오류 발생
var b:Double = a.toDouble() //변환 메소드를 사용하여 할당하는 올바른 방법
// 변환 메소드는 보통 to자료형()으로 생김
var c = 1L + 3 // 자료형을 명시하지 않을 경우 추론하여 결정, 1L은 Long 타입, 결과도 Long 타입
}
자료형 비교, 검사
- 이중 등호 == : 값만 비교 (반대는 !=)
- 삼중 등호 === : 값과 상관없이 참조 주소까지 비교 (자바는 ==가 ===와 같음) (반대는 !==)
- is 키워드 : 자료형 검사
fun main(){
val a:Int = 128
val b:Int = 128
val c:Int? = 128
println(a==b) //true
println(a===b) //true
println(a==c) //true
println(a===c) //false
if(a is Int){
print(a) //128
}else if(a !is Int){
print("Not Int")
}
}
- 참조형의 경우 객체로써 힙에 메모리가 할당되기 때문에 a와 b의 주소 값이 같음, b와 c의 주소 공간은 다름
스마트 캐스트
- Number형을 사용하면 숫자 값에 알맞은 자료형으로 스마트 캐스트됨
- Any형은 모든 클래스의 뿌리, 언제든 필요한 자료형으로 스마트 캐스트됨
fun main(){
var test:Number = 12.2 // Float
test = 12 // Int
test = 120L // Long
test += 12.0f // Float
}
'안드로이드' 카테고리의 다른 글
[코틀린 Kotlin 스터디] 안드로이드 개발 환경 세팅하기 (안드로이드 스튜디오와 자바 환경 변수) (0) | 2022.01.05 |
---|
댓글