Processing math: 100%
-->

별의 공부 블로그 🧑🏻‍💻
728x90

자료형과 변수

자료형과 변수

자료형

  • Int
  • String
  • Float
  • ...

 

변수

  • val (Value) : 불변형(Immutable)
  • var (Variable) : 가변형(Mutable)

 

변수의 선언

val username:   String = "Kildong"
선언 키워드 변수 이름   자료형  

 

변수 선언 예

val username = "Kildong" // 자료형을 추론하여 String 으로 결정
var username // 자료형을 지정하지 않은 변수는 사용할 수 없음.
val init: Int // 사용 전 혹은 생성자 시점에서 init 변수를 초기화 해야 함.
val number = 10 // number 변수는 Int 형으로 추론

 

여기서 주의할 점은, var username 과 같이 자료형을 지정하지 않은 변수는 사용할 수 없다는 점이다. 다음과 같이 끊어서도 사용할 수도 없다.

var username
username = "Kildong" // Compile Error!

 

변수 이름 생성 규칙

  • 변수 이름은 123abc 와 같이 숫자로 시작하면 안 된다.
  • 변수 이름에는 while, if 와 같이 코틀린에서 사용되는 키워드는 사용할 수 없다.
  • 변수 이름은 의미 있는 단어를 사용하여 만드는 것이 좋다.
  • 여러 단어를 사용하여 변수 이름을 지을 경우, 카멜 표기법(Camel Expression)을 사용하라.

 

변수명

  • 일반 변수, 함수명 등은 단봉 낙타와 같은 카멜 표기법을 사용한다.
camelCase
numberOfBooks
myFirstNumber
manyVariableCamelCase
myFunction

 

  • 클래스, 인터페이스 등은 쌍봉 낙타 혹은 파스칼 표기법(Pascal Expression)을 사용한다.
AnimalCategory
CarEngine

 

자료형 알아보기

기본형(Primitive Data Type)

  • 가공되지 않은 순수한 자료형으로 프로그래밍 언어에 내장
  • int, long, float, double

 

참조형(Reference Type)

  • 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형
  • Int, Long, Float, Double

 

당연히 기본형이 성능이 더 좋다! 코틀린에서는 참조형만 사용하도록 하고 있는데, 사용 시 컴파일 과정에서 기본형으로 변환된다. 코틀린에서는 참조형을 선언해서 사용하지만, 컴파일 과정을 거치면 기본형 같이 사용한다.

 

기본형과 참조형의 동작 원리 이해하기

  • 자바의 기본형과 참조형의 원리
int a = 77; // 기본형
Person person = new Person(); // 객체 참조형으로, person 객체를 위해 참조 주소(A12)를 가진다.

이미지 출처 : 코틀린 프로그래밍 기본 1 (부스트코스)

 

 

기본형 자료형은 스택(Stack) 영역에 쌓이게 되고, 참조형 자료형은 힙(Heap) 영역에 쌓이게 된다.
정적 자료형스택에, 동적 자료형에 쌓인다는 것을 기억하자!

 

  • 코틀린에서는 코딩 시 참조형만 사용되며, 코틀린 컴파일러가 자동적으로 최적화한다.
  • 컴파일 과정을 거친 후 기본형이 사용된다.

 

정수 자료형 

  • 음수가 사용되는 부호 있는 정수 자료형
형식 자료형 크기 값의 범위
정수 자료형 Long 8 Bytes (64 Bits) 2632631
Int 4 Bytes (32 Bits) 2312311
Short 2 Bytes (16 Bits) 2152151(32,76832,767)
Byte 1 Byte (8 Bits) 27271(128127)

 

  • 부호 없는 정수 자료형 (1.3버전 실험적)
형식 자료형 크기 값의 범위
부호 없는
정수형
ULong 8 Bytes (64 Bits) 02641
UInt 4 Bytes (32 Bits) 02321
UShort 2 Bytes (16 Bits) 02161(065,535)
UByte 1 Byte (8 Bits) 0281(0255)

 

  • 코틀린의 정수 자료형은 부호가 있는 것과 부호가 없는 것으로 나눌 수 있다.
  • 숫자 크기에 상관 없이 기본은 모두 Int 형으로 추론된다.

 

자료형 사용 예

  • 자료형 생략
val num05 = 127 // Int 형으로 추론
val num06 = -32768 // Int 형으로 추론
val num07 = 2147483647 // Int 형으로 추론
val num08 = 9223372036854775807 // Long 형으로 추론

 

  • 접미사, 접두사 사용
