'2020/01/13'에 해당되는 글 2건

728x90

코틀린에서 프로젝트(Project)는 모듈(Module), 패키지(Package), 파일(File)로 구성되어 있다.
프로젝트에는 모듈이 있고 모듈은 다시 패키지로 구성되어 있다.


Java는 파일명과 클래스명이 동일해야 하지만, 코틀린은 public 클래스는 하나만 사용 해야하는 규칙이 없다.


코틀린 파일은 .kt 확장자를 가지며 맨 위에는 이 파일이 어떤 패키지에 포함된 것인지 코틀린 컴파일러가 알 수 있도록 패키지 이름을 선언해야 한다.
만약 패키지 이름을 선언하지 않으면 그 파일은 자동으로 default 패키지에 포함된다.
파일이 패키지 안에 들어있어도 패키지 이름을 선언하지 않으면 default 패키지에 포함된 것으로 인식한다.
파일에 클래스가 여러 개 정의되어 있다면 파일은 단순히 클래스를 묶는 역할을 하고 kt 확장자가 붙게 된다.
코틀린에서는 파일명과 클래스의 선언 개수에 큰 의미를 두지는 않는다.
같은 파일에 있는 여러 개의 클래스는 모두 그 파일에서 지정한 패키지로 인식한다.


패키지 이름은 파일 맨 위에 적는다. 이때 패키지 이름 앞에 package라는 키워드를 함께 입력해야 패키지 이름으로 인식한다. 단, 패키지의 이름은 특수 문자나 숫자로 시작하면 안된다.

블로그 이미지

Link2Me

,
728x90

코틀린 인터페이스

- Java 와 달리 인터페이스 함수가 구현부를 가질 수도 있고, 추상함수만 가질 수도 있다.

- 상속과 마찬가지로 콜론(:)을 사용해서 인터페이스를 구현한다.

  자바에서는 클래스의 상속과 인터페이스의 구현을 extends 와 implements로 구분한다.

- 상속은 한번에 하나밖에 안되지만, 인터페이스는 콤마(,)로 여러개를 구현 가능하다.

   또한, 콜론(:)으로 동시에 클래스 상속과 인터페이스 구현이 가능하다.

- 코틀린에서는 상속받거나 구현한 함수의 앞에 무조건 override 키워드를 붙이도록 강제한다.

  Java에서는 부모 클래스의 메서드를 재정의하거나 인터페이스 구현 메서드를 @Override 어노테이션으로 구분한다.
  하지만 @Override 어노테이션 추가는 선택 사항이라 메서드의 유형을 코드만으로 구분하기는 어렵다.


fun main(args: Array<String>) {
    var a = Person()
    a.click()
    a.run()
}

interface Clickable {
    // 일반함수 : open 함수로 간주한다.
    fun click() {
        println("버튼을 눌렀어요.")
    }
}

interface Runner {
    // 추상함수 : abstract 함수로 간주한다.
    fun run()
}

class Person : Runner, Clickable {
    override fun run(){
        println("성큼 성큼 달린다.")
    }
} 


만약, 인터페이스 내의 함수들이 구현체가 있고, 중복된 함수가 있을 경우에는 어떻게 할까?

필요한 클래스의 super 를 호출할 수 있다. 둘 다 혹은 필요한 클래스의 함수만 호출해도 된다.


fun main(args: Array<String>) {
    var a = Person()
    a.click()
    a.run()
}

interface Clickable {
    // 일반함수 : open 함수로 간주한다.
    fun click() {
        println("클릭 버튼을 눌렀어요.")
    }
}

interface Runner {
    // 추상함수 : abstract 함수로 간주한다.
    fun run()
    fun click() {
        println("Runner 버튼을 눌렀어요.")
    }
}

class Person : Runner, Clickable {
    override fun run(){
        println("성큼 성큼 달린다.")
    }

    override fun click() {
        super<Clickable>.click()
        super<Runner>.click()
    }
}
 


'안드로이드 > Kotlin 문법' 카테고리의 다른 글

코틀린 접근 제한자  (0) 2020.01.14
코틀린 패키지  (0) 2020.01.13
코틀린 추상클래스  (0) 2020.01.12
코틀린(Kotlin) 클래스 선언 및 상속  (0) 2020.01.12
코틀린 기본 이해  (0) 2020.01.07
블로그 이미지

Link2Me

,