[Kotlin] 기본 개념1: 관계, 변수, 자료형

  1. 코틀린 프로젝트, 모듈, 패키지, 파일의 관계
  2. 변수와 자료형
  3. 자료형 검사와 반환

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. 부동소수점

IEEE 754

(위키디피아 참고)

−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"

답글 남기기

이메일 주소는 공개되지 않습니다.