본문 바로가기

반응형

프로그래밍/kotlin

(30)
코틀린 - 제네릭 자바에서와 마찬가지로 코틀린의 클래스에는 유형 매개 변수가있을 수 있습니다. class Box(t: T) { var value = t } 일반적으로 이러한 클래스의 인스턴스를 만들려면 형식 인수를 제공해야합니다. val box: Box = Box(1) 그러나 매개 변수가 유추 될 수 있다면 (예 : 생성자 인수 또는 다른 수단을 통해) 형식 인수를 생략 할 수 있습니다. val box = Box(1) // 1 은 Int 타입을 가지므로 컴파일러는 Box라고 알아낸다. 가변(Variance) 자바의 타입 시스템에서 가장 까다로운 부분 중 하나는 와일드카드 타입 입니다 ( Java Generics FAQ 참조 ). 그리고 코틀린에는 와이드카드가 없습니다. 대신 선언-위치가변과 타입 프로젝션의 두가지를 제공합..
코틀린 - sealed 클래스 sealed 클래스는 값이 제한된 집합의 유형 중 하나를 가질 수 있지만 다른 유형을 가질 수없는 제한된 클래스 계층 구조를 나타내는 데 사용됩니다. 그것들은 의미 상으로 enum 클래스의 확장입니다 : enum 타입에 대한 값의 집합도 제한되지만, 각각의 enum 상수는 단일 인스턴스로만 존재하는 반면, sealed 클래스의 서브 클래스는 포함 할 수있는 여러 인스턴스를 가질 수 있습니다 상태.sealed 클래스를 선언하려면 sealed 이름 앞에 한정자 를 추가합니다 . sealed 클래스는 하위 클래스를 가질 수 있지만 모두 sealed 클래스 자체와 동일한 파일에서 선언해야합니다. (Kotlin 1.1 이전에는 규칙이 훨씬 엄격했습니다. 클래스는 sealed 클래스의 선언 안에 중첩되어야했습니다...
코틀린 - 데이터 클래스 우리는 자주 데이터를 보관하는 것을 주된 목적으로하는 클래스를 자주 만듭니다. 이러한 클래스에서 일부 표준 기능 및 유틸리티 기능은 데이터에서 기계적으로 파생 될 수 있습니다. 코틀린에서 이것을 데이터 클래스 라고하며 data 다음 과 같이 표시됩니다 . data class User(val name: String, val age: Int) 컴파일러는 기본 생성자에서 선언 된 모든 속성에서 다음 멤버를 자동으로 파생시킵니다. equals()/ hashCode()쌍; toString()형태의 "User(name=John, age=42)"; componentN()선언 순서대로 속성에 해당하는 함수 ; copy() 기능 (아래 참조). 생성 된 코드의 일관성과 의미있는 동작을 보장하려면 데이터 클래스가 다음 요..
코틀린 - 확장 C # 및 Gosu와 유사한 코틀린은 클래스에서 상속하거나 데코레이터와 같은 모든 유형의 디자인 패턴을 사용하지 않고도 새로운 기능으로 클래스를 확장 할 수있는 기능을 제공합니다. 이것은 확장 이라는 특별한 선언을 통해 이루어진다 . 코틀린은 확장 기능 과 확장 속성을 지원 합니다 . 확장 함수 확장 함수을 선언하려면 수신자 유형 , 즉 확장되는 유형 을 접두어로 사용해야합니다 . 다음은 swap 함수를 다음에 추가합니다 MutableList . fun MutableList.swap(index1: Int, index2: Int) { val tmp = this[index1] // 'this'는 리스트에 해당합니다. this[index1] = this[index2] this[index2] = tmp } 확장..
코틀린 - 함수 함수 선언코틀린의 함수는 fun 키워드를 사용하여 선언됩니다 .fun double(x: Int): Int { return 2*x } 함수 사용법함수 호출은 전통적인 방식을 사용합니다.val result = double(2) 멤버 함수를 호출하면 점 표기법이 사용됩니다.Sample().foo() // Sample 클래스의 인스턴스를 생성하고 foo호출 파라미터함수 매개 변수는 파스칼 표기법, 즉 name : type을 사용하여 정의됩니다 . 매개 변수는 쉼표로 구분됩니다. 각 매개 변수는 명시 적으로 입력해야합니다.fun powerOf(number: Int, exponent: Int) { ... } 기본 인수함수 매개 변수는 기본값을 가질 수 있으며 해당 인수가 생략 될 때 사용됩니다. 이렇게하면 다른 언..
코틀린 - 고차 함수와 람다 고차 함수고차 함수는 함수를 매개 변수로 사용하거나 함수를 반환하는 함수입니다. 그러한 함수의 좋은 예는 lock()잠금 객체와 함수 를 취하여 잠금을 획득하고, 함수를 실행하고 잠금을 해제하는 것입니다.fun lock(lock: Lock, body: () -> T): T { lock.lock() try { return body() } finally { lock.unlock() } } 의 위의 코드를 검사하자 : body이 기능 유형을 : () -> T그래서 매개 변수를 사용하지 않는 입력의 값을 반환하는 기능을해야하는데 T. 그것은 try 블록 안에서 호출 되며, lock에 의해 보호되고 그 결과는 lock()함수에 의해 반환됩니다 .우리가 호출하기를 원한다면 lock(), 다른 함수를 인자로 전달할 ..
코틀린 - 인라인 함수 고차 함수를 사용하면 특정 런타임 패널티가 부과됩니다. 각 함수는 객체이며 클로저, 즉 함수 본문에서 액세스되는 변수를 캡처합니다. 메모리 할당 (함수 객체와 클래스 용)과 가상 호출은 런타임 오버 헤드를 초래합니다.그러나 많은 경우에 이런 종류의 오버 헤드는 람다식을 인라인함으로써 제거 될 수 있습니다. 아래에 표시된 함수는이 상황의 좋은 예입니다. 즉,이 lock()기능은 전화 사이트에서 쉽게 인라인 될 수 있습니다. 다음과 같은 경우를 고려하십시오.lock(l) { foo() } 매개 변수에 대한 함수 객체를 만들고 호출을 생성하는 대신 컴파일러에서 다음 코드를 생성 할 수 있습니다.l.lock() try { foo() } finally { l.unlock() } 우리가 처음부터 원한 것이 아닌가?..
코틀린 - 코루틴 Coroutines는 Kotlin 1.1+에서 실험버전 입니다. 세부 사항은 아래를 참조하십시오 일부 API는 네트워크 IO, 파일 IO, CPU 또는 GPU 집약적 인 작업 등과 같은 장기 실행 작업을 시작하고 호출자가 완료 될 때까지 차단하도록 요청합니다. 코 루틴은 스레드를 차단하지 않고 더 저렴하고 제어 가능한 작업 ( 코 루틴 중단) 으로 바꾸는 방법을 제공합니다 .코루틴은 라이브러리에 합병증을 넣어 비동기 프로그래밍을 단순화합니다. 프로그램의 논리는 코 루틴 (coroutine)에서 순차적으로 표현 될 수 있으며 기본 라이브러리는 비동기를 파악할 것입니다. 라이브러리는 사용자 코드의 관련 부분을 콜백으로 래핑하고, 관련 이벤트를 구독하고, 다른 스레드 (또는 다른 시스템)에서 실행을 예약 할 ..
코틀린 - 분리 선언 분리 선언때로는 예를 들어, 객체를 변수에 분리하여 할당하는 것이 편리할 수도 있습니다.val (name, age) = person 이 구문을 분리 선언 이라고합니다 . 분리 선언은 한 번에 여러 변수를 만듭니다. 우리는 두 개의 새로운 변수를 선언했습니다 : name과 age, 그리고 독립적으로 사용할 수 있습니다 :println(name) println(age) 분리 선언은 다음 코드로 컴파일됩니다.val name = person.component1() val age = person.component2() component1()와 component2()함수는 코틀린에서 널리 사용되는 관례 규칙 의 또 다른 예이다 ( + 와*, for 루프 와 같은 연산자 참조 ). 필요한 수의 컴포넌트 함수가 호출 ..
컬렉션 : List, Set, Map 많은 언어와 달리, 코틀린은 변경 가능한 콜렉션과 변경 불가능한 콜렉션 (List, Set, Map 등)을 구별합니다. 컬렉션을 수정 할 수있는 정확한 시간을 제어하면 버그를 제거하고 좋은 API를 설계하는 데 유용합니다. 변경 가능 콜렉션의 읽기 전용 뷰 와 실제로 변경 불가능한 콜렉션 간의 차이점을 이해하는 것이 중요합니다 . 둘 다 쉽게 만들 수 있지만 타입 시스템은 차이를 표현하지 않으므로 관련성이있는 경우 해당 내용을 추적하는 것이 당신에게 달려 있습니다. 코틀린의 List타입은 size, get과 같은 읽기 전용 등의 작업을 제공하는 인터페이스입니다. 자바에서와 마찬가지로, Iterable를 상속한 Collection을 상속합니다. List을 변경하는 메소드는 MutableList에 있습니다 ..

반응형