[Kotlin] 2. 변수와 자료형, 연산자
※ “Do it! 코틀린 프로그래밍” 을 참고하여 작성하였습니다.
02-1 코틀린 패키지
코틀린 프로젝트의 구성
[프로젝트 ← 모듈 ← 패키지 ← 파일(클래스)
모듈: 기능을 모듈 단위로 분리하여 관리
패키지
default 패키지: 따로 패키지 폴더가 없고 src 폴더 내에 있는 파일들의 패키지
기본 패키지
→ kotlin.*
→ kotlin.text.*
→ kotlin.sequences.*
→ kotlin.ranges.*
→ kotlin.io.*
→ kotlin.collections.*
→ kotlin.annotation.*
→ kotlin.math.*
파일
- 클래스가 1개: 클래스 이름이 곧 파일 이름
- 클래스가 2개 이상: 클래스 이름.kt
02-2 변수와 자료형
var과 val
- var: 변경 가능한 변수
- val: 읽기 전용 변수(불가변)
변수 선언
[형식 1] val username: String= “Kildong”
[형식 2] val username= “Kildong”
[형식 3] var username (X)
var username: String
- 선언과 동시에 할당하지 않으려면 자료형을 선언해야 함
자료형
- 기본형
- 가공되지 않은 순수한 자료형, 프로그래밍 언어에 내장되어 있음
- 스택에 값이 저장되며, 값이 저장된 메모리의 크기가 고정되어 있음
- 참조형
- 객체를 생성하고 동적 메모리 영역에 데이터를 둔 다음 이것을 참조하는 자료형
- 코틀린에서는 참조형만 사용!!!
- 스택에 주소가 저장되며, 힙에 실제 객체가 저장됨
- 기본형
정수 자료형
- 부호가 있는 정수 자료형: Byte, Short, Int, Long
- 부호가 없는 정수 자료형: UByte, UShort, UInt, ULong
실수 자료형
Double(default), Float
실수 표현 방법: 부동 소수점 방식
Floating-point 방식: 실수를 가수와 지수로 나누어 표현하는 방식
자료형의 최소, 최댓값 확인: (자료형).MIN_VALUE, (자료형).MAX_VALUE
논리 자료형: true / false
문자 자료형(char)
- 문자 자료형 변수에 ‘A’를 할당하면 실제로는 아스키코드 값인 65가 저장됨
- toChar(): 숫자인 아스키코드 값을 문자로 변환해 출력할 수 있는 메소드
문자열 자료형
- $: 문자열을 출력할 때 변수 값을 활용하고 싶을 때 쓰는 기호
- : 특수 문자를 쓸 때 앞에 쓰는 기호
- “””
“”” : 형식화된 다중 문자열, “”” “”” 안에서 다양한 형태의 문자열이 출력 가능하다
typealias: 자료형에 별명 붙이기
[형식] typealias (별명)= 값
ex) typealias Username= String
val user: Username= “Kildong”
- 이제부터 Username은 String 입니다. 😱
02-3 자료형 검사하고 변환하기
코틀린은 아예 null을 허용하지 않음 !!!
null 선언과 할당
- 변수?= null
- 선언한 변수 뒤에 ?(물음표 기호)를 붙여서 해당 변수가 null이 할당될 수 있음을 예고
null 변수 사용
- 세이프 콜
- null이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법
- str1?.length: 변수가 null이면 null을 출력하고, null이 아니면 length를 출력
- non-null 단정 기호를 활용
- 변수가 null이 아님을 단정
- 변수에 null이 할당되어 있다면 실행 중에 NPE 발생
- 세이프 콜 + 엘비스 연산자
- ${str1?.length ?: -1}: str1이 null이면 -1 출력, null이 아니면 length 출력
- 세이프 콜
자료형 변환
코틀린은 다른 자료형을 가진 변수를 비교 or 연산할 수 없음
- 변환 메소드 사용: .toDouble(), .toChar() 등
기본형과 참조형 자료형의 비교 원리
- 값 비교: == (이중등호)- 값만을 비교
- 참조 주소 비교: === (삼중등로)- 참조 주소만을 비교
스마트 캐스트
컴파일러가 자동으로 형 변환
Number형
- 숫자를 저장하기 위한 특수한 자료형 객체
- Number형의 변수는 저장되는 값에 따라 자료형이 변환됨
as에 의한 스마트 캐스트
val x: String?= y as? String
→ y가 null 또는 값을 가질 때, x에게 할당할 수 있음
자료형 검사
- num is Int: num 변수가 Int 형인지 검사
- num !is Int: num 변수가 Int 형이 아닌지 검사
묵시적 변환
- Any형: 최상위 클래스, 어떤 자료형이라도 될 수 있는 특수한 자료형
- Any형으로 선언한 변수는 어떤 값이 들어와도 그 값의 자료형으로 묵시적 변환이 됨
02-4 코틀린 연산자
코틀린에서 삼항 연산자는 존재하지 않음
기본 연산자
- 산술 연산자: +, -, *, /, %
- 대입 연산자: =, +=, -=, *=, /=, %=
- 증가/감소 연산자: ++, –
- 비교 연산자: >, <, >=, <=, ==, !=,===, !==
논리 연산자: &&, , !
비트 연산자
n.shl(bits), n.shr(bits): n을 표현하는 비트를 bits만큼 왼쪽, 오른쪽으로 이동(부호 있음)
n.ushr(bits): n을 표현하는 비트를 bits만큼 오른쪽으로 이동(부호 없음)
n.and(bits), n.or(bits), n.xor(bits): n을 표현하는 비트와 bits를 표현하는 비트로 논리곱, 논리합, 배타적 연산
xor로 두 숫자를 바꿀 수 있음!
n1= n1 xor n2
n2= n1 xor n2
n1= n1 xor n2
n.inv(): n을 표현하는 비트를 모두 뒤집음