전체 글
-
[코틀린] 클래스와 상속코틀린 2022. 3. 13. 22:51
1. 인터페이스와 추상클래스 인터페이스 코틀린 인터페이스는 아래처럼 작성한다. interface Remote { fun up() fun down() fun doubleUp() { up() up() } } up, down은 추상 메소드로 상속받는 클래스에서 반드시 구현을 해야한다. doubleUp은 상속받는 클래스에서 추가적인 작업을 하지 않아도 된다. 클래스에서 인터페이스를 상속받아서 추상메소드를 구현해서 사용할 수 있다. class TV { var volume = 0 } class TVRemote(val tv: TV): Remote { // :을 이용하여 상속받음 override fun up() { // 추상메소드를 override해야함 tv.volume++; } override fun down() {..
-
[코틀린] 객체와 클래스코틀린 2022. 3. 13. 00:49
1. 객체와 싱글톤 객체 표현식으로 사용하는 익명 객체 객체 표현식: object {} 형태로 구현하고 익명의 객체를 생성한다. fun drawCircle() { val circle = object { val x = 10 val y = 20 val radius = 5 } println("Circle x: ${circle.x} y: ${circle.y} radius: ${circle.radius}")) } drawCircle() // Circle x: 10 y: 20 radius: 5 익명 객체는 인터페이스를 구현할 수도 있다. object: 으로 인터페이스를 구현하는 익명 객체를 만들 수 있다. fun createRunnable(): Runnable { val runnable = object: Runna..
-
[코틀린] 타입 안정성코틀린 2022. 3. 7. 22:16
1. Any와 Nothing 클래스 Any 코틀린의 모든 클래스의 상위 클래스. 각 클래스에 대해서 equals, hashCode, toString 같은 메소드들을 지원한다. 자바에서 Object와 유사한 기능을 하고 뿐만아니라 to(), let(), run(), apply(), also()같은 확장 함수를 제공한다. Nothing 표현식이 리턴하지 않을 때 Unit을 사용한다고 했다. 하지만 함수가 예외를 발생시켜 정말 아무것도 리턴하지 않을 때는 Nothing을 리턴 타입으로 갖는다. Nothing은 모든 클래스로 대체할 수 있어 리턴 타입에 어떤 타입이 있으면 따로 명시를 하지 않아도 된다. fun computeSqrt(n: Double): Double { // Nothing이 반환될 수 있지만 표..
-
[코틀린] 컬렉션코틀린 2022. 3. 7. 12:26
1. 컬렉션의 특징 코틀린 컬렉션은 mutable, immutable 두 가지가 구분되어서 제공된다. Pair: 값이 두 개인 튜플 Triple: 값이 세 개인 튜플 Array: 객체, 원시타입으로 구성된 순번이 있고 크기가 고정된 컬렉션 List: 객체들이 정렬된 컬렉션 Set: 객체들이 정렬되지 않은 컬렉션 Map: 딕셔너리 또는 키와 값의 맵 코틀린이 제공하는 편리한 메소드들 코틀린은 foreach, map, withIndex등 컬렉션 반복을 위한 메소드들을 제공한다. val names = listOf("Park", "Kim") println(names.withIndex().javaClass) // class kotlin.collections.IndexingIterable names.withInde..
-
[코틀린] 외부 반복과 아규먼트 매칭코틀린 2022. 3. 7. 11:01
1. 범위와 반복 range 코틀린에서는 특정 범위 내 반복을 위한 클래스가 있다. val shortRange: IntRange = 1 .. 5 1부터 5까지의 반복을 위한 클래스는 위와 같다. val aToZ: CharRange = 'a' .. 'z' 위는 a 부터 z까지의 반복을 하기 위한 변수 정의이다. val stringRange: ClosedRange = "aaa" .. "aad" println(stringRange.contains("aac")) println(stringRange.contains("aae")) 정방향 반복 val shortRange: IntRange = 1 .. 5 println(shortRange) for(i in shortRange) print("$i ") // 1 2 3 ..
-
[코틀린] 함수코틀린 2022. 3. 6. 23:27
1. 함수 생성 fun greet() = "Hello" println(greet) // hello 출력 코틀린에서 함수는 fun 함수이름, 함수 파라미터, 함수 본문으로 구성된다. 함수 본문은 =이나 {}로 구성 할 수 있다. 리턴타입과 타입 추론 단일표현식이고 {} 블록으로 구현된 함수가 아닌 경우 리턴 타입 추론이 발생한다. 직접 리턴 타입을 명시할 때는 아래와 같이 할 수 있다. fun hello(): String = "hello" 모든 함수는 표현식 코틀린에서 모든 함수는 표현식이다. 만약 아무것도 리턴할 것이 없으면 Unit 타입을 리턴 타입으로 추론한다. fun unitFunction() { } println("result of unit function: ${unitFunction()}") /..
-
[스칼라] 애노테이션(Annotation)스칼라 2022. 3. 2. 18:45
Programming in scala 4th edition 27장 1. 애노테이션 문법 애노테이션은 모든 선언이나 정의, 표현식, 타입에 적용 가능하다. @deprecated def deprecatedMethod(): Unit = { } 애노테이션은 메서드, val, var, class, object, trait 등 모든 선언이나 정의에 사용 가능하다. 위의 예에서는 메서드에 사용했다. sealed class Super() case class A() extends Super case class B() extends Super def seeUnchecked(instance: Super): Unit = (instance: @unchecked) match { case A() => println("A") } s..
-
[스칼라] 익스트랙터(extractor)스칼라 2022. 3. 2. 18:00
Programming in scala 4th edition 26장 1. 익스트랙터 익스트랙터는 unapply 메서드를 갖고 있는 객체이다. 패턴 매치 시 익스트랙터 객체를 참조하는 패턴을 만나면 unapply메서드가 호출된다. // selectorString match { case EMail(user, domain) => ... } // 위는 아래의 호출을 일으킴 // EMail(selectorString) object Email { def apply(user: String, domain: String) = user + "@" + domain def unapply(str: String): Option[(String, String)] = { val parts = str split "@" if(parts.l..