728x90

코틀린 강의 시리즈는 이미 자바 문법을 어느정도 안다는 가정하에서 진행을 한다.

따라서 자바 문법을 모르는 상태에서 코틀린의 강의를 들을 수 없으므로 자바부터 배워오길 바란다.

또한 강의의 전반적인 내용은 코틀린에 대한 새로운 문법을 소개하며 자바와 어떻게 다른지를 비교한다.

코틀린은 자바와 같은 jvm족이므로 둘의 협업역시 중요하므로 둘이 어떻게 호환이 되는지도 다루게 된다.

그리고 이 강의는 코틀린 강의지 안드로이드 강의가 아니다. 안드로이드 강의는 알아서하고 코틀린을 적용시키는건 본인 재량이다.


필자는 강의시 원래 IDE에 대한 설명을 최대한 배제하려한다.

필자 블로그의 카테고리는 programming과 usage 둘로 나뉘어 있다.

따라서 프로그래밍은 programming에, IDE및 사용법들은 usage에 나뉘는 방식으로 포스팅을 해왔다.

그런데 코틀린은 조금 상황이 다른게 이미 자바를 알고 있고 자바와 협업한다는 가정하에서 포스팅을 하기에

주변상황에 대한 설명이 들어갈 확률이 매우 높다고 할 수 있다.

따라서 IDE나 사용법에 대한 설명을 같이 포스팅한 경우가 많다. 물론 보는 입장에선 이게 더 도움은 될것이다.

필자가 사용하는 IDE는 IntelliJ가 될것이다. 자바든 코틀린이든 둘다 IntelliJ로 하게 될것이다.


참고:

코틀린 컴파일러 콘솔로 실행하기

코틀린 프로젝트만들기 - InteliiJ

코틀린 프로젝트만들기 - Eclipse


자바에서는 특정 기능을 쓰기위해서 무조건 클래스를 만들어야 했다.

자바에서 클래스는 강제다. 간단한 기능을 쓰기 위해서 무조건 클래스를 만든 경험이 있을것이다.

예를 들어서 계산하는 함수를 쓰고싶다. 그러면 C++이나 Python같은 언어들은 함수가 있으므로 함수를 사용했지만 자바는 함수가 없다.

따라서 자바에서는 Calculator같은 클래스를 만들고 나서 다시 그 안에 메소드로 sum,add,sub,mul같은 메소드를 만드는 방식으로 사용했다.

그래서 코드길이는 필연적으로 길어진다. 굳이 이렇게 써야하나하는 질문은 자바를 쓰는사람은 모두 가졌다가

오래사용해서 뇌개조를 당하고 나서부터는 그러려니하고 쓰게 된다.

그러나 코틀린은 다르다. 코틀린 파일로 만들게 되면 이 때까지의 자바와는 다르게 함수를 사용할 수 있다.


코틀린을 만들때 잘보면 Kotlin File이 있다. 이놈으로 만들면 함수를 사용할 수 있다.

fun main(args: Array<String>) {
println("Hello World!")
}

이제 main은 클래스 내가아니라 외부에서 함수로 만들면 된다.

실행을 해보면 당연히도 실행이 잘된다.

그러면 이번에는 외부 함수를 만들어서 실행해보자.


첨언을 하자면 보면 알겠지만 반환형을 적는 방식이 자바와는 다르다. 함수던 변수던 메소드던 세미콜론뒤에 타입을 적는다.

위를 보면 배열 문자열 타입인 경우에 타입명 : 타입형 같은 방식으로 적는다.

필자는 안 익숙해서 불편하다. 또한 이제 단락을 세미클론으로 끊지 않는다.

세미클론을 써도 되긴한다. 근데 권장하지 않을 뿐.

/*Cal.kt*/
package test

fun sum(a: Int, b: Int): Int {
return a + b
}

이제 test라는 패키지에 Cal.kt를 만들고 sum이라는 함수를 만들어 보자.

import test.sum

fun main(args: Array<String>) {
println(sum(2,3))
}

이 코드를 실행해보자. 제대로 작동하는걸 알 수 있다.

여기서 중요하게 봐야할게 있다. import하는 방식을 보자.

원래 import는 클래스만 할 수 있었던거지만 코틀린에서는 함수역시 할 수 있다.


자바에서 Kotlin File 사용하기


자바에서 코틀린 코드를 사용할 수 있을까?

코틀린 프로젝트를 jar파일로 만들어서 자바 프로젝트에서 추가해서 사용해보자.

package com.jiharu.main;

import test.CalKt;

public class Main {
public static void main(String[] args) {
System.out.println(CalKt.sum(4,6));
}
}

코틀린과는 달리 자바는 무조건 클래스만 import할 수 있다.

클래스만 import할 수 있는 자바에서는 코틀린 역시 클래스화 되야한다는걸 의미한다.

코틀린에서 만든 Kotlin File도 결국에는 클래스화 된다. <name>.kt라는 파일은 <name>Kt.class로 번역된다.

따라서 코틀린에서는 Kotlin File내의 함수를 함수 그 자체로서 꺼내쓸 수 있지만

자바에서는 <name>Kt 클래스의 메소드로서 꺼내 써야한다.

그럼 저 class 파일은 내부적으로 어떻게 번역될까? 그게 궁금하다면 javap를 사용해서 확인해보자.



코틀린 파일도 결국에는 class가 된다. 보면알다시피 final클래스가 되서 상속이 불가능하게 되며 메소드는 static메소드가 되서 직접접근이 가능하다.

메소드역시 final로 오버라이딩이 불가능하게 된다. 물론 상속이 불가능한 시점에서 오버라이딩은 당연히 못하겠지만.

'Programming > Kotlin' 카테고리의 다른 글

[Kotlin-06]상속(abstract class)  (0) 2017.11.10
[Kotlin-05]상속(open class)  (0) 2017.11.10
[Kotlin-04]open  (0) 2017.11.10
[Kotlin-03]Kotlin 변수와 접근제한자  (0) 2017.11.08
[Kotlin-02]Kotlin Class 와 생성자  (0) 2017.11.07

+ Recent posts