val exp01 = 123 // Int 형으로 추론
val exp02 = 123L // 접미사 L을 사용해 Long 형으로 추론
val exp03 = 0x0F // 접두사 0x를 사용해 16진 표기가 사용된 Int 형으로 추론
val exp04 = 0b00001011 // 접두사 0b를 사용해 2진 표기가 사용된 Int 형으로 추론

 

  • 작은 값의 사용
val exp08: Byte = 127 // 명시적으로 자료형을 지정 (Byte)
val exp09 = 32767 // 명시적으로 자료형을 지정하지 않으면 Short 형 범위의 값도 Int 형으로 추론
val exp10: Short = 32767 // 명시적으로 자료형을 지정 (Short)

 

  • 부호 없는 정수 자료형
val uint: UInt = 153u
val ushort: UShort = 65535u
val ulong: ULong = 46322342uL
val ubyte: UByte = 255u

 

  • 큰 수를 읽기 쉽게 하는 방법 (가독성 향상)
    • 읽기 쉽게 하기 위해 언더 스코어(_)를 포함해 표현
val number = 1_000_000
val cardNum = 1234_1234_1234_1234L
val hexVal = 0xAB_CD_EF_12
val bytes = 0b1101_0010

 

실수 자료형

형식 자료형 크기 값의 범위
실수형 Double 8 Bytes (64 Bits) 4.0E3241.7E+308 (IEEE754)
Float 4 Bytes (32 Bits) 1.4E453.4E+38 (IEEE754)

 

val exp01 = 3.14 // Double 형으로 추론 (기본)
val exp02 = 3.14F // 식별자 F에 의해 Float 형으로 추론

 

이미지 출처 : 코틀린 프로그래밍 기본 1 (부스트코스)

 

  • 코틀린은 자료형을 명시하지 않으면 Double 형으로 추론한다.
  • 만약 Float 형으로 지정하고 싶으면 간략하게 식별자 F를 실수 옆에 붙이는 방법을 사용하면 된다.
var doubleNum = 0.03 // Double 형으로 추론
var floatNum = 0.03F // Float 형으로 추론

 

  • 실수의 개수는 무한하지만 메모리 공간은 유한하다. 그래서 메모리에 모든 실수를 표현하기는 어렵다.
  • 이러한 메모리의 단점을 극복하기 위해 실수를 표현할 때 부동 소수점(Floating-Point) 방식을 사용한다.
    • 부동 소수점 방식은 실수를 가수, 지수로 나누어 표현하는 방식이다.
      • 3.14×1016=3.14E+16
val exp03 = 3.14E-2 // 왼쪽으로 소수점 2칸 이동, 0.0314
val exp04 = 3.14e2 // 오른쪽으로 소수점 2칸 이동, 314

 

  • 컴퓨터는 음수를 표현하기 위해 2의 보수라는 개념을 사용하고 있다.
    • 컴퓨터의 연산기는 덧셈 기능의 회로만 있으며, 덧셈 기능을 뺄셈으로 구현하기 위해서 만들어진 규칙이다.

 

부동 소수점의 이해

  • 32비트와 64비트의 부동 소수점 표현

이미지 출처 : 코틀린 프로그래밍 기본 1 (부스트코스)

 

  • Float
    • 1 Bit : 부호
    • 8 Bits : 지수
    • 23 Bits : 가수
  • Double 형
    • 1 Bit : 부호
    • 11 Bits : 지수
    • 52 Bits : 가수

 

부동 소수점의 표현

  • 12.375(10) 의 표현
    • 음수 :
      • 127 (bias) 기준으로 구분
    • 절댓값 : 12.375
      • 1100.0112
      • 1.100011×23
      • 정수부의 1 생략
      • 100011가수부에 표현
      • 23 진수부에 다음과 같이 표현한다.
        • 127(bias)+3=130(10)=10000010

 

소수를 이진법으로 나타내는 방법은 다음과 같다.
참고 사이트 : https://woo-dev.tistory.com/93

 

IEEE 방식의 부동 소수점 제한

  • 공간 제약에 따라 부동 소수점 연산의 단점이 존재한다.
fun main() {
var num: Double = 0.1
for (x in 0..999) {
num += 0.1
}
println(num) // 100.0.9999999999859
}

 

0.1을 1000번 더하면 100이 나와야 하지만, IEEE 방식의 부동 소수점 방식으로 계산을 할 경우 정확하지 않은 결과값이 출력된다.

 

