1. 코틀린 프로젝트-모듈-패키지-파일

프로젝트 내부에 모듈,
모듈 내부에 패키지,
패키지 내부에 파일.
실제 파일을 보면 아래와 같다. 패키지 기준으로 보는게 이해하기 쉬운듯 하다.

파일명 “ooo.kt” 와 “ooo”의 차이?
해당 파일 제목으로 클래스 1개만 설정되어있다면, ooo
그 이외는 ooo.kt 이다.

2. 변수와 자료형
2-1. val / var
코틀린에서 변수를 선언할 때, val이나 var을 사용할 수 있다.
val : 고정 값, 읽기만 가능
var: 유동 값, 값 수정 가능
2-2. 기본형 자료형 vs 참조형 자료형
코틀린에서는 참조형만 사용한다. 하지만, 겉보기에만 그렇고 컴파일을 진행하면서 참조형에서 기본형으로 바뀐다.
기본형: 임시메모리(스택)에 값 저장, 메모리 크기 고정.
자료형: 임시메모리(스택)에 참조 주소, 동적 메모리(힙)에 실제 값.
2-3. 자료형

2-4. 언더스코어
프로그래밍을 하다보면 긴 숫자는 식별하기 애매한 경우가 있는데, _ 을 이용해 식별하기 편하게 할 수 있다. 언더그라운드(_)는값에 영향을 주지 않고, 모든 종류의 값에 사용할 수 있다.
var num = 79_000_000 var num2 = 0x99_5F_AB_12
2-5. 부동소수점

(위키디피아 참고)
−118.625 (십진법)을 IEEE 754 (32비트 단정밀도)로 표현해 보자.
(1) 음수이므로, 부호부는 1이 된다. 0은 양수, 1은 음수이다.
(2) 그 다음, 절댓값을 이진법으로 나타내면 1110110.101이 된다.
(3)소수점을 왼쪽으로 이동시켜, 왼쪽에는 1만 남게 만든다. 예를 들면 1110110.101=1.110110101×2⁶ 과 같다. 이것을 정규화된 부동소수점 수라고 한다.
(4) 가수부는 소수점의 오른쪽 부분으로, 부족한 비트 수 부분만큼 0으로 채워 23비트로 만든다. 결과는 11011010100000000000000이 된다.
(5) 지수는 6이므로, Bias를 더해야 한다. 32비트 IEEE 754 형식에서는 Bias는 127이므로 6+127 = 133이 된다. 이진법으로 변환하면 10000101이 된다.
2-6. 2의 보수
컴퓨터는 음수를 표현하기 위해 2의 보수 개념을 사용한다. 컴퓨터 연산기에는 덧셈 기능의 회로만 있고, 덧셈 기능으로 뺄셈을 구현해야하기 때문이다.
(1) Byte형 변수에 0111 1111 (127) 이 있다.
(2) 여기에 2진수 1을 더하면 1000 0000이 되고, -128이 된다.
(3) 즉 특정한 수를 음수로 만드려면, 2진수 값을 뒤집은 후 1을 더하면 특정 수의 음수가 된다.
예시로, 1000 0001은 -127, 1000 0011은 -125다.
3. 자료형 검사와 반환
3-1. Null을 허용하는 변수 검사
일반적으로 코틀린은 변수에 null 할당 시 non-null 에러 발생.
변수 선언 시 자료형 뒤에 물음표를 추가한다.
var str0 : String? = "This is String" str0 = null
3-2. 세이프콜과 엘비스
[ 세이프콜 ]
null이 할당됐을 가능성이 있는 변수를 검사 후 안전하게 호출.
println("str0: $str0 length: ${str0?.length}")
str0이 null인지 확인.
null이면 null 출력. / null이 아니면 length 출력.
[ 엘비스 ]
변수가 null인지 확인 후 null이면 오른쪽 수식, 아니면 왼쪽 수식을 출력.
println("str0: $str0 length: ${str0?.length ?: -1}")
if문과 동일하다.
3-3. 스마트캐스트
컴파일러 스스로 자료형을 변환하는 것.
[ Number 형 ]
숫자를 저장하는 특수 자료형
var tmp : Number = 13 tmp = 13.0f tmp = 13L
[ AS ]
자료형 변환이 안되면, 예외 발생.
val tmp2 : String? = x as? String
3-4. Any 형
특별한 자료형이 정해지지 않은 경우 사용한다. 어떤 자료형이든 될 수 있다. 또한, 모든 클래스는 Any 형의 자식 클래스이다.
var a : Any = 3 a = "Wow"