6월 19일 - 코틀린 문법

Yullgiii·2024년 6월 19일
0
post-thumbnail

간결한 문법

코틀린은 자바보다 간결하고 명확한 문법을 제공하여 개발자의 생산성을 높인다. 여기서는 코틀린의 간결한 문법과 관련된 몇 가지 주요 특징을 설명하겠다.

세미콜론을 사용하지 않는다

코틀린에서는 문장의 끝에 세미콜론을 붙이지 않아도 된다. 이는 코드가 더 깔끔하고 읽기 쉽게 만든다.

객체 생성 시 new를 사용하지 않음

자바에서는 객체를 생성할 때 new 키워드를 사용하지만, 코틀린에서는 이를 사용하지 않는다.

// 자바
Person person = new Person();

// 코틀린
val person = Person()

타입 추론

코틀린은 변수 선언 시 타입을 명시하지 않아도 컴파일러가 타입을 추론할 수 있다.

val name = "John"  // String 타입으로 추론
var age = 25  // Int 타입으로 추론

var와 val

  • var: 수정 가능한 변수
  • val: 수정 불가능한 값 (final 변수와 유사)
var mutableVariable = 10
val immutableValue = 20

반복문

코틀린은 for-each문만 지원한다.

val items = listOf("apple", "banana", "cherry")
for (item in items) {
    println(item)
}

널 안전성

코틀린은 널 값의 허용 여부를 명확히 검사하며, 컴파일 단계에서 검사한다.

// 널 값 허용
var a: String? = null
// 널 값 허용 X
var b: String = "b"

기본 자료형

타입 관련
모든 타입을 객체로 표현한다. 코틀린은 코드를 작성하는 시점에 원시 타입과 래퍼를 구분하지 않지만, 컴파일 단계에서 가장 효율적인 타입으로 변환된다.

var a: Int = 2
var b: List<Int> = listOf(1, 2, 3)
// 아래와 같이 변환된다.
int a = 2;
List<Integer> b = Arrays.asList(1, 2, 3);

문자 관련

문자에 해당하는 아스키 코드를 char에 숫자 형태로 대입하지 못한다. toChar() 함수를 사용해 다른 자료형의 값을 문자 자료형으로 대입한다.

코드 복사
val code: Int = 65
val ch: Char = code.toChar()  // 'A'

문자열 관련

문자열의 특정 문자에 접근할 때 get() 혹은 대괄호([])와 인덱스를 사용해 접근한다. 문자열 템플릿을 사용해 템플릿 문자열 내에 직접 인자를 대입한다.

val foo: String = "Victory"
val ch1: Char = foo.get(0)  // 'V'
val ch2: Char = foo[1]  // 'i'

val length: Int = 10
val lengthText: String = "Length: $length meters"
val text = "Length : ${foo.length}"

배열

타입 인자를 갖는 Array 클래스로 표현한다. arrayOf() 함수로 배열을 생성할 수 있다.

val words: Array<String> = arrayOf("a", "b", "c")

// 원시 타입의 배열
val intArr: IntArray = intArrayOf(1, 2, 3)
// wrapper 타입의 배열
val intArr2: Array<Int> = arrayOf(1, 2, 3)

컬렉션

JVM을 기반으로 하므로 컬렉션은 자바에서 제공하는 클래스들을 그대로 사용한다. 컬렉션 내 자료의 수정 가능 여부에 따라 컬렉션의 종류를 구분한다.

// 수정 불가능한 리스트
val immutableList: List<String> = listOf("a", "b")
// 수정 가능한 리스트
val mutableList: MutableList<String> = mutableListOf("a", "b")

// 수정 불가능한 맵
val immutableMap: Map<String, Int> = mapOf("A" to 65, "B" to 66)
// 수정 가능한 맵
val mutableMap: MutableMap<String, Int> = mutableMapOf("A" to 65, "B" to 66)

클래스 및 인터페이스

코틀린의 클래스와 인터페이스는 기본적으로 public이다. new 키워드를 사용하지 않고 인스턴스를 생성하며, 추상 클래스와 인터페이스도 인스턴스를 생성할 수 있다.

abstract class Foo {
    abstract fun bar()
}

val foo = object : Foo() {
    override fun bar() {
        // 함수 구현
    }
}

interface Bar {
    fun baz()
}

val bar = object : Bar {
    override fun baz() {
        // 함수 구현
    }
}

프로퍼티

프로퍼티는 필드와 getter/setter 메소드를 함께 제공한다. 프로퍼티 선언 시 초기값을 명시적으로 지정해야 하며, 초기값을 지정하지 않으려면 lateinit 키워드를 사용할 수 있다.

class Person {
    lateinit var gender: String
}

lateinit var name: String

// 초기화 여부 확인
if (::name.isInitialized) {
    println("초기화 O")
} else {
    println("초기화 X")
}

So...

코틀린은 자바보다 간결하고 효율적인 문법을 제공하여 개발자가 더 쉽게 코드를 작성할 수 있도록 돕는다. 널 안전성, 타입 추론, 간결한 문법 등은 코틀린의 주요 장점이다. 코틀린을 처음 사용하는 자바 개발자도 쉽게 적응할 수 있으며, 더 나은 코드 품질과 생산성을 기대할 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글