정수 자료형과 실수 자료형의 최솟값과 최댓값 출력하기

  • MIN_VALUE 또는 MAX_VALUE 자료형 요소를 이용하여 자료형의 최솟값최댓값을 확인할 수 있다.
fun main() {
println("Byte min: " + Byte.MIN_VALUE + " max: " + Byte.MAX_VALUE)
println("Short min: " + Short.MIN_VALUE + " max: " + Short.MAX_VALUE)
println("Int min: " + Int.MIN_VALUE + " max: " + Int.MAX_VALUE)
println("Long min: " + Long.MIN_VALUE + " max: " + Long.MAX_VALUE)
println("Float min: " + Float.MIN_VALUE + " max: " + Float.MAX_VALUE)
println("Double min: " + Double.MIN_VALUE + " max: " + Double.MAX_VALUE)
}
Byte min: -128 max: 127
Short min: -32768 max: 32767
Int min: -2147483648 max: 2147483647
Long min: -9223372036854775808 max: 9223372036854775807
Float min: 1.4E-45 max: 3.4028235E38
Double min: 4.9E-324 max: 1.7976931348623157E308

 

2의 보수란?

자료형의 최소 최대

  • 음수는 2의 보수 표현을 사용해 연산된다.
    • 절댓값의 이진수에 값을 뒤집고 1을 더한다.
  • 예) 6(10)
    • 6의 2진값 : 00000110(2)
    • 값 뒤집기 : 11111001(2)
    • 1을 더하기 : 11111010(2)
  • 2의 보수를 사용하는 이유?
    • 제한된 자료형을 음수/양수로 나누어 최대한 사용하며, 2의 보수는 가산 회로만으로 뺄셈을 표현할 수 있기 때문

이미지 출처 : 코틀린 프로그래밍 기본 1 (부스트코스)

 

그 밖의 자료형

논리 자료형

형식 자료형 크기 값의 범위
논리형 Boolean 1 Bit true, false

 

val isOpen = true // isOpen은 Boolean으로 추론
val isUploaded: Boolean // 선언만 한 경우 자료형(Boolean) 반드시 명시

 

문자 자료형

형식 자료형 크기 값의 범위
문자 Char 2 Bytes (16 Bits) 02161 (\u0000 ~ \uFFFF)

 

val ch = 'c' // ch는 Char로 추론
val ch2: Char // 선언만 한 경우 자료형(Char) 반드시 명시

 

문자열 자료형

  • String 으로 선언되며 String Pool 이라는 공간에 구성
fun main() {
var str1: String = "Hello"
var str2 = "World"
var str3 = "Hello"
println("str1 === str2: ${str1 === str2}")
println("str1 === str3: ${str1 === str3}")
}
- 코틀린에서 == 는 값만 비교하지만, === 는 '참조'까지 비교한다.
- 자바 == 으로 참조까지 비교할 수 있고, === 연산자는 없다.

- var로 선언된 str1의 참조 주소는 가변형으로, 바뀔 수 있다. (다른 것 지정 가능)
- 다만, 일단 선언돼 생성된 메모리 공간의 Hello 는 변경되지 않는다. (변경 불가능)

 

표현식에서 문자열

  • 표현식$ 기호를 사용하여 문자열 출력하기
var a = 1
var s1 = "a is $a" // String 자료형의 s1을 선언하고 초기화. 변수 a가 사용됨.

 

  • 사용 예제
fun main() {
var a = 1
val str1 = "a = $a"
val str2 = "a = ${a + 2}" // 문자열에 표현식 사용
println("str1: \"$str1\", str2: \"$str2\"")
}
str1: "a = 1", str2: "a = 3"

 

참고 사이트

 

코틀린 프로그래밍 기본 1

부스트코스 무료 강의

www.boostcourse.org

 

728x90


📖 Contents 📖
자료형과 변수자료형과 변수자료형변수변수의 선언변수 선언 예변수 이름 생성 규칙변수명자료형 알아보기기본형(Primitive Data Type)참조형(Reference Type)기본형과 참조형의 동작 원리 이해하기정수 자료형 자료형 사용 예실수 자료형부동 소수점의 이해부동 소수점의 표현IEEE 방식의 부동 소수점 제한정수 자료형과 실수 자료형의 최솟값과 최댓값 출력하기2의 보수란?자료형의 최소 최대그 밖의 자료형논리 자료형문자 자료형문자열 자료형표현식에서 문자열참고 사이트