본문 바로가기
Kotlin/Kotlin 프로그래밍

[Kotlin] 변수와 자료형, 연산자 (1)

by 주 녕 2021. 3. 31.
728x90

모든 내용은 Do it! 코틀린 프로그래밍을 바탕으로 정리한 것입니다. 

 

코틀린 패키지

프로젝트 > 모듈 > 패키지 > 파일

  • 대규모 프로젝트에서는 기능을 모듈로 분리하여 관리함
  • 디폴트 패키지 : src
    • 패키지가 다르면 파일 이름이 같아도 오류 발생 X
  • 파일에 1개의 클래스가 정의되어 있다면 .kt 확장자가 빠진 파일
  • 파일 1개에 여러 개의 클래스가 정의되어 있다면 .kt 확장자 파일
    • 파일 이름과 클래스 선언 개수에 큰 의미를 두지 않음 

 

 


변수와 자료형

변수

|----- val  : 읽기 전용 변수

|                  최초로 지정한 변수의 값으로 초기화하고 더 이상 바꿀 수 없음

|----- var : 변경 가능한 변수

                   최초로 지정한 변수의 초깃값이 있더라도 값을 바꿀 수 있음

 

val username: String = "Junyoung"

→ 읽기 전용 변수 username이 String 자료형으로 선언되었고, "Junyoung"이라는 값이 할당됨

 

val username = "Junyoung"

→ 자료형이 명시되어 있지 않으면 자료형을 추론함

단, 자료형을 지정하지 않은 변수는 반드시 자료형을 추론할 값을 지정해야 함 (var username - 오류)

Ctrl + Shift + P : 자료형 표시 단축키

 

자료형

코틀린의 자료형은 참조형 자료형을 사용함

  • 기본형 자료형: 가공되지 않은 순수한 자료형 (프로그래밍 언어에 내장)
    • int, long, float, double 등
    • 기본형으로 선언한 변수는 임시 메모리인 스택에 을 저장 (값이 저장된 메모리의 크기도 고정)
  • 참조형 자료형 : 객체를 생성하고 동적 메모리 영역에 데이터를 둔 다음 이것을 참조하는 자료형
    • String, Date 등
    • 참조형으로 선언한 변수는 스택에 참조 주소를 저장
    • 성능 최적화를 위해 코틀린 컴파일러에서 다시 기본형으로 대체됨 → 자동으로 최적화 수행

 

기본 자료형

 정수 자료형 
  • 부호가 있는 정수 자료형 
    : Long(8바이트), Int(4바이트), Short(2바이트), Byte(1바이트)
  • 접미사 L(Long형), 접두사 0x(16진 Int형), 접두사 0b(2진 Int형)
  • 보통 숫자값은 Int형으로 추론되기 때문에 더 작은 범위의 정수 자료형을 사용하고 싶다면 명시해야 함
  • 부호가 없는 정수 자료형
    : ULong, UInt, UShort, UByte
     
  • 값 뒤에 식별자 u를 붙여야 하며, 자료형을 명시해야만 사용할 수 있음
 실수 자료형 
  • Double(8바이트), Float(4바이트)
    자료형을 명시하지 않으면 Double형
    값 뒤에 식별자 F를 붙이면 Float형

    * 부동 소수점 (메모리의 한계 극복)
    : 값 뒤에 E-n/e-n (왼쪽으로 소수점 n번 이동), en, En (오른쪽으로 소수점 n번 이동)
논리 자료형
  • Boolean(1비트) - true, false
문자 자료형
  • Char(2바이트) -값은 작은 따옴표(' ')로 감싸서 표현함
  • 문자 자료형 값을 저장할 때 아스키코드 번호로 저장함
    하지만 숫자를 사용하여 선언하는 것은 금지! → toChar()를 사용해야 함
  • 문자 자료형에는 1개의 문자만 저장할 수 있음
    •  

 

문자열 자료형

배열형태의 특수한 자료형

 

문자열 자료형 선언과 저장 방식

fun main(){
	var str1: String = "Hello"
	var str2 = "World"
	var str3 = "Hello
    
	// === : 참조 비교 연산자
	println("str1 === str2: ${str1 === str2}") // false
	println("str1 === str3: ${str1 === str3}") // true
}

스택에는 str1, str2, str3가 쌓이게 되는데 이때 str1과 str3의 저장공간에는 같은 참조 주소가 들어가게 됨.

str1과 str3에는 같은 문자열이 들어가 있는데 이를 스택에 2번 저장하는 것보다 이미 저장된 값을 사용하는 것이 훨씬 효율적이기 때문 → 코틀린은 힙 영역의 String Pool이라는 공간에 문자열을 저장해두고 str1, str3가 참조하도록 함

 

표현식과 $기호 사용하기

변수의 값이나 표현식을 문자열 안에 넣어 출력하려면 $ 기호와 함께 변수나 표현식을 사용

fun main() {
	var a = 1
    var str1 = "a is $a"
    var str2 = "a = ${a+10}" 
    
    println("str1: $str1, str2: \"$str2\"") // str1: a is 1, str2: "a = 11"

 

형식화된 다중 문자열 사용하기

줄바꿈 문자, 탭 등의 특수문자가 포함된 문자열을 그대로 표현하려면 """ 기호를 사용

 

자료형에 별명 붙이기

typealias라는 키워드로 자료형에 별명을 붙일 수 있음

typealias Username = String
val user: Username = "Junyoung"

 

 

 NOTE 

  • 언더스코어로 자릿값을 구분할 수 있음 (ex. 1_000_000)
    • 모든 종류의 값에 사용할 수 있음 (ex. 1234_1234_1234_1234, 0xAB_CD_EF_12)
  • 정수 자료형과 실수 자료형의 최솟값과 최댓값
    • Byte, Short, Int, Long, Float, Double에서 MIN_VALUE, MAX_VALUE를 사용하자

 

 

 

 

 

728x90

댓글