목록Language/Kotlin (11)
devseop08 님의 블로그
함수를 호출하려면 그 함수가 정의된 클래스의 이름과 함수 이름, 파라미터 이름 등을 알아야만 했다.어노테이션과 리플렉션을 사용하면 그런 제약을 벗어나서 미리 알지 못하는 임의의 클래스를 다룰 수 있다.어노테이션을 사용하면 라이브러리가 요구하는 의미를 클래스에 부여할 수 있고리플렉션을 사용하면 실행 시점에 컴파일러 내부 구조를 분석할 수 있다.12.1 어노테이션 선언과 적용어노테이션을 사용하면 선언에 추가적인 메타 데이터(클래스 이름, 함수 이름, 파라미터 이름 등)를 연관시킬 수 있고어노테이션이 설정된 방식에 따라 소스 코드, 컴파일된 클래스 파일, 런타임에 대해 작동하는 도구를 통해 메타 데이터에 접근할 수 있다.12.1.1 어노테이션을 적용해 선언에 표지 남기기코틀린에서 어노테이션을 적용하려면 @와 ..
11.1 타입 인자를 받는 타입 만들기: 제네릭 타입 파라미터제네릭스를 사용하면 타입 파라미터를 받는 타입을 정의할 수 있다.제네릭 타입의 인스턴스가 만들어질 때는 타입 파라미터를 구체적인 타입 인자로 치환한다.구체적인 타입을 타입 인자로 넘기면 타입을 인스턴스화할 수 있다.코틀린 컴파일러는 보통 타입과 마찬가지로 타입 인자도 추론할 수 있다.val authors = listOf("Dmitry", "Svetlana");listOf에 전달된 두 값이 문자열이기 때문에 컴파일러는 여기서 생기는 리스트가 List임을 추론한다.반면에 빈 리스트를 만들어야 한다면 타입 인자를 추론할 근거가 없기 때문에 직접 타입 인자를 명시해야 한다.리스트를 만들 때는 변수의 타입을 지정해도 되고 변수를 만드는 함수의 타입 인자..
언어의 어떤 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 코틀린에서는 관례라고 부른다.코틀린이 지원하는 여러 관례와 그 관례의 사용법을 살펴본다.언어의 기능을 타입에 의존하는 자바와 달리 코틀린은 관례에 의존한다.기존 자바 클래스가 구현하는 인터페이스는 이미 고정돼 있고 코틀린 쪽에서 자바 클래스가 새로운 인터페이스를 구현하게 만들 수는 없다.확장 함수 메커니즘을 이용하면, 기존 클래스에 새로운 메서드를 추가할 수 있다.따라서 기존 자바 클래스에 대해 확장 함수를 구현하면서 관례에 따라 이름 붙이면 기존 자바 코드를 바꾸지 않아도 새로운 기능을 쉽게 부여할 수 있다.9.1 산술 연산자를 오버로딩해서 임의의 클래스에 대한 연산을 더 편리하게 만들기코틀린에서 관례를 사용하는 가장 단순한 예는 산술 연..
고차 함수: 람다를 파라미터 반환값으로 사용10.1. 다른 함수를 인자로 받거나 반환하는 함수 정의: 고차 함수고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수다.코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있다.고차 함수를 사용하는 법에 더해 이제는 고차 함수를 정의하는 방법을 살펴본다.고차 함수를 정의하려면 함수 타입을 먼저 알아야 한다.10.1.1 함수 타입은 람다의 파라미터 타입과 반환 타입을 지정한다.람다를 인자로 받는 함수를 정의하려면 먼저 람다 파라미터의 타입을 어떻게 선언할 수 있는지 알아야 한다. (코틀린 타입 중 함수 타입이라는 것이 있고, 이 함수 타입을 어떻게 선언할 수 있는지 알아야 한다. )파라미터 타입을 정의하기 전에 더 단순한 경우로 람다를 로컬..
데이터를 어떤 조건 함수에 따라 걸러내거나, 데이터를 그룹화하여 나누거나, 컬렉션 아이템을 다른 것으로 변환하는 등의 일반적인 컬렉션 접근 패턴을 표준 라이브러리 함수와 람다를 조합해 표현할 수 있다.함수형 스타일로 컬레션 다루기와 컬렉션 연산을 지연시켜 수행하기 위한 시퀀스를 알아보자코틀린에서 컬렉션 연산을 즉시 실행하는 방법과 지연 실행하는 방법을 비교6.1 컬렉션에 대한 함수형 API6.1.1 원소 제거와 변환 : filter(추출)와 map(변환)data class Person(val name:STring, val age:Int)filter함수는 컬렉션을 순회하면서 주어진 람다가 true를 반환하는 원소들만 모은다fun main(){ val people = listOf(Person("Alic..
8.1 원시 타입과 기본 타입Int, Boolean, Any 등의 기본 타입을 살펴보자.자바와 달리 코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다.원시 타입과 래퍼 타입을 구분하지 않는 이유와 코틀린 내부에서 어떻게 기본 타입에 대한 래핑이 이루어지는지 살펴보자.Object, Void 등의 자바 타입과 코틀린 타입 간의 대응 관계를 살펴보자8.1.1 정수, 부동소수점 수, 문자, 불리언 값을 원시 타입으로 표현코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다. 항상 같은 타입을 사용한다.컬렉션에 담는 래퍼 타입이 따로 있지 않다는 것이다.val i: Int = 1val list: List = listOf(1, 2, 3)래퍼 타입을 따로 구분하지 않으면 편리한데, 숫자 타입 등 원시 타입의 값에 대해 ..
람다식 또는 람다는 기본적으로 다른 함수에 널길 수 있는 작은 코드 조각을 의미한다.람다를 사용하면 쉽게 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있다.람다가 무엇인지 알아보자람다 함수의 전형적인 사용 패턴을 보고 코틀린에서 그런 사용 패턴의 모습을 논의해보자멤버 참조와 람다의 관계를 살펴보자람다를 자바 API나 라이브러리와 함께 사용하는 방법을 살펴보자함수형 인터페이스를 사용하는 방법을 살펴보자수신 객체 지정 람다를 알아보자5.1 람다식과 멤버 참조5.1.1 람다 소개: 코드 블록을 값으로 다루기코드에서 일련의 동작을 변수에 저장하거나 다른 함수에 넘겨야 하는 경우가 자주 있다.익명 내부 클래스를 사용하면 코드를 함수에 넘기거나 변수에 저장할 수 있기는 하지만 상당히 번거롭다.이 문제를 해결하는 ..
코드 가독성을 살려주는 코틀린 핵심 기능 : 널이 될 수 있는 타입 지원7.1 NullpointerException을 피하고 값이 없는 경우 처리: 널 가능성코틀린을 포함한 최신 언어에서 null에 대한 접근 방법은 가능한 이 문제를 실행 시점에서 컴파일 시점으로 옮기는 것이다.널이 될 수 있는지 여부를 타입 시스템에 추가함 => 여러 가지 오류를 컴파일 시 미리 감지코틀린에서 null이 될 수 있는 값을 어떻게 표기하고 코틀린이 제공하는 도구가 그런 null이 될 수 있는 값을 어떻게 처리하는지 살펴보자널이 될 수 있는 타입 측면에서 코틀린과 자바 코드를 어떻게 함께 사용할 수 있는지 살펴보자7.2 널이 될 수 있는 타입으로 널이 될 수 있는 변수 명시코틀린과 자바의 첫 번째이자 가장 중요한 차이는 코..