[코틀린 스터디 02] 0530

ssook·2021년 5월 30일
0

❗ 자료형과 변수

● 자료형

Int : 정수 예) 1
string : 문자열, 배열의 한 종류 예) "hello123"
Float : 실수형, 소수점 이하의 수를 가짐. double 등 다양하게 가짐 예) 1.2
→ 소문자로 쓰면 에러 난다...

● 변수

val(value) : 불변형, 값을 선언하고 초기화하면 이후에 값 변경 불가
var(variable) : 가변형, 선언하고 초기화해도 값 변경 가능

✅ 변수 선언 방법

val/var(선언키워드) username(변수이름): String(자료형) = "값" 의 형태

val username: String = "ssook"
 fun main(){
    val username: String = "ssook"
    //username = "sook" → val은 불변형 변수 키워드이므로 username은 불변형
    println("username: $username");
 }

 fun main(){
    var username: String = "ssook"
   	username = "sook" 
    println("username: $username");
 }

 fun main(){
    var username = "ssook"
    var count1: Int = 3 
    var count2 =3 
    println("username = ${username}, count1=$count1, count2= $count2")
 }

위 사진에서 보면 알 수 있듯, 코틀린은 컴파일러가 자료형을 알 수 있는 경우 자료형을 삭제해도 값에 따라 이를 추론해 선언하기 때문에 생략 가능함.

✅ 변수 선언 예

var username

자료형을 지정하지 않았기 때문에, 컴파일러가 자료형 추론 불가 → 사용 불가

val init: Int

사용 전 혹은 생성자 시점에서 init 변수를 초기화 함. 따라서 해당 경우에는 사용 가능

변수를 사용하기 위해서는 자료형을 넣거나 값 초기화를 해줘야 함.

✅ 자료형 알아보기

● 기본형

  • 가공되지 않은 순수한 자료형으로 프로그래밍 언어에 내장
  • 코틀린에서는 사용하지 않고, 자바에서만 사용함
    예) int, long, float, double

● 참조형

  • 동적 공간에 데이터를 둔 다음 이것을 참조하는 자료형
  • 기본형에서 각각 match된 것을 객체로 만든 타입 (예: int - Int)
    예) Int, Long, Float, Double

성능은 기본형이 더 좋음. 참조형은 한 번 참조해서 쓰기에 성능이 느려짐.
그러나 기본형을 쓰면 코드가 복잡해지므로 코틀린 참조형을 사용하도록 함.

● 음수가 사용되는 부호 있는 정수 자료형
Long, Int, Short, Byte

● 부호 없는 정수형 (1.3 버전에서 실험적으로 사용)
ULong, UInt, Ushort, Ubyte
: 양수만 가능. 음수 표현 불가능

● IEEE 방식의 부동 소수점 제한

package chap02.section2

fun main(){

	var num: Double = 0.1
    
    for(x in 0..999){
    	num += 0.1 
    }
    println(num) //100.09999999999859
}


0.1을 1000번 더하면 100이 나와야 하나 이상한 값이 나옴.
→ 지수부와 가수부에 제한이 있기 때문에 이러한 현상이 발생. 이 점을 주의하자!
→ 물론 다른 자료형에도 이런 제한이 있음.

● 그 밖의 자료형
Float/Double(실수형), Boolean(논리형), Char(문자형)

✅ 문자열

: String으로 선언되며 String Pool이라는 공간에 구성.

fun main(){
	var str1: String = "hello"
    var str2 = "world"
    var str3 = "hello"
    
    println(str1===str2) // === : 참조 값이 같은 지 판단할 때 사용하는 연산자
    println(str1===str3)
}

→ var로 선언된 str1의 참조 주소는 가변형으로, 주소 자체는 추후에 다른 값을 가리키는 타 주소로 변경 가능함. 그러나 일단 선언되어 메모리공간에 생성된 데이터인 hello는 변경되지 않음.
→ str1과 str3는 hello라는 같은 데이터를 가리키고 있으므로 true.

✅ 자료형 생략의 예

● 자료형 생략

: 컴파일러가 알아서 추론하는 경우

val num05 =127

● 접미사, 접두사 사용

: 접미사와 접두사를 사용하여 컴파일러가 알아서 추론하게끔 지정할 수 있음

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

● 작은 값 사용

: 선언 앞 쪽에 자료형을 명시적으로 직접 써 줌, 명시적으로 지정하지 않을 경우 Int 값으로 추론해버리기 때문

val exp07 : Byte = 127

● 부호 없는 정수 자료형

: 선언할 때에도 부호 없는 정수 자료형을 명시적으로 하고, 접미사까지 붙여야 함.

val uint : UInt = 153u

● 큰 수를 읽기 쉽게 하는 방법

: 실제 코드에는 영향을 미치지 않으며, 단순히 읽기 쉽게 하기 위해 사용

val num = 1_000_000

✅ 표현식에서 문자열

● 표현식과 $기호 사용하여 문자열 출력하기

var a = 1
val s1 = "a is $a" //String 자료형의 s1을 선언하고 초기화, 변수 a가 사용됨.
profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글