일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드 레트로핏 사용법
- 서비스 쓰레드 차이
- 스택 자바 코드
- 서비스 vs 쓰레드
- 플러터 설치 2022
- android ar 개발
- 자바 다형성
- 객체
- 클래스
- 멤버변수
- 안드로이드 유닛 테스트 예시
- Rxjava Observable
- ANR이란
- 안드로이드 유닛테스트란
- 안드로이드 유닛 테스트
- rxjava cold observable
- 스택 큐 차이
- jvm 작동 원리
- rxjava disposable
- 큐 자바 코드
- 2022 플러터 설치
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 os 구조
- 안드로이드 라이선스
- jvm이란
- 안드로이드 레트로핏 crud
- ar vr 차이
- android retrofit login
- rxjava hot observable
- 안드로이드 라이선스 종류
- Today
- Total
목록책/Kotlin in Action (8)
나만을 위한 블로그
제네릭 타입 파라미터 제네릭을 쓰면 타입 파라미터(type parameter)를 받는 타입을 정의할 수 있다. 제네릭 타입 인스턴스를 만들려면 타입 파라미터를 구체적인 타입 인자(type argument)로 치환해야 한다. List라는 타입이 있다면 그 안에 들어가는 원소 타입을 알면 쓸모있을 것이다. 타입 파라미터를 쓰면 "이 변수는 리스트야"라고 말하는 대신 정확하게 "이 리스트는 문자열을 담는 리스트야"라고 말할 수 있다. 코틀린에서 문자열을 담는 리스트를 표현하는 구문은 자바와 같이 List이다. 클래스에 타입 파라미터가 여럿 있을 수도 있다. Map 클래스는 키, 값 타입을 타입 파라미터로 받으므로 Map가 된다. 코틀린 컴파일러는 보통 타입과 마찬가지로 타입 인자로 추론할 수 있다. val a..
고차 함수 정의 고차 함수는 다른 함수를 인자로 받거나 함수를 리턴하는 함수다. 코틀린에선 람다나 함수 참조를 써서 함수를 값으로 표현할 수 있다. 함수를 인자로 받는 동시에 함수를 리턴하는 함수도 고차 함수다. filter 함수도 술어 함수를 인자로 받으므로 고차 함수다. 함수 타입 람다를 인자로 받는 함수를 정의하려면 먼저 람다 인자의 타입을 어떻게 선언할 수 있는지 알아야 한다. 인자 타입을 정의하기 전에 더 단순하게 람다를 로컬 변수에 대입하는 경우를 확인한다. 코틀린의 타입 추론으로 변수 타입을 지정하지 않아도 람다를 변수에 대입할 수 있음을 이미 알 수 있다. val sum = { x: Int, y: Int -> x + y } val action = { println(42) } 컴파일러는 이 ..
컬렉션, 범위에 대해 쓸 수 있는 관례 인덱스로 원소에 접근 : get, set a[b]처럼 인덱스 연산자(=대괄호)를 써서 변경 가능한 맵에 키밸류 쌍을 넣거나 이미 들어있는 키밸류 쌍의 연관 관계를 바꿀 수 있다. 코틀린에선 인덱스 연산자도 관례를 따른다. 인덱스 연산자로 원소를 읽는 연산은 get 연산자 메서드로 변환되고, 쓰는 연산은 set 연산자 메서드로 변환된다. Map, MutableMap 인터페이스엔 이미 두 메서드가 들어있다. class Point(val x: Int, val y: Int) operator fun Point.get(index: Int): Int { return when (index) { 0 -> x 1 -> y else -> throw IndexOutOfBoundsExce..
널 가능성 널 가능성(nullability)은 NPE 오류를 피할 수 있게 하기 위한 코틀린 타입 시스템의 특성이다. 코틀린을 비롯한 최신 언어에서 null에 대한 접근법은 가능한 이 문제를 실행 시점에서 컴파일 시점으로 옮기는 것이다. 널이 될 수 있는지 여부를 타입 시스템에 추가해서 컴파일러가 여러 오류를 컴파일 시에 미리 감지해서, 실행 시점에 발생할 수 있는 예외 가능성을 줄일 수 있다. 널이 될 수 있는 타입 코틀린, 자바의 가장 중요한 차이는 코틀린 타입 시스템이 널이 될 수 있는 타입을 명시적으로 지원한다는 것이다. 어떤 변수가 널이 될 수 있다면 그 변수에 대해 메서드 호출 시 NPE가 발생할 수 있어 안전하지 않다. 코틀린은 그런 메서드 호출을 금지해서 많은 오류를 방지한다. 널이 인자로..
람다는 기본적으로 다른 함수에 넘길 수 있는 작은 코드 조각이다. 람다를 쓰면 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있다. 람다를 자주 사용하는 경우로 컬렉션 처리를 들 수 있다. 람다식과 멤버 참조 람다와 컬렉션 코드 중복 제거는 프로그래밍 스타일을 개선하는 중요한 방법 중 하나다. 컬렉션을 다룰 때 수행하는 작업 대부분은 몇 가지 일반적인 패턴에 속한다. 예를 들어 사람의 이름, 나이를 저장하는 Person 클래스가 있다. data class Person(val name: String, val age: Int) Person으로 이뤄진 리스트가 있고 그 중에서 가장 연장자를 찾으려면, 람다를 쓴 적이 없는 경우 루프를 통해 직접 검색을 구현할 수 있다. data class Person(val ..
클래스 계층 정의 코틀린 인터페이스 코틀린 인터페이스는 자바 8 인터페이스와 비슷하다. 안에 추상 메서드와 구현이 있는 메서드도 정의할 수 있다. 다만 인터페이스에는 어떤 상태(필드)도 들어갈 수 없다. interface Clickable { fun click() } class Button: Clickable { override fun click() { println("클릭됨") } } 자바에선 extends, implements 키워드를 쓰지만 코틀린에선 클래스명 뒤에 콜론을 붙이고 인터페이스, 클래스명을 적는 걸로 상속, 인터페이스 구현을 모두 처리한다. 자바처럼 클래스는 인터페이스를 원하는 만큼 구현 가능하지만 클래스는 하나만 상속할 수 있다. 자바의 @Override와 비슷한 override 키워..
코틀린에서 컬렉션 만들기 2장에서 확인한 setOf()을 써서 집합을 만드는 걸 확인했다. 이번엔 숫자로 이뤄진 집합을 만든다. val set = hashSetOf(1, 7, 53) 비슷한 방법으로 리스트, 맵도 만들 수 있다. val list = arrayListOf(1, 2, 3) val map = hashMapOf(1 to "one", 2 to "two", 3 to "three") 여기서 "to"는 언어가 제공하는 특별한 키워드가 아닌 일반 함수라는 것에 주의해야 한다. 여기서 만든 객체가 어떤 클래스에 속하는지 확인하려면 아래와 같이 할 수 있다. fun main() { val set = setOf(1, 2, 3) val list = arrayListOf(1, 2, 3) val map = hash..
함수와 변수 모든 프로그래밍 언어가 그러하듯 코틀린 또한 함수와 변수를 바탕으로 프로그램을 만들 수 있다. 이 2가지 요소를 코틀린에선 어떻게 사용할 수 있는지 확인한다. 아래는 오랜 전통인 "Hello, World!"의 출력 방법이다. 인텔리제이를 설치하고 코틀린을 사용하도록 설정하고 아래 코드를 복붙해서 실행한다. 만약 설치하기 귀찮다면 아래 링크를 확인한다. 웹 페이지를 통해 코틀린 코드를 실행할 수 있다. https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS43LjIxIiwicGxhdGZvcm0iOiJqYXZhIiwiYXJncyI6IiIsIm5vbmVNYXJrZXJzIjp0cnVlLCJ0aGVtZSI6ImlkZWEiLCJjb2RlIjoiLyoqXG4gKiBZb3Ug..