확장 코틀린의 확장 기능을 통해 기존 클래스의 함수(메서드) 및 프로퍼티를 확장 정의하여 사용할 수 있다. 확장 불가 클래스(final) 또는 짧은 범위에서 특정 클래스의 기능을 추가/수정할 경우 유용하다. 호출 시점에 부가 비용이 발생하지 않는다. 확장 함수 (Extension function) [확장 하려는 대상 클래스].함수명() 형식으로 정의한다. 코틀린의 최상위 객체인 Any에 확장 함수를 정의하면 모든 객체에서 사용 가능하다. 확장 함수의 경우 내부에서만 사용할수 있는 private, protected 멤버에는 접근하지 못한다. 확장 함수와 클래스 멤버 함수의 이름이 같은경우 멤버 함수의 우선순위가 더 높기때문에 클래스 내의 멤버 함수가 호출 된다. class Person(val name: S..
가시성 제한자 클래스, 오브젝트, 인터페이스, 생성자, 함수, 프로퍼티(setter)는 가시성 제한자를 가질수 있다. getter의 경우 항상 프로퍼티와 같은 가시성 제한자를 가진다. private, protected, internal, public 네개의 제한자가 존재하며 기본적으로 public 가시성을 가진다. 패키지 함수, 프로퍼티, 클래스, 오브젝트, 인터페이스는 최상위 레벨로 선언 가능하다. 제한자 범위 public 제한자 설정 안할시 기본적으로 적용됨. protected 최상위 레벨 선언에서는 사용 못함. internal 같은 모듈 내부에서 접근 사능함. private 같은 패일 내에서만 접근 가능함. package person private fun walk() { // 같은 파일 내에서만 접..
코틀린(Kotlin) | 추상 클래스 추상 클래스는 하나 이상의 추상 메서드(구현체가 없는 메서드)를 가진다. 추상 클래스는 객체를 생성할 수 없다. 추상 클래스를 상속하여 모든 추상 메서드를 구현하여야만 객체를 생성 할 수 있다. 코틀린에서 추상 클래스란 abstract클래스 내부에 abstract멤버를 하나 이상 가진 클래스를 의미한다. open키워드를 따로 추가하지 않아도 된다. abstract class Animal { abstract fun bark() fun eat() { println("animal is eating") } } class Dog : Animal() { override fun bark() { println("bow wow") } } fun main() { val animal =..
오버라이드(Override) vs 오버로드(Overload) 오버라이드(Override) 상위 클래스의 매소드를 재정의 하는 것. 메소드 이름은 물론 인자 갯수나 타입도 동일해야 한다. 주로 상위 클래스의 동작을 상속받은 하위클래스에서 메소드의 동작을 변경하기 위해 사용된다. 오버로드(Overload) 함수(메소드) 이름은 같고 인자 갯수나 타입이 다른 함수를 정의하는 것을 의미한다. 메서드 오버라이드 클래스 상속과 마찬가지로 기본 final이며 명시적으로 open키워드를 붙여 줘야만 오버라이드가 가능하다. 오버라이드를 위해서는 명시적으로 override키워드를 붙여 주어야한다. final클래스에서는 open멤버가 금지된다. open class Parent { open fun walking() { pri..
코틀린의 모든 class는 공통 상위 클래스인 Any를 상속받는다. (타입 시스템 참고) 클래스 내부가 비어있다면 중괄호를 생략해도 무방하다. class Example 자바와 달리 코틀린에서는 클래스와 메서드가 기본적으로 final로 선언된다. 상속 및 오버라이딩을 하기 위해서는 open키워드를 사용해야 한다. 상속 시 자바에서는 extends를 사용하지만 코틀린에서는 :(콜론)을 사용하여 상속한다. open class Parent() { } // extends Parent class Child() : Parent() { } 부모의 생성자는 반드시 초기화해야 한다. 클래스가 주요 생성자를 가진다면 주요 생성자의 파라미터로 부모를 초기화시킬 수 있다. open class Parent(val age: Int..
기본적인 클래스 구조 및 생성 class키워드로 클래스를 선언하며 기본으로 public가시성을 가진다. 자바와 달리 객체를 생성시 new키워드를 사용하지 않는다. Java public class PersonJava { public static void main(String[] args) { PersonJava personJava = new PersonJava(); } } Kotlin class PersonKotlin { // empty class } fun main() { val personKotlin = PersonKotlin() } 클래스 생성자 하나의 클래스에는 주요 생성자와 보조 생성자를 가질 수 있다. 주요 생성자는 클래스명 뒤에 위치한다. class PersonKotlin constructor..