특징

  • 인텔리제이 제품 만든 젯브레인에서 만든 언어

  • 2011년도 최초 공개 후 16년 2월에 정식 1.0 버전 오픈

  • 파일명: .kt

  • 코틀린 플레이그라운드 이용하면 코드 코드 웹에서 테스트 가능

  • 큰 특징

    • ; 안 써도 됨
    • (Java 하시던 분들은 아시는) 객체 생성 시 new 안 써도 됨
    • (dart에서 제공됐던) 타입 추론 지원, null-safety 지원
    • 기존 dart에서 print() 썼던건 println()으로 한줄 출력
    • 문자열 ''이 아닌 ""로 표시
    • int, double 이런 변수타입을 Int, Double 이렇게 앞글자 대문자로 표기

변수

  • 변수 선언 방식
    : 타입을 변수명 뒤에 배치한다.

    val/var 변수명 : 변수타입 = 초기값
  • 가변/불변

    • 상수: val value 값 = final 과 유사
    • 변수: var variable 변수
    val a : Int = 10
    
    // 초기값이 있을 땐 타입 추론해서, 변수 타입 명시 안 해줘도 됨
    val a = 10 
  • string template
    : $, ${} dart와 동일, 문자열은 "" 쌍 따움표로 표기

    val name = "bora";
    println("my name is $name");
    println("my name is ${name}");

null-safety

null값 허용 여부를 컴파일 단계에서 검사

dart와 거의 동일하며,
dart와 다른 점이 있는 특징이 있을 때만 인용박스를 넣어 설명하겠습니다.

  • 타입 nullable or non-null 선언

    ```kotlin
    // nullable
    val name: String? = null
    
    // non-null
    val name: String = "bora"
    ```
  • .? null safe operator

    var name : String?
    	
        ...
        
    // null이 아닐 때만 뒷 함수 처리, null 일 경우 null로 반환
    name?.toUpperCase() 
  • ?: default 값을 주고 싶을 때

    var name:String?
    print("${name ?: "bora"}")

    dart에선 아래와 같이 ?? 였지만 kotlin에선 위 처럼 ?: 로 표시

    String? name;
    print('${name ?? 'bora'}');
  • !! not-null assertion (null 아니라는 걸 보증 할 때)

    fun printFunction(name: String?){
        print(name!!);
    }

    dart에선 아래와 같이 ! 였지만 kotlin에선 위 처럼 !! 로 표시

    void printFunction(String? name){
        print(name!);
    }
  • let{} null이 아닐 때 다음 코드블럭 {} 수행
    : let 함수 안에선 it 키워드로 참조

    name?.let{
        // 여기 안에선 name 값은 non-nullable해
        // 여기 안에서 non-nullable한 name 변수값은 it 으로 접근
        println('email: $it')
    }

    dart에선 없었던 함수이자 기능입니다 🫢
    if(name != null){} 함수 대신 let{} 으로 사용합니다.

  • lateinit 초기화 지연 (non-null값인데 초기화 나중에 할 때)
    : 수정자를 이용해 나중에 초기화 하도록

    lateinit var name: String;
    
    ...
    
    name = "bora"

    dart late와 같습니다.

  • .isNullOrBlank(), .isNullOrEmpty() null 또는 빈값 체크
    : nullable 타입에 extension function 제공

    var name: String?;
    
    ...
    
    // null값에 함수 접근하면 null exception을 냈겠지만, 이 확장 함수는
    // null.isNullOrBlank 하면 true 반환
    if(!name.isNullOrBlank()){
    	println("name: $name")
    }
  • as? 타입 캐스팅 안될 때 에러 대신 null 반환

    val name = json["name"] as? String

함수

  • 함수 생성 방식

    fun 함수_이름 : 함수_타입 {}
    fun 함수_이름 (파라미터_이름:파라미터_타입) : 함수_타입 {}
  • main 함수

    fun main () {}
  • 반환 타입

    void = Unit
    int, double, float, String = Int, Double, Float, String // 앞글자 다 대문자

    // 함수 타입 명시
    fun function1 : Unit {}
    
    // 함수 타입은 마지막 라인 보고 타입 추론, 생략 가능
    fun function1 {}
  • 단일 표현식
    : = 로 중괄호{} 감쌀 필요 없음;;

    // before
    fun test(x:Int, y:Int) :Int {
      return x*y
    }
    
    // after (단일 표현식)
    fun test(x:Int, y:Int) = x*y
  • 가변길이 파라미터
    : vararg 키워드로 파라미터 갯수를 가변적으로 받을 수 있음;;!

    fun main() {
        displayStrings("1")
        displayStrings("2", "a", "b")
        displayStrings("2", "a", "b", "c", "d")
    }
    
    fun displayStrings(vararg messages: String) {
        for (message in messages) println(message)
    }

    다른 파라미터 있는 경우
    : 맨 마지막 파라미터로 선언

    fun main() {
        displayStrings(true, "1")
        displayStrings(true, "2", "a", "b")
        displayStrings(false, "2", "a", "b", "c", "d")
    }
    
    fun displayStrings(isPrint: Boolean, vararg messages: String) {
        if(!isPrint) return
        for (message in messages) println(message)
    }
profile
𝙸 𝚊𝚖 𝚊 𝚌𝚞𝚛𝚒𝚘𝚞𝚜 𝚍𝚎𝚟𝚎𝚕𝚘𝚙𝚎𝚛 𝚠𝚑𝚘 𝚎𝚗𝚓𝚘𝚢𝚜 𝚍𝚎𝚏𝚒𝚗𝚒𝚗𝚐 𝚊 𝚙𝚛𝚘𝚋𝚕𝚎𝚖. 🇰🇷👩🏻‍💻

0개의 댓글