본문 바로가기
Kotlin

(Kotlin) Kotlin vs Java (+ 추가기능, 코틀린 컴파일 과정)

by Developer RyanKim 2020. 8. 23.

Kotlin vs Java 추가 기능 코틀린 컴파일 과정

https://lion-king.tistory.com/entry/Kotlin-what-is

 

(Kotlin) 코틀린이란? Kotlin 소개

코틀린이란? Kotlin 소개 열심히 공부해서 이번에 이직을 하게 되었습니다! 짝짝짝 기존에는 Java/Spring 기반으로 웹서버 백엔드 개발만 했었는데 이직 하는 회사에서는 Kotlin을 사용한다고 하더라

lion-king.tistory.com

이전 글에 이어 Kotlin의 컴파일 과정, Kotlin과 Java의 차이점을 정리합니다.


Kotlin 컴파일 과정

Java 코드와 Kotlin 코드가 함께 있는 프로젝트의 빌드 과정

출처: https://d2.naver.com/helloworld/6685007

  1. Kotlin 컴파일러가 Kotlin 코드를 컴파일해 .class 파일을 생성한다.
    이 과정에서 Kotlin 코드가 참조하는 Java 코드가 함께 로딩되어 사용된다.
  2. Java 컴파일러가 Java 코드를 컴파일해 .class 파일을 생성한다.
    이때 이미 Kotlin이 컴파일한 .class 파일의 경로를 클래스 패스에 추가해 컴파일한다.

Kotlin vs Java 및 추가 기능

(거의 Kotlin의 장점을 나열하게되는 것 같다)

1. 간결한 코드

  • Java 코드
package com.example.jinsu.hellokotlin;  
public class JavaMoney {  
    @Override
    public int hashCode() {
        return super.hashCode();
    }
    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    @Override
    public String toString() {
        return "JavaMoney{" +
                "amount=" + amount +
                ", currency='" + currency + '\'' +
                '}';
    }
    public JavaMoney(int amount, String currency) {
        this.amount = amount;
        this.currency = currency;
    }
    private int amount;
    private String currency;
    public int getAmount() {
        return amount;
    }
    public String getCurrency() {
        return currency;
    }
}

 

  • Kotlin 코드
package com.example.jinsu.hellokotlin  
data class Money(val amount: Int, val currency: String)  


Kotlin으로 작성한 위의 코드에서 살펴볼 수 있는 Kotlin의 기본 문법은 다음과 같습니다.

  • Java에서는 패키지가 파일 시스템의 디렉터리 구조와 동일했는데, Kotlin에서는 패키지가 디렉터리 구조와 동일하지 않아도 됩니다.
  • 클래스의 파라미터를 선언할 때 Java에서는 '타입 이름'의 형식으로 작성하지만, Kotlin에서는 '이름: 타입'의 형식으로 작성합니다.
  • 파라미터 이름 앞에 있는 val은 변경 불가능한(read-only) 변수임을 나타내는 키워드입니다. Java의 final 키워드와 같습니다. 변경 가능한(mutable) 변수를 나타낼 때는 var 키워드를 사용합니다. Java에서 final 키워드를 사용하지 않은 일반적인 변수와 같습니다.
  • data class는 특별히 별도의 함수가 필요하지 않고 데이터만 갖고 있는 클래스를 의미하는 키워드입니다.
  • data class 키워드가 있으면 컴파일러가 자동으로 equals() 메서드와 hashCode() 메서드, toString() 메서드, copy() 메서드 등을 생성합니다.

2. 객체생성

data class Money(val amount: Int, val currency: String)  
fun main(args: Array<String>) {  
    val tickets = Money(100, "$")
    val popcorn1 = tickets.copy(500, "EUR")
    var popcorn2 = tickets.copy(100, "$")
    if (tickets != popcorn1) {
        println("popcorn1 is different!")
    }
    if (tickets != popcorn2) {
        println("popcorn2 is different!")
    }
}

이 예에 나타난 Kotlin 문법의 특징은 다음과 같습니다.

  • 객체를 생성할 때 Java에서는 new 생성자를 사용하지만 Kotlin에서는 new 생성자를 사용하지 않습니다.
  • 인스턴스를 생성할 때 정확한 타입을 명시하지 않아도 자동으로 타입을 유추해 적용합니다. 그래서 val 키워드와 var 키워드만으로 인스턴스를 생성한 것을 볼 수 있습니다.
  • 다음과 같이 명시적으로 타입을 명시해 인스턴스를 생성할 수도 있습니다.
val popcorn3: Money = Money(100, "$)  

 

3. 연산자 오버로딩

연산자 오버로딩(operator overloading)은 클래스에 사용할 수 없는 기본 연산자(+, -, *, /, ++, -- 등)를 클래스에 사용할 수 있게 연산자를 정의하는 것입니다.

operator fun Money.plus(money: Money) =  
        if (currency == money.currency) {
            Money(amount + money.amount, currency)
        } else {
            throw IllegalArgumentException("We're gonna have a problem here!")
        }
fun main(args: Array<String>) {  
    val tickets = Money(100.bd, "$")
    val popcorn = tickets.copy(500.bd, "EUR")
    val cost = tickets + popcorn
}

 


 

 

모든 내용은
https://d2.naver.com/helloworld/7543578

를 참고하였습니다.

댓글