목록전체 글 (162)
Coding Memo
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..
Class Kotlin은 객체지향 언어의 특징도 가지고 있다. Java와 동일하고 property (속성)과 함수들을 포함하고 있고 '.' 연산자로 참조를 할 수 있다. 참고: Java와 달리 Kotlin에서는 파일명과 class 명이 일치하지 않아도 된다. 생성자 (Constructor) 좀 특이하다. 선언 부분 자체가 생성자가 된다. 생성자 영역이 따로 없다. 따라서 Java에서 했던 속성들을 초기화하는 작업은 'init'이라는 함수에서 할 수 있다. init 함수는 인자나 return 값이 없는 조금 특이한 함수이고, 클래스 생성 시에 자동으로 실행된다. 다음의 예시를 보자. fun main() { var Person1 = Person("Mike", 20, 160) var Person2 = Pers..
접근 제어자 Kotlin의 접근 제어자는 Java와 비슷하며, 각 제어자도 동일한 기능을 수행한다. 클래스, 변수, 함수에 대해 적용할 수 있고 아무것도 붙이지 않았을 경우(default), 기본적으로 'public' 이 된다. interval이라는 모듈에 대한 접근 제어자가 추가로 있다. 종류 public private protected internal 설명 어떠한 패키지에서도 접근이 가능하고 클래스 외부에서 항상 접근이 가능 같은 파일 내에서, 혹은 같은 클래스 내에서만 접근이 가능 같은 클래스와 상속받은 클래스에서만 접근이 가능 모듈에 대한 접근제어자로, 같은 모듈 내에서만 접근이 가능
조건문 Java와 거의 비슷하다. fun main() { val a: Int = 1; if (a > 0) { println("a=$a 이므로 0보다 큽니다.") } } 참고: 변수 앞에 $을 붙여서 ""안에서 출력 가능 ex) println("a=$a"), println("age=${person1.age}") 단, switch 와 비슷한 when 이라는 조건문이 있다. switch에서 case를 생략한 구문이라고 생각해도 될 듯하다. switch-case 문에서 case를 뺴고 ':' 대신에 '->'를 사용하고 else를 사용할 수 있다. 해당 하는 값이 없을 경우는 else에 있는 구문이 실행이 되고 else도 없을 경우 아무것도 실행되지 않는다. switch-case문과 마찬가지로 조건이 여러개 맞더..