HS_development_log

Kotlin - Do it 코틀린 프로그래밍 1 본문

Kotlin

Kotlin - Do it 코틀린 프로그래밍 1

DevHyeonseong 2020. 7. 21. 23:15
반응형

1. 코틀린의 장점

 

  • 자료형 오류를 미리 잡을 수 있는 정적 언어
  • 널 포인터 예외로 인한 프로그램의 중단 예방 가능. NPE(NullPointerException)로 부터 자유롭다.
  • 여러 가지여러 가지 생략이 표현된 간결하고 효율적인 언어
  • 함수형 프로그래밍과 객체 지향 프로그래밍이 모두 가능
  • 세미콜론 생략 가능

 


2. 변수와 자료형

 

코틀린의 변수 선언 방식은 2가지가 있습니다.

 

  • val : 최초로 지정한 변수의 값으로 초기화하고 더 이상 바꿀 수 없는 읽기 전용 변수
  • var : 최초로 지정한 변수의 초기값이 있더라도 값을 바꿀 수 있다.

Tip : val로 변수를 선언해 놓고 변경해야할 때 var로 바꾸면 오류 발생 확률을 많이 낮출 수 있다.

 


코틀린은 자료형을 지정하지 않고 변수를 선언하면 변수에 할당된 값을 보고 알아서 자료형을 지정할 수 있습니다.

 

fun main(){
    val name : String = "HyeunSeong"

    val name = "HyeunSeong" // 자료형을 추론하여 name의 자료형을 String 으로 결정
}

 


자바는 기본형(Primitive Data Type), 참조형(Reference Type)을 모두 사용하지만 코틀린에서는 참조형(Reference Type)만 사용합니다.

 

코드 영역

(Code)

 코드를 저장하는 영역

데이터 영역

(Data)

전역 변수, 정적 변수, 등이 들어가는 영역

(Heap)

동적 메모리 할당 영역

스택

(Stack)

지역변수, 함수 호출, 등을 위한 영역

 

코틀린에서 참조형은 스택(Stack)에 참조 주소만 저장됩니다. 실제 객체는 동적 메모리 할당 영역인 힙(Heap)에 저장됩니다.


코틀린에서는 $기호를 사용하여 문자열을 출력할 수 있습니다.

 

fun main(){
    val name = "HyeunSeong"
    println("내 이름은 $name 입니다.")
    val a = 3
    val b = 5
    println("a+b = ${a+b} 입니다")
}


코틀린에서는 기본적으로 null을 허용하지 않습니다. 하지만 null을 허용하는 자료형이 따로 있습니다.

객체 선언 타입에?를 붙이면 null을 허용하게 됩니다. 이때 만들어지는 자료형은 null을 허용하지 않는 자료형과 다른 타입입니다.

 

fun main(){
    var str1 : String? = "Hello" // null을 허용하는 자료형 ?
    str1 = null

    println(str1.length) // null의 가능성이 있기때문에 코드 작성시 오류 발생
    println(str1?.length) // ?. 의 세이프 콜 기호 활용
    println(str1!!.length) // null이 아님을 단정짓는 !!. 기호. NPE 발생 가능
}

 

세이프 콜과 엘비스 연산자를 활용하면 가독성이 더 좋은 null체크 코드를 작성할 수 있습니다.

 

fun main(){
    var str1 : String? = "Hello"
    str1 = null

    // 1)
    println("str1: $str1 length: ${str1?.length ?: -1}") // null이 아니면 왼쪽값(str1?.length)를, null인 경우 오른쪽 값(-1)을 반환

    // 2)
    if(str1 != null){
        println(str1.length)
    } else {
        println(-1)
    }
}

1번과 2번은 서로 같은 의미의 코드입니다. 

 

 

끝.

반응형

'Kotlin' 카테고리의 다른 글

Kotlin - Do it 코틀린 프로그래밍 2  (0) 2020.07.22