부스트코스 서포터즈 3기 활동으로서
코틀린 프로그래밍 기본 1/2(함수편)을 듣고 작성된 포스팅입니다
기본 자료형과 변수 선언 방법
1) 코틀린의 변수 선언 방법
val username : String ="soobin"
//선언 키워드(var/val) 변수이름 : 자료형 = 값
val(value, 불변형) : 초기에 값이 할당되면 변경할 수 없음
(값을 변경할 경우 Kotlin: Val cannot be reassigned(=val은 재할당될 수 없다)라는 오류가 발생)
var(variable, 가변형) : 초기화 후 값 변경 가능
+ 변수 선언 예시
val count = 3
// 자료형을 선언하지 않아도 컴파일러가 값에 따라 자료형을 추론해 선언
// Ctrl+Shift+P로 추론된 자료형 확인 가능
val count // 하지만 이는 틀린 방법, 값을 넣지 않으면 자료형을 추론 불가능
val count :Int // 자료형을 알 수 있는 올바른 초기화 방법
2) 코틀린의 자료형은 기본형이 아니라 참조형이다?
기본형(Primitive data type) : 가공되지 않은 순수한 자료형으로 프로그래밍 언어에 내장
ex ) int, string, double 등
참조형(Reference type) : 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형, 참조형은 컴파일 과정에서 기본형으로 변환
ex ) Int, String, Double 등
코틀린은 기본형이 아닌 참조형 자료형을 사용하고 있으므로 스택에 값이 아닌 참조 주소를 갖고 있다!
자료형의 종류
1) 정수 자료형
자료형의 범위에 대해서 설명하기 전에 먼저 byte란 무엇인지 알아야 한다. 1Byte는 8bits로 되어있고 1bit는 0 또는 1이다. 8bits 중 하나는 부호를 나타내는데 쓰인다. 그러므로, Byte로 나타낼 수 있는 수는 -2^7~2^7-1이고 만약 부호없는 정수형인 UByte일 경우 음수를 나타낼 필요가 없으므로 0~2^8-1까지 나타낼 수 있다. 음수는 2의 보수(절대값의 이진수에 값을 뒤집고 1을 더함) 표현을 사용하여 연산된다.
Byte는 1byte, Short는 2bytes, Int는 4Bytes, Long은 8Bytes이므로
각 자료형이 나타낼 수 있는 범위는 다음 실습 예제와 같다
println("Byte : ${Byte.MIN_VALUE} ~ ${Byte.MAX_VALUE}")
//Byte : -128 ~ 127
println("Short : ${Short.MIN_VALUE} ~ ${Short.MAX_VALUE}")
//Short : -32768 ~ 32767
println("Int : ${Int.MIN_VALUE} ~ ${Int.MAX_VALUE}")
//Int : -2147483648 ~ 2147483647
println("Long : ${Long.MIN_VALUE} ~ ${Long.MAX_VALUE}")
//Long : -9223372036854775808 ~ 9223372036854775807
/*자료형에 접미사 접두사 사용*/
val a = 123L // 123(Long) 접미사 L을 통해 Long형으로 추론
val b = 0x0B
// 11(Int) 접두사 0x를 사용해 16진 표기가 사용된 int형으로 추론
val c = 0b0001111
// 15(Int) 접두사 0b를 사용해 2진 표기가 사용된 int형으로 추론
val d = 123 //Int
//명시적으로 자료형을 지정하지 않으면 Byte나 Short 범위 안의 값도 Int형으로 추론
2)실수 자료형
실수의 개수는 무한하지만 하지만 메모리 공간은 유한하기에 메모리에 모든 실수를 표현하기는 어렵다. 이러한 메모리의 단점을 극복하기 위하여 실수를 표현할 때 부동 소수점(floating-point) 방식을 사용한다. 부동 소수점 방식은 실수를 가수, 지수로 나누어 표현하는 방식 (3.14*(10^5)을 3.14E+5로 표현하는 식)
Double은 8Bytes, Float은 4Bytes이므로
각 자료형이 나타낼 수 있는 범위는 다음 실습 예제와 같다
println("Double : ${Double.MIN_VALUE} ~ ${Double.MAX_VALUE}")
//Double : 4.9E-324 ~ 1.7976931348623157E308
println("Float : ${Float.MIN_VALUE} ~ ${Float.MAX_VALUE}")
//Float : 1.4E-45 ~ 3.4028235E38
val num1 = 1.23 // 기본적으로 Double형으로 추론
val num2 = 1.23F //식별자 F에 의해 Float형으로 추론
3) 논리 자료형(Boolean)
val isSelected = false // Boolean형으로 추론
val isSelected : Boolean // 값을 할당하지 않은 초기화
4) 문자 자료형(Char)
문자 자료형(Char)은 문자를 표현하기 위해 사용, 문자 자료형의 값은 작은따옴표(')로 감싸 표현
문자열 자료형(String)은 여러 문자를 배열하여 저장하기 위해 사용, 문자 자료형의 값은 큰따옴표("")로 감싸 표현. 문자열은 힙 메모리 영역의 String Pool이라고 부르는 공간에 문자열을 저장해두고 변수에서 참조한다
val myNameInitial = 'S' // Char형으로 추론
val myName = "SooBin" // String형으로 추론
println("Hello My name is $myName Call me $myNameInitial")
// $기호를 이용하여 문자열을 함께 출력 가능
Null
1) Null이란?
Null은 데이터베이스 안에 데이터가 존재하지 않는다는 것을 의미하며, 프로그램이 실행되는 도중에 값이 null인 변수에 접근하려 하면 null 포인터 예외(NPE, NullPointerException) 오류가 발생한다. 변수에 null 할당을 허용하려면 자료형 뒤에 물음표 기호(?)붙이면 된다. null 허용 여부에 따라 Int와 Int?는 서로 다른 자료형이 된다.
// 코틀린의 변수 선언은 기본적으로 null을 허용하지 않는다.
var count1 : Int = 8
count1 = null // ※Kotlin: Conflicting declarations 오류 발생※
var count2 : Int? = 8 // ?을 통해 nullable 선언
count2 = null // 오류 발생 X
2) 세이프 콜과 non-null 단정 기호, 그리고 엘비스 연산자
세이프 콜(Safe-call) : ?. null이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 연산자
non-null 단정 기호 : !!. null이 아님을 단정하므로 컴파일러가 null검사 없이 무시
엘비스 연산자 : ?: 변수가 null인지 아닌지 검사하여 null이 아니라면 왼쪽의 식을 그대로 실행하고 null이라면 오른쪽의 식을 실행
var name = "SooBin"
var fakeName : String? = null
println("Say Hello ${name} Hello ${fakeName?.length?:"Noname"}")
//Say Hello SooBin Hello Noname
//fakeName이 null이기에 length(?.뒤)를 실행하지 않고 "Noname"(?:뒤)를 실행
코틀린 프로그래밍 기본1/2(함수편)
부스트코스 무료 강의
www.boostcourse.org
'프로그래밍 공부흔적 > Kotlin' 카테고리의 다른 글
[부스트코스][Kotlin]프로그램 흐름의 제어 (0) | 2021.01.28 |
---|---|
[부스트코스][Kotlin]코틀린의 다양한 함수들 (0) | 2021.01.28 |
[부스트코스][Kotlin]람다식과 고차함수의 이해 (0) | 2021.01.28 |
[부스트코스/Kotlin]함수형 프로그래밍이란? (0) | 2021.01.26 |
[부스트코스][Kotlin]코틀린이란? + 코틀린 설치 및 실습 환경 갖추기 (0) | 2021.01.10 |
댓글