책정리/Kotlin in Action 6

[Kotlin in Action] 애노테이션과 리플렉션

이 포스팅은 Kotlin in Action 책의 10장을 정리한 글 입니다. Annotation과 Reflection을 사용하면 실행 시점에 컴파일러 내부 구조를 분석할 수 있다. 10.1 애노테이션 선언과 적용 10.1.1 애노테이션 적용 자바와 똑같은 방식으로 @를 붙여서 사용 @Deprecated("Use removeAt(index) instead", ReplaceWith("removeAt(index)")) fun remove(index: Int) { ... } 자바와의 차이 클래스를 애노테이션 인자로 지정할 때 @MyAnnotaion(MyClass::class) 인자로 들어가는 애노테이션의 이름 앞에는 @를 넣지 않는다. 배열을 인자로 지정하려면 arrayOf 함수를 사용한다. 어노테이션 인자는 ..

[Kotlin in Action] 컬렉션과 배열, (MutableCollection, 자바와의 관계)

6.3 컬렉션과 배열 코틀린의 컬렉션 지원과 자바와 코틀린 컬렉션 간의 관계 6.3.1 널 가능성과 컬렉션 List와 List?의 차이 (1) : 리스트 자체는 널이 아니다. 리스트에 들어있는 각 원소는 널이 될 수 있다. (2) : 리스트 자체가 널이 될 수 있다. 리스트에 들어있는 원소는 널이 될 수 없다. 널 값 거러내기 // List -> List val validNumbers = numbers.filterNotNull() 6.3.2 읽기 전용과 변경 가능한 컬렉션 kotlin.collections.Collection : 컬렉션 안의 데이터 접근 kotlin.collections.MutableCollection : Collection 인터페이스 확장 & add, remove, clear 메소드 제..

[Kotlin in Action] 코틀린의 원시 타입, Any, Unit, Nothing 타입

6.2 코틀린의 원시 타입 코틀린에서는 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 컴파일 시 미리 감지하여 발생할 수 있는 예외의 가능성을 줄일 수 있다. 6.2.1 원시 타입: Int, Boolean 등 Java에서 원시 타입과 참조 타입의 차이 : 변수가 직접 들어가는 지 / 메모리상의 객체 위치가 들어가는 지 Integer는 래퍼 타입으로 메소드 등을 호출할 수 있다. Kotlin에서는 구분이 없고, 원시 타입에 대해 메소드를 호출할 수 있다. 대부분의 경우 자바 int 타입으로 컴파일 된다. 불가능할 경우 (컬렉션 사용 등) Integer 래퍼 타입으로 객체가 들어간다. 6.2.2 널이 될 수 있는 원시 타입: Int?, Boolean? 등 자바의 래퍼 타입으로 컴파일된다. ..

[Kotlin] 클래스와 프로퍼티, Enum 클래스 - Java와 비교하기

[Kotlin] 클래스와 프로퍼티, Enum 클래스 - Java와 비교하기 클래스 코틀린에도 자바에 존재하는 클래스라는 개념이 존재한다 다른 부분은 클래스 선언 및 정의가 조금더 '간단' 하다는 점이다. class Person(val name: String, var age: Int, val address: String)과 같이 한 줄에 여러 필드를 선언할 수 있다. 프로퍼티 자바에서는 '필드'와 '접근자'를 묶어 프로퍼티라고 부른다. 코틀린에서는 프로퍼티를 기본 기능으로 제공하여 자바의 필드와 접근자 메소드를 완전히 대신한다. 자바에서는 게터와 세터를 제공해야 필드를 접근하고 변경할 수 있다. 코틀린에서는 값을 저장하기 위한 비공개 필드와 세터 및 게터 구현을 제공한다. class Person( val ..

[Kotlin] 함수와 변수 - Java와 비교하기

변수 코틀린에서는 크게 변경 가능한 변수와 변경 불가능한 변수가 있다. 변경 불가능한 변수 (val) 변경 불가능한 (immutalbe) 참조를 지정하는 변수다. 자바에서는 final에 해당한다. 변경 가능한 변수 (var) 변경 가능한 (mutalbe) 참조를 지정하는 변수다. 자바의 일반 변수에 해당한다. val age: Int = 24 // (1) val languages = arrayListOf("Korean", "English") // (2) languages.add("French") var name = "Boggling" name = 42 // (3) Error : type mismatch, 컴파일 오류 발생 1 'val' 변경 불가능한 변수 명시 Int 형 변수임을 명시 2 'val' 변경 ..

[Kotlin] 코틀린이란? 왜 코틀린을 사용할까?

코틀린이란 무엇일까? 코틀린은 정적 타입 프로그래밍 언어로 JVM 안에서 돌아갈 수 있는 JetBrains 사에서 만든 언어이다. 자바에 비해서 얻을 수 있는 장점은? 코틀린은 간결하다. 또한 좀 더 안전하다. 정적 타입 언어로 타입을 체크해주고, null pointer exception에 자유롭다. 또한 자바 언어와 100% 호환된다. 코틀린은 어떻게 작동할까? 코틀린도 자바와 마찬가지로 소스코드를 컴파일 하여 class 파일을 만들어낸다. 그러나 코틀린은 코틀린 런타임 라이브러리에 의존한다. 따라서 배포시에 런타임 라이브러리도 함께 배포해야한다. 코틀린은 함수형 프로그래밍 언어다. 함수형 프로그래밍 함수형 프로그래밍의 등장 명령형 프로그래밍일경우 복잡하게 엉켜있는 스파게티 코드를 유지보수하는 것이 매..