728x90

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

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

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

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

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


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

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

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

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

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

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

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


참고:

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

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

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


자바에서는 상속을 하려면 아무클래스나 그냥 extends를 사용하면 됬었다.

그리고 상속을 막고싶다면 final을 붙혀서 상속을 막았던 기억이 있을 것이다.

즉 디폴트는 상속허용가능 상태이며, 상속이 불가능하게 만들기 위해서 키워드를 사용하는 것이다.


코틀린은 반대다. 디폴트가 상속불가 상태이다. 즉 모든 클래스, 그리고 모든 메소드는 기본적으로 final이 자동으로 붙어있다.

그리고 상속을 허용하고 싶다면 open이라는 키워드를 붙히는 형태로 사용한다.

사실 이게 맞는거 같긴하다. 필자도 일반적으로 클래스를 만들때는 상속을 하지 않는 클래스들을 주로만든다.

오히려 상속을 해주는 클래스들이 특별한 편이다. 아마 여러분도 그런경험이 많을 것이다.

상속을 해주고 싶다. 그러면 아래처럼 클래스를 구현하자.


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라는 클래스와 setSize, getArea라는 메소드는 모두 open이라는 키워드가 붙음으로써 추후에 이 클래스, 이 메소드가 상속가능임을 알린다.

만약 이를 클래스화 시키면 어떻게 될까?


위와 같이 클래스는 상속가능한 상태이며 메소드들은 오버라이딩 가능한 상태가 된다.

그러나 아직 문제점이 남아있는데 접근자,설정자들이 final로 되어있어 상속이 막혀있다.

그렇다. 접근자 설정자도 final을 해제시키려면 open키워드를 사용해야한다.

앞에서 코틀린을 계속해서 봐왔다면 접근자 설정자에 final을 사용하기 위해서는 변수에 open을 사용하면 될것이라는 생각에 도달할 것이다.


package shape

open class Shape(x: Int, y: Int) {
open var x: Int = x
open var y: Int = y
open var width: Int = 0
open 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
}
}

이제 다시 컴파일 해보자.


이제 접근자와 설정자도 오버라이딩 가능한 상태가 되었다. 그런데 사실 접근자 설정자는 오버라딩할일이 크게 없다.

따라서 오버라이딩하는 상태로 사용하진 않을 것이다.

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

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

+ Recent posts