목록Kotlin (69)
Hanbit the Developer
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/generics.html Variance: in, out 배경: String은 Object의 하위 타입이지만, MutableList은 MutableList의 서브클래스가 아니기 때문에 기존의 generic을 통한 객체지향 프로그래밍 설계가 힘듦 Example List는 covariance(public interface List)이기 때문에 정상 작동함 open class Animal class Cat : Animal() class Dog : Animal() fun myAnimals(animals: List) { prin..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/sealed-classes.html sealed 클래스의 서브클래스는 컴파일 타임에 알려져있으며, sealed class가 정의된 곳이 아닌, 다른 모듈이나 다른 패키지에서 또다른 서브클래스가 정의될 수 없다. sealed interface는 다른 모듈에서만 재정의가 불가능하다.(모듈이 컴파일되면 새 구현체가 나타날 수 없다.) enum 또한 값들의 집합이 제한되어 있다는 점이 있어 유사하다. 하지만 enum의 상수는 single instance로서 존재하는 반면, sealed class의 서브클래스는 여러 인스턴스를 ..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/data-classes.html 컴파일러가 자동으로 다음 메소드들을 추가한다: equals() hashCode() toString() → “User(name=John, age=42)” componentN() copy() cannot be abstract, open, sealed, or inner Properties declared in the class body data class Person(val name: String) { var age: Int = 0 } val person1 = Person("John") val..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/extensions.html 데코레이터 패턴, 상속 없이 클래스, 인터페이스를 확장할 수 있다: fun MutableList.swap(index1: Int, index2: Int) { val tmp = this[index1] // 'this' corresponds to the list this[index1] = this[index2] this[index2] = tmp } Extensions are resolved statically 멤버를 추가하는 것이 아니라, statically하게 작동한다.(런타임 때의 타입으로 작..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/visibility-modifiers.html Packages 함수, 프로퍼티, 클래스, 오브젝트, 인터페이스는 패키지 내에서 top-level단에 선언될 수 있다: // file name: example.kt package foo fun baz() { ... } class Bar { ... } private: 해당 파일에서만 보임 internal: 같은 모듈에서만 보임 public Class members private: 해당 클래스에서만 보임 protected: private와 같으나 subclasses에는 공개됨 ..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/fun-interfaces.html Functional interface or Single Abstract Method (SAM) interface non-abstract members를 여러 개 가질 수 있으나 abstract member는 1개만 가질 수 있다: fun interface OnClickListener { fun onClick(i: Int): Boolean } SAM conversions without a SAM conversion // Creating an instance of a class val i..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/interfaces.html interface Named { val name: String } interface Person : Named { val firstName: String val lastName: String override val name: String get() = "$firstName $lastName" } data class Employee( // implementing 'name' is not required override val firstName: String, override val lastNa..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/properties.html Getters and setters var [: ] [= ] [] [] var stringRepresentation: String = "Init" get() = this.toString() set(value) { setDataFromString(value) // parses the string and assigns values to other properties } setter의 visibility modifier 정의: var setterVisibility: String = "abc" pr..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/inheritance.html Any 모든 클래스는 Any를 상속함 equals() hashCode() toString() Open open: 클래스를 상속하기 위해 사용한다. open class Base(p: Int) class Derived(p: Int) : Base(p) open class Shape { open fun draw() { /*...*/ } fun fill() { /*...*/ } } class Circle() : Shape() { override fun draw() { /*...*/ } } final..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/classes.html Constructor class Person constructor(firstName: String) { /*...*/ } 생성자에 어노테이션(e.g. class A @Inject constructor(…))이나 visibility modifiers가 없다면 constructor 키워드를 생략해도 된다: class Person(firstName: String) { /*...*/ } init class InitOrderDemo(name: String) { val firstProperty = "Firs..