본문 바로가기
개발언어/Kotlin : 코틀린

코틀린 익히기 2 - 자료형, 연산자

by 개발자D 2023. 2. 27.

자료형, 연산자

코틀린을 공부하기 전 자바(JAVA)의 변수와 연산자를 먼저 공부합시다.

 

자바 쉽게 배우기 2 - 변수

이번 글에서는 본격적으로 JAVA언어에 대해 배워보겠습니다. 변수에 대해 알아봅시다. 변수 Variable 1. 변수의 개념 프로그래밍 언어를 처음 공부하시는 분들이라면 변수라는 단어를 봤을 때 수학

devdharu.tistory.com

 

자바 쉽게 배우기 3 - 연산자

연산자 Operator 프로그래밍에서 연산자는 연산을 지시하는 부호를 뜻합니다. 피연산자는 연산의 대상으로 연산자의 양옆에 위치하게 됩니다. 예시 ) 4 + 5 4, 5 : 피연산자 + : 연산자 연사자의 종류

devdharu.tistory.com

 

자료형

변수의 선언과 초기화

val(var) 변수명 : 자료형 = 값

val(var) 변수명 = 값
var : 변경되는 변수
mutable

val : 변경되지 않는 변수
immutable

 

코틀린에서는 값을 통해 자료형을 추론해 주기 때문에 자료형을 생략할 수 있습니다. 단, 반드시 값을 할당해 주어야 사용할 수 있습니다.

코틀린에서는 변수를 기본형과 참조형으로 구분하지 않고 참조형만 사용합니다. 참조형으로 선언한 변수는 성능 최적화를 위해 코틀린 컴파일러를 통해 다시 기본형으로 대체됩니다.

 

지연 초기화

말 그대로 변수 선언 시에 초기화하지 않고 지연하는 방법입니다.

 

lateinit

lateinit var 변수명 : 자료형

var 키워드만 사용할 수 있습니다.

Int, Long, Short, Double, Float, Boolean, Byte 자료형은 사용할 수 없습니다.

 

lazy

val 변수명: 자료형 by lazy {
	...
}

val 키워드 만 사용할 수 있습니다.

변수가 처음으로 사용될 때 by lazy 블록 {} 이 실행되며 리턴값이 초기값으로 할당됩니다.

 

기본 자료형 객체 (참조형)

자봐와 달리 앞글자를 대문자로 표시합니다.

 
타입
메모리 사용 크기
저장되는 값의 허용 범위
 
정수 타입
(숫자)
Byte
1byte
8bit
-(2의 7제곱) ~ (2의 7제곱 - 1)
 
Short
2byte
16bit
-(2의 15제곱) ~ (2의 15제곱 - 1)
 
Char
2byte
16bit
0 ~ 65535(유니코드)
char은 'a', 'Z' 와 같은 하나의 문자,
하지만 유니코드로 변환 시 숫자값을 가짐
['] 작은따옴표로 감싸서 표현
Int
4byte
32bit
-(2의 31제곱) ~ (2의 31제곱 - 1)
가장 많이 사용됨
2의 31제곱은 약 21억
Long
8byte
64bit
-(2의 63제곱) ~ (2의 63제곱 - 1)
어미에 대소문자 L
실수 타입
(소수점이 있는 숫자)
Float
4byte
32bit
(1.4 * 10의 -45제곱) ~ (3.4 * 10의 38제곱)
어미에 대소문자 F
정밀도 : 7자리
Double
8byte
64bit
(4.9 * 10의 -324제곱) ~ (1.8 * 10의 308제곱)
float보다 많이 사용됨
어미에 대소문자 D (생략가능)
정밀도 : 15자리
논리 타입
(true / false)
Boolean
1byte
8bit
true(1), false(0)
 

 

정수 자료형

정수 자료형에 부호 없는 자료형이 추가됩니다.

자료형 메모리 사용 크기 저장되는 값의 허용범위 사용 형식
UByte 1 byte 8 bit 0 ~ 2의 8제곱 - 1 어미에 대소문자 u
UShort 2 byte 16 bit 0 ~ 2의 16제곱 - 1 어미에 대소문자 u
UInt 4 byte 32 bit 0 ~ 2의 32제곱 - 1 어미에 대소문자 u
ULong 8 byte 64 bit 0 ~ 2의 64제곱 - 1 어미에 대소문자 uL

 

실수 자료형, 논리 자료형, 문자 자료형

자바의 자료형과 동일한 특징을 갖습니다.

 

 

자료형의 최솟값, 최댓값확인

자료형.MIN_VALUE : 최솟값
자료형.MAX_VALUE : 최댓값

 

 

문자열 자료형

문자열 자료형의 출력 (String Template)

var a = 1
val str1= "a is $a" // $변수명을 통해 문자열 내에서 변수의 값 출력
println(str1)
// a is 1

val str2 = "a is ${a + 1}" // ${표현식}을 통해 문자열 내에서 표현식의 값 출력
println(str2)
// a is 2

 

  • 이스케이프 문자 \ 나 ${' '}를 사용하여 기호를 표현할 수 있습니다.
  • 문자열을 있는 그대로 출력하려면 """을 문자열 양쪽 끝에 입력합니다.

 

널 허용 자료형 / 비허용 자료형

val str1 : String = "Hello Kotlin"
str1 = null // 불가능

val str2 : String? = "Hello Kotlin"
str2 = null // 가능

코틀린에서는 널이 허용되는 ? 자료형과 허용되지 않는 자료형을 구분합니다.

널이 허용되는 ? 자료형이 허용되지 않는 자료형의 상위 자료형입니다.

 

자료형에 별명 붙이기

변수의 자료형이 복잡한 구조를 가지면 자료형에 별명을 붙일 수 있습니다.

typealias 별명 = 자료형

 


자료형 검사

널 허용 자료형의 세이프콜(?.) / not null 단정기호(!!.) / 엘비스 연산자(?:)

세이프콜(?.) : 변수가 null 이 아닐 경우 멤버에 접근하도록 합니다. null일 경우 null을 반환합니다.

not null 단정기호(!!.) : null 여부를 검사하지 않습니다. 변수가 null 일 경우 컴파일은 진행되지만 실행 시 널 포인터 예외가 발생합니다.

엘비스 연산자(?:) : null이 아닌 경우 왼쪽 값을, null인 경우 오른쪽 값을 반환합니다.

 

세이프콜과 엘비스 연산자 동시 활용

변수?.멤버 ?: (null일 경우 반환될 값)

 

is, !is

is 키워드로 자료형을 검사할 수 있습니다. 결과는 boolean형으로 반환되며, 검사 결과가 참일 경우 검사한 자료형으로 형변환됩니다.

if (num is Int) // num이 Int형이면
if (num !is Int) // num이 Int형이 아니면

val x: Any
x = "Kotlin" // 아직 x는 Any형
if ( x is String ) { 
	print(x.length) // x가 String으로 형변환
}

 

as, as?

as 키워드로  형변환할 수 있습니다. 형변환이 불가능할 경우 예외가 발생합니다. as?를 사용하면 null인 경우 null을 반환합니다.

val x: String = y as String
// y가 null이 아니면 String으로 형변환되어 x에 할당
// y가 null이면 형 변환할 수 없으므로 예외 발생

val x: String? = y as? String
// null 예외를 피하기 위해서 as? 사용 가능

 


자료형 변환

자동 형변환

표현 범위가 더 큰 자료형과 연산하면 큰 자료형으로 자동 형변환됩니다.

 

스마트 캐스트

대입되는 값에 따라 자료형이 자동으로 변환됩니다.

Number형으로 지정할 경우 값에 따라 적절한 숫자 자료형으로 변환됩니다.

Any형으로 지정할 경우 어떤 자료형으로든 변환될 수 있습니다.

 

강제 형변환

to자료형()으로 형변환이 가능합니다. 자료형의 첫 글자는 대문자로 합니다.

예시 ) toInt()

형변환 될 수 없는 경우 예외가 발생합니다.


비교

== : 값 비교
=== : 참조 주소 비교

 

❗ 변수의 값이 -128~127 범위에 있으면 캐시에 그 값을 저장하고 변수는 캐시의 주소를 가리키기 때문에 값이 같을 때 참조 주소까지 같아집니다.

 


연산자

종류 연산자
부호 연산자 + - 
증감 연산자 ++ --
논리 부정 연산자 !
비트 부정 연산자 ~
산술 연산자 + - * / % 
쉬프트 연산자 << >>
비교 연산자 > < >= <= == !=
비트 연산자 | & ^
논리 연산자 && || 
조건 연산자 ? :
대입 연산자 =

 

부호 연산자, 증감 연산자, 논리 부정 연산자, 비트 부정 연산자, 산술 연산자, 비교 연산자, 논리 연산자, 대입 연산자

 

자바의 연산자와 같습니다.

 

쉬프트 연산자 & 비트 연산자 

쉬프트 연산 메서드

n.shl(bits) : n을 표현하는 비트를 bits만큼 왼쪽으로 이동(부호 있음)

n.shr(bits) : n을 표현하는 비트를 bits만큼 오른쪽으로 이동(부호 있음)

n.ushr(bits) : n을 표현하는 비트를 bits만큼 오른쪽으로 이동(부호 없음)

비트 논리합 연산자, 논리곱 연산자, 배타적합 연산자

자바 코틀린 설명
| or 하나라도 1이면 1
& and 하나라도 0이면 0
^ xor 같으면 0 다르면 1

 

n.inv(bits) : n를 표현하는 비트를 모두 뒤집음

 

조건 연산자 (삼항 연산자)

자바에서 유용하게 쓰였던 조건 연산자 ? : 는 아쉽게도 코틀린에 없습니다.


코틀린과 자바는 비슷하면서도 다릅니다. 자료형과 연산자에서 가장 큰 차이점은 아마 null 허용, 비허용 자료형으로 구분된다는 점이겠죠? 자료형을 선언할 때 var나 val 키워드를 사용하는 점도 새로우실 겁니다. 개인적으로는 자바보다 코틀린 언어를 더 선호하는데요. 간결한 코드에서 오는 매력이 크다고 생각합니다. 다음글은 조건문과 반복문에 대해 다룹니다.

 

코틀린 익히기 3 - 조건문과 반복문

코틀린에서의 프로그램 흐름제어 방법에 대해 알아보겠습니다. 흐름 제어에는 조건문과 반복문이 사용됩니다. 범위 연산자 in 조건문과 반복문에서 자주 사용되는 범위 연산자 in입니다. 변수가

devdharu.tistory.com