목록코틀린 (32)
hyeals study
코루틴과 스레드 비교 코루틴 기본 옵션: 협력형이며 병행적으로 동작하지 않음(옵션 조절 가능) 스케줄러가 실행 시점을 결정하는 것이 아니라 프로그래머나 이벤트에 의해서 실행 및 지연(suspend), 재개(resume)시점이 결정됨 비선점형 멀티 태스크 동시성(concurrency)제공 독립적 스택을 가질 수도 있으나 일반적으로 스택을 다시 생성하지 않음 스레드 개수에 따라 완전히 병행적으로 동작할 수 있음 OS의 스케줄러가 실행 시점을 결정함 (스케줄러가 선점할 수 있음) 선점형 멀티태스크 멀티 프로세싱 병행성(Parallelism) 제공 스레드별로 독립적인 스택을 가짐 간단한 코루틴 예시 import kotlinx.coroutines.delay import kotlinx.coroutines.runBl..
코루틴(Coroutine)이란? 비선점(non-preemptive)멀티태스킹의 서브루틴(subroutine) 형태 지연(suspend-잠시 중단)과 재개(resume-물러나 있다가 다시 실행)가 가능 협력형(cooperative)태스크와 비슷하게 동작(Context switching이 없고 최적화된 비동기 함수를 통해 비선점형으로 작동하는 특징 때문) → 동시성을 제공함(병행성×) 코루틴을 이해하기 위한 개념들 ◎ Task ☞ 프로그램상에서 특정 할 일, OS상에서 표현하는 방법은 여러가지로 나뉘는데 그 중 Process와 Thread가 있음. Process Thread 메모리 독립적인 메모리 공유 메모리 스택 독립적인 스택 독립적인 스택 * Process ☞ 하나의 Program이 실행되면 시작됨 ☞ ..
Data클래스는 아주 유용하고 간편하게 사용할 수 있는 클래스다. 바로 예시를 들어보면, data class KotlinPerson(var name: String, var age: Int) 위의 코드는 KotlinPerson이라는 이름의 데이터 클래스이다. 데이터 클래스가 왜 간편하냐면 바로 아래와 같은 이유에서이다. 코틀린에서 작성한 데이터 클래스와 똑같은 기능을 갖는 클래스를 만들기 위해서 자바에서는 아래와 같이 아주 긴 코드 작성이 필요하다. public class JavaPerson(){ private String name; private Int age; public class JavaPerson(){ } public class JavaPerson(String name, int age){ this..
map 함수 - 컬렉션을 활용할 때 기반이 되는 함수 - 주어진 람다를 컬렉션의 각 원소에 적용한 결과를 모아서 새 컬렉션으로 만들어줌 * 아래와 같이 하면 숫자로 이루어진 리스트를 각 숫자의 제곱이 모인 리스트로 바꿀 수 있음 - 이는 원본 리스트와 원소의 개수는 같지만, 각 원소는 주어진 함수에 따라 변환된 새로운 컬렉션임 * it (디폴트 파라미터) : 람다의 파라미터가 하나뿐이고 그 타입을 컴파일러가 추론할 수 있는 경우 사용
* 코틀린의 제네릭은 기본 개념은 자바와 아주 유사함. * 제네릭을 사용하면 타입 파라미터를 받는 타입을 정의할 수 있음. * 제네릭 타입의 인스턴스를 만들려면 타입 파라미터를 구체적인 타입 인자(type argument)로 치환해야 함. [제네릭 함수 & 프로퍼티] * 제네릭 함수를 호출할 때는 반드시 구체적 타입으로 타입 인자를 넘겨야 함. fun List.slice(indices: IntRange): List 위의 코드는 제네릭 함수인 slice에 대한 정의임 이를 참고해서 제네릭 함수를 호출하는 방법은 아래와 같음 위의 코드에서 두 호출의 결과 타입은 모두 List임. 컴파일러는 반환 탕비 List의 T를 알아서 추론한 Char로 치환함 [제네릭 클래스 선언] * 자바와 마찬가지로 코틀린에서도 타..
* 고차 함수(high order function): 어떤 함수를 인자로 받거나 함수를 반환하는 함수 ☞ 고차 함수는 람다 or 함수 참조를 인자로 넘길 수 있고, 람다 or 함수 참조를 반환하는 함수임. ex) "list.filter { x > 0 }" 이 코드의 filter함수는 표준 라이브러리에 있는 함수인데 술어 함수를 인자로 받기 때문에 고차 함수임(filter외에도 map, with 등 코틀린 표준 라이브러리가 제공하는 여러 고차 함수가 존재) [함수 타입] ※ 함수 타입 정의 방법 (Int, String) -> Unit 위와 같이 정의하면 됨 (Int, String)은 함수의 파라미터 타입이며, Unit은 함수의 반환 타입임. 함수 타입을 선언할 때는 반환 타입을 반드시 명시해야 하기 때문에..
[동등성 연산자] * 코틀린에서는 == 연산자 호출을 equals 메소드 호출로 컴파일함 ( != 연산자도 equals 호출로 컴파일됨) * ==과 !=은 내부에서 인자가 널인지 검사하고 널이 아닌 경우에만 a.equals(b) 연산자를 호출함 ☞ 따라서 "a==b"는 "a?.equals(b) ?: ( b == null)" 로 컴파일됨 * equals 메소드는 Any에 정의된 메소드이기 때문에 override가 필요함. 따라서 equals앞에 operator가 붙지 않아도 됨 [순서 연산자] * 비교 연산자(>, =,
* 관례(convention): 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법. ☞ ex) 어떤 클래스 안에 plus라는 특별한 메소드를 전의하면 그 클래스의 인스턴스에 대해 + 연산자를 사용할 수 있음 * 코틀린에서 관례를 사용하는 가장 단순한 예시가 산술연산자임. [이항 산술 연산 오버로딩] - 이 포스팅에서 사용하는 Point 클래스는 화명 상의 점을 표현하는 클래스임 plus 연산자 함수: 두 점의 x 좌표와 y 좌표를 각각 더하는 함수. (멤버 함수) operator 키워드: 연산자를 오버로딩하는 함수 앞에는 반드시 operator 키워드를 붙여야 함. (operator 키워드를 붙임으로써 어떤 함수가 관례를 따르는 함수임을 명확히 할 수 있음) ☞ 이처럼 operator 변경자를..