728x90

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

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

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

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

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


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

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

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

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

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

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

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


참고:

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

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

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


코틀린은 자바의 상속보다는 오히려 C++의 상속에 더 가까워진 느낌이 든다.

일단 코틀린에서의 상속은 어떻게 하면될까? 일단 전의 Shape코드를보자.

package shape

open class Shape(x: Int, y: Int) {
var x: Int = x
var y: Int = y
var width: Int = 0
var height: Int = 0

constructor(x: Int, y: Int, width: Int, height: Int) : this(x, y) {
this.width = width
this.height = height
}

open fun setSize(width: Int, height: Int) {
this.width = width
this.height = height
}

open fun getArea(): Int {
return width * height
}
}

이 코드에서 Shape에서 생성자는 2개로 파라메터가 두개인 기본생성자와 파라메터가 4개인 생성자가 존재한다.

코틀린도 jvm족이므로 다연히 부모의 생성자를 골라서 호출해주어야한다.

그럼 Shape를 이용해서 Circle을 한번 만들어보자.

package shape

class Circle : Shape(10, 20) {
val PI = 3.14f
}

이 코드는 Shape를 상속받음과 동시에 Shape의 생성자중 파라메터 2개짜리를 항상 상속받는다는 이야기가 된다.

이 코드는 대상이 생성자가 하나라면 뭐 크게 문제는 없다.

이제 Circle의 생성자를 호출하기 전에 무조건 Shape의 파라메터 2개짜리 생성자가 호출된다.

만약 이를 바라지 않는다면 저런식으로 사용하지말고 명시적으로 호출해주어야한다.

package shape

class Circle : Shape {
val PI = 3.14f

constructor(x: Int, y: Int) : super(x, y)
constructor(x: Int, y: Int, width: Int, height: Int) : super(x, y, width, height)
}

이때는 Circle도 기본생성자를 만들지 않는다. 사실 자바의 기본생성자와 코틀린에서의 기본생성자는 저번에도 말했듯이 약간 다르다.

여기서는 생성자의 본체를 기술하지 않았지만 당연하게도 기술해도 상관없다.

코틀린에서는 본체를 쓸 필요가 없다면 괄호를 사용하지 않아도 무관하다.

자바에서는 abstract method만 본체를 기술하지 않아도 되는것과 차이가 있다.

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

[Kotlin-07]상속(interface)  (0) 2017.11.10
[Kotlin-06]상속(abstract 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