목록Language/Kotlin (20)
Coding Memo
Generic (제네릭) 코틀린은 Java와 동일하게 Generic 기능을 제공한다. 사용 방법은 단순하게 안에 알파벳을 넣으면 되는데, 보통은 'T'를 사용한다. 물론 T 외에도 U, V, ... 를 추가적으로 사용해도 된다. 제네릭에서도 타입추론을 하기 때문에 자료형을 명시할 때 중복해서 굳이 쓸 필요가 없다. 특정한 슈퍼 클래스를 상속받은 클래스 타입으로만 제한하고 싶을 때는 을 사용한다. fun doPrintClass(type: T) { type.printClass() } fun main() { //위의 함수 이용 doPrintClass(A()) doPrintClass(B()) //맨 아래 class 이용 GenericTest(A()).doPrintClass2() GenericTest(B()).d..
클래스 간 캐스팅은 Kotlin의 클래스의 다형성과 관련이 있다. A 클래스가 B 클래스를 상속받을 경우, A 클래스는 B 클래스의 객체 공간이 있고 자신만의 A 클래스 객체 공간이 따로 있다. 다음의 예시를 보자. fun main() { var c: A = A() var d: A = B() var e: B = B() c.printName() d.printName() e.printName() e.printName2() } open class A() { open var name: String = "ClassA" open fun printName() { println("$name") } } class B : A() { override var name: String = "ClassB" override fun ..
Kotlin은 Java와 동일하게 문자열을 String 클래스로 사용한다. 마찬가지로 문자열에 대한 다양한 기본 함수들을 제공한다. 아래 링크는 String 클래스에 대한 공식 문서로, 속성과 함수들이 나와 있다. https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/ String - Kotlin Programming Language kotlinlang.org 참고: String 클래스의 Init() 내용이 없다. 문자열을 만들 때는 단순히 "" 안에 값을 넣으면 문자열이 된다. Kotlin에서 문자열 만들 때 특이한 점은 html처럼 """ (큰 따옴표 3개)를 이용해서 안의 내용 그대로 문자열로 사용이 가능하다. 연산자 '+'를 이용하여 Java처..
Observer Pattern 어떤 이벤트가 발생했을 때 알맞은 동작을 하기 위해 계속해서 관찰(observe) 한다고 생각하자. 이를 Observer Pattern이라고 한다. 이벤트를 넘겨주는 행위를 'callback'이라고 한다. Observer Pattern 구현을 위해서는 이벤트를 발생시키고 전달하는 클래스와 이벤트를 수신하고 동작을 하는 class가 필요하다. 이를 위해 interface를 사용하는데, 코틀린과 안드로이드(Java)에서는 listener라는 이름의 interface가 더 친숙할 수 있다. (안드로이드 이벤트 처리 시 리스너(listener)를 사용한다는 것은 많이 들어보았다.) fun main() { EventGen().touch() } interface EventListene..
오브젝트 (Object) 생성자 없이 객체를 만들어낼 수 있다. 즉 그 자체가 객체이다. Java에서의 static과 같다고 보면 된다. Java의 Math.random()을 사용했던 것을 떠올려보자. Math 클래스를 따로 생성하지 않고 random() 함수를 실행시켰었다. Singleton 패턴의 객체를 정의한다. fun main() { //x^2-3x+2 val e1:Array = arrayOf(1, -3, 2) //x^2-9 val e2:Array = arrayOf(1, 0, -9) var x11 = GetX.getQuadraticEquation1(e1[0], e1[1], e1[2]) var x12 = GetX.getQuadraticEquation2(e1[0], e1[1], e1[2]) print..
스코프 함수 (Scope Function) Kotlin 기본 라이브러리에서 제공하는 기본 함수로 객체를 직접 생성하지 않고 그 객체의 함수를 사용할 수 있다. Kotlin의 스코프 함수는 5가지가 있다. apply run with also let 각 함수들은 역할이 비슷하다. apply apply는 자기 자신을 반환한다. this. 와 같은 참조 연산자를 따로 사용할 필요가 없다. (하지만 같은 이름의 변수가 있을 수 있으니 붙여서 사용하자) 보통 body 부분에서 값을 초기화하기 위해 사용하며 property(속성)만을 사용한다. (함수 사용 x) class Book (title: String, price: Int) { var title: String = title var price: Int = pri..
인터페이스 (Interface) Java에서의 Interface와 같다. 구현부가 있는 함수는 open으로 구현부가 없는 함수는 abstract로 자동을 간주하기 때문에 일일이 open이나 abstract를 붙일 필요는 없다. 상속받은 클래스에서는 abstract에 대해 override를 써줘야 한다. interface Animal { //open fun run() { println("now running") } //abstract fun eat() } class Cat : Animal { override fun eat() { println("now eating") } } 참고: 인터페이스는 생성자를 가질 수 없다.
코틀린은 함수형 프로그래밍 언어이기도 하다. 고차 함수 (High Order Function) 고차 함수의 간단한 정의: 하나 이상의 함수를 인수로 취하거나 함수를 결과로 반환하는 함수 (출처: wikipedia) 인자로 함수를 넘겨줄 때에는 인자로 사용할 함수 앞에 '::' (클론 2개)를 붙여서 사용한다. 인자에 함수를 넣을 때는 넣는 함수의 인자의 자료형과 반환 값의 타입을 작성해야한다. ' 함수이름 : (인자1 타입, 인자2 타입, ... ) -> 반환 타입 ' 다음의 예시는 인자로 함수를 넘겨준 예시이다. fun main() { fun2(::fun1, 3) } fun fun1 (n1: Int, n2: Int) : Int { println("fun1") println("$n1, $n2") retu..