본 게시글은 부스트코스의 코틀린 기본프로그래밍을
시청한 후 학습한 정보를 기록하는 목적의 게시글입니다.
본 게시글은 부스트코스 서포터즈 3기 활동 게시글입니다.
#2-1. 기본 자료형과 변수 선언방법 (1) 불변형, 기본형
- 들어가기 전에
본격적으로 변수와 자료형에 대해 이야기할 시간입니다. 변수란 값을 넣을 수 있는 상자 정도로 비유할 수 있습니다. 코틀린에는 많은 언어에서 사용하는 기본형과 특수한 형의 자료형이 있으므로 함께 알아봅시다.
- 핵심 키워드
- 불변형(val) 및 가변형(var) 선언
- 카멜표기법
- 기본형과 참조형
1) 자료형과 변수의 선언
- val(value) - 불변형 //값의 선언 이후 수정 불가
- var(variable) - 가변형
val username: String = "Kildong"
//선언키워드 변수이름 : 자료형 = "값"
문자열 내에 변수나 식을 ${변수나 식}을 통해 나타낼 수 있다.
fun main(){
val username: String = "Kildong"
println("username: $username")
}
2) 변수명의 예
- var username = "Kildong" // 자료형을 추론하여 String으로 결정
- var username // 자료형을 지정하지 않은 변수는 사용할 수 없다
- val init: Int // 사용전 혹은 생선자 시점에서 init변수를 초기화 해야한다.
- val number = 10 // number 변수는 Int형으로 추론
!변수 선언 시 유의 사항
- 변수 이름은 숫자로 시작할 수 없다
- 변수 이름에는 while, if와 같이 코틀린에서 사용되는 키워드는 사용할 수 없다
- 여러 단어를 사용하여 변수 이름을 지을 경우 카멜 표기법(Camel Expression)을 사용하여야 한다.
3) 카멜 표기법
변수 명의 단어가 변경되는 시점에서 첫글자를 대문자로 선언하는 것.
- camelCase
- numberOfBooks
- myFirstNumber
cf) 클래스, 인터페이스 등 (파스칼 표기법)
- AnimalCategory
- CarEngine
4) 기본형과 참조형
기본형(Java) : 가공되지 않은 순수한 자료형
ex) int, ling, float, double 등
코틀린에서는 기본형 자료형을 사용하지 않는다!
보통 프로그래밍 언어의 자료형은 기본형 자료형과 참조형 자료형으로 구분하며 코틀린은 참조형 자료형을 사용합니다.
기본형(Primitive Data Type)은 말 그대로 가공되지 않은 순수한 자료형을 말하며 프로그래밍 언어에 내장되어 있습니다. 참조형(Reference Type)은 객체를 생성하고 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형을 말합니다 . 자바에서는 int, long, float, double 등 기본형과 String, Date와 같은 참조형을 모두 사용하지만 코틀린에서는 코딩할 때는 참조형만 사용하며 이것은 다시 코틀린의 성능 최적화에 따라 JVM에 실행하기 위해 코틀린 컴파일러에서 기본형으로 대체됩니다.
참조형 : 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형
Int, Long, Float, Double
>> 참조형 변수는 클래스 형태로 만들어진 ` 객체 `이다. (동적 메모리 공간에 위치)
5) 기본형과 참조형의 원리
기본형이라 함은 Stack 메모리에 값이 저장되어 있고,
참조형이라 함은 Stack 메모리 내에 주소가 저장되어 있으며,
그 주소는 Heap의 특정한 공간(사용자가 지정해줄 순 없다.)에 위치해 있다.
결국 코틀린은 이러한 참조형 데이터를 이용하는 언어이다.
여기서 메모리 Stack에 대해 개념적으로 보충이 필요하다면, 아래의 게시글들을 참조하자.
Java Stack and Heap - Java Memory Management
(www.youtube.com/watch?v=450maTzSIvA&feature=emb_logo)
! 메모리 스텍 (in Java) 정리
Stack Memory : Java의 스택은 메서드, 지역 변수 및 참조 변수를 포함하는 메모리 섹션
Heap Memory : Heap은 객체를 초함하고 참조 변수도 포함할 수 있는 메모리 섹션
- 메서드가 호출되면 스택 맨 위에 프레임이 생성
- 메서드 실행이 완료되면 제어 흐름이 호출 메서드로 돌아가고 해당 스택 프레임이 flush
- 스택에 로컬 변수가 생성됩
- 인스턴스 변수는 힙에 생성되며 해당 변수가 속한 개체의 일부
- 참조 변수는 스택에 생성
#2-1. 기본 자료형과 변수 선언방법 (2) 정수형과 실수형
- 들어가기 전에
본격적으로 변수와 자료형에 대해 이야기할 시간입니다. 변수란 값을 넣을 수 있는 상자 정도로 비유할 수 있습니다. 코틀린에는 많은 언어에서 사용하는 기본형과 특수한 형의 자료형이 있으므로 함께 알아봅시다.
- 핵심 키워드
- 정수형(Byte, Short, Int, Long)
- 실수형(Float, Double)
- 부호없는 자료형
- 실수형의 표현범위 제한
1) 정수형 자료형 알아보기
정수형 - 음수가 사용되는 부호 있는 자료형
- Long 8byte
- Int 4byte
- Short 2byte
- Byte 1byte
정수형 - 부호 없는 자료형
- ULong 8byte
- UInt 4byte
- UShort 2byte
- UByte 1byte
2) 자료형 사용의 예
자료형 생략
val num05 = 127 //Int형으로 추론
val num06 = -32768 //Int형으로 추론
val num07 = 2147483647 // Int형으로 추론
val num08 = 1234567898764321 //Long형으로 추론
접미사 접두사 사용
val exp01 = 123 //Int형으로 추론
val exp02 = 123L //접미사 L을 통해 Long형으로 추론
val exp03 = 0x0F //접두사 Ox를 사용해 16진 표시가 사용된 Int형으로 추론
val exp04 = 0b00001011 //접두사 0b를 사용해 2진 표시가 사용된 Int형으로 추론
작은 값의 사용
val exp08:Byte = 123 // 명시적으로 자료형을 지정
val exp09 = 32767 // 명시적으로 자료형을 지정하지 않으면 short형의 범위의 값도 Int형으로 추론
val exp10:Short = 32767 //명시적으로 자료형을 지정
3) 부호없는 자료형
부호없는 자료형의 선언 역시 접미사 혹은 접두사를 통해 선언할 수 있다.
또 숫자 사이 구분자로 언더바(_) 표기가 허용된다.
4) 실수 표현형
- Double 8바이트
- Float 4바이트
val exp01 = 3.14 // 기본적으로 Double형으로 추론
val exp02 = 3.14F // 식별자 F에 의해 Float형으로 추론
5) 부동 소숫점의 표현
6) 공간제약에 따른 부동 소숫점 표현의 제한
fun main() {
var num : Double = 0.1
for(x in 0..999) {
num += 0.1
}
println(num) //100.099999999_999859
}
num의 값이 100이 나올 것 같지만, 실제로는 소수점부가 포함된 수가 출력됨을 알 수 있다.
! 읽어 볼 거리
Floating point math in different programming languages
#2-1. 기본 자료형과 변수 선언방법 (3) 크기 범위와 기타 자료형
- 들어가기 전에
본격적으로 변수와 자료형에 대해 이야기할 시간입니다. 변수란 값을 넣을 수 있는 상자 정도로 비유할 수 있습니다. 코틀린에는 많은 언어에서 사용하는 기본형과 특수한 형의 자료형이 있으므로 함께 알아봅시다.
- 핵심 키워드
- 각 자료형의 최대 최솟값
- 2의보수
- 논리 자료형(Boolean)
- 문자 자료형(Char)
- 문자열 자료형(String)
- String Pool
1) 각 자료형 최대 최솟값 알아보기 예제
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)
}
프로그램을 효율적으로 만들려면 메모리 공간을 효율적으로 활용하여야 한다.
따라서, 각 데이터 타입별 데이터 최댓값과 최솟값을 알고 있다면 유용하게 사용할 수 있다.
비단 암기하기 보다는 코틀린에서 직접 출력하는 방법을 익히도록 하자.
2) 2의 보수란?
Byte란 자료형에 변수 127이 들어있을 때 여기에 1을 더하게 된다면,
비트 연산에 의해 가장 상단의 비트인 부호 비트가 바뀌고 값은 -128이 된다.
2진수 음수 표현
3) 그 밖의 자료형
- 논리 자료형
참, 거짓을 표현하는 자료형으로써 조건을 검사할 때 주로 사용된다.
(다른 언어와 마찬가지로 true, false 두 가지 값만 가지고 있다.)
val isOpen = true // isOpen은 Boolean으로 추론
val isUploaded: Boolean // 선언만 한 경우 자료형(Boolean) 반드시 명시
- 문자 자료형
Char은 문자를 표현하기 위해 사용하며 문자 자료형의 값은 작은따옴표(')로 감싸 표현한다.
문자 자료형은 1개의 문자만 저장할 수 있다.
val ch = 'c' // ch는 Char로 추론
val ch2: Char // 선언만 한 경우 자료형(Char) 반드시 명시
//ASCII코드
val ch = 'a'
println(ch + 1) // b
val chNum: Char = 65 // 에러! 숫자를 사용하여 선언하는 것은 금지
//정수를 사용한 문자의 저장
val code: Int = 65
val chFromCode: Char = code.toChar() // code에 해당하는 문자를 할당
println(chFromCode) // 결과는 A
컴퓨터는 문자 자료형의 값을 저장할 때 문자 세트를 참고하여 번호로 저장한다.
단, 문자를 선언할 때 번호가 아닌 문자로 선언하여야 한다.
4) 문자열 자료형
문자 자료형은 한개의 문자만 저장할 수 있는 한계가 있었다.
여러 문자를 저장하기 위해서는 문자 자료형을 사용할 필요가 있다.
문자열 자료형은 문자 자료형에서 더 나아가 여러 문자를 배열하여 저장할 수 있는 자료형이다.
자형인 Char은 char과 같은 기본형으로 처리되지만,
문자열 자료형은 기본형에 속하지 않는 배열 형태로 되어있는 특수한 자료형이다
fun main() {
var str1: String = "Hello"
var str2 = "World"
var str3 = "Hello"
println("str1 === str2: ${str1 === str2}")
println("str1 === str3: ${str1 === str3}")
}
str1, str3에는 같은 문자열이 저장되어 있다.
이 경우는 Hello를 메모리에 두 번 저장하는 것보다 이미 저장된 값을 활용하는 것이 효율적일 텐데,
코틀린은 힙 메모리 영역의 String Pool이라고 부르는 공간에 문자열인 Hello를 저장해두고
이 값을 str1, str3이 참조하게 된다,
결과적으로 str3의 참조 주소는 str1과 동일해 참조 비교를 위해 연산자 ===를 사용하면 true가 반환된다.
5) 표현식과 문자열
var a = 1
val 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\"")
}
위 코드는 이스케이프 문자를 사용해 큰따옴표를 문자열 안에 표기하고 있는데,
이스케이프 문자는 역슬래시를 붙여 표현하는 특수 문자 표기법이다.
val special = "\"hello\", I have \$15"
println(special) // "hello", I have $15
'오픈튜토리얼스 > 코틀린 프로그래밍 기본' 카테고리의 다른 글
[부스트코스|코틀린] 2단원 3장. 마법의 요술상자, 함수의 기본 (2) (0) | 2021.02.10 |
---|---|
[부스트코스|코틀린] 2단원 3장. 마법의 요술상자, 함수의 기본 (1) (0) | 2021.02.07 |
[부스트코스|코틀린] 1단원 2장. 변수와 자료형 (3) (0) | 2021.02.02 |
[부스트코스|코틀린] 1단원 2장. 변수와 자료형 (2) (0) | 2021.01.27 |
[부스트코스|코틀린] 1단원 1장. 코틀린이란 무엇일까? (0) | 2021.01.16 |
최근댓글