728x90

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

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

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

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

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


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

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

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

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

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

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

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


참고:

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

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

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


abstract의 개념역시 자바와 거의 같다고 할 수 있다. 단 새로운 키워드가 추가되었다.

package shape

abstract 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
}

abstract fun getArea()
}

사실 Shape라는 도형은 가로와 세로를 안다고 해서 넓이를 구할 수는 없다.

왜냐하면 원인지,직사각형인지,마름모인지 모르기 때문이다.

따라서 보통 getArea같은 메소드는 abstract로 만들게 된다.

이까지는 뭐 자바를 사용했다면 예상대로일 것이다.

그러면 이걸 사용하는 측에서는 어떻게 사용해야할까? abstract의 특성상 구현해줘야하는건 말할 필요도 없지만 명시적이게 해줘야할 작업이 있다.

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)

override fun getArea() {

}
}

새로운 지시자가 등장했는데 override이다. 이는 이 메소드가 명시적이게 상속 받았음을 알려준다.

사실 자바에서도 애터네이션을 해서 override를 적어주는게 권장되긴 했었다.

이때까지 명시적으로 override를 적는게 문법적으로 강제되는건 아니였다보니 IDE를 사용하지 않을경우 어디까지가 상속인지 소스만 보는건 애매했다.

따라서 override를 명시적으로 적는 문법은 코딩은 조금 귀찮을 지라도 코드의 가독성은 오히려 늘어났음을 알 수 있다.

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

[Kotlin-08]data class  (0) 2017.11.10
[Kotlin-07]상속(interface)  (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

+ Recent posts