'Kotlin' 태그의 글 목록 — SH's Devlog

Kotlin

Android/Kotlin(Java)

[Kotlin] Annotation Processor로 코드 생성하기(ft. KotlinPoet)

이번 포스트에서는 Annotation Processor에 대해 정리해 보겠습니다. Annotation Processor란? Annotation Prcoessor란 소스 코드에 붙어있는 어노테이션 정보를 읽어서 컴파일 단계에서 컴파일러가 java 파일 혹은 바이트 코드를 생성하여 새로운 소스 코드를 생성할 수 있는 기능을 제공하는 javac(Java Compiler)에 내장된 도구입니다. 여기서 컴파일될 때 어떤 프로세서가 동작할지 결정하는 것은 프로세서를 찾는 'Service Loader'라는 기능의 도움으로 수행됩니다. Annotation Processing 원리 Annotation Processing은 javac에 의해 여러 round에 걸쳐서 동작합니다. 첫 번째 라운드는 컴파일이 사전 컴파일 단계..

Android/Kotlin(Java)

[Kotlin] String 원시 문자열(Raw String Literal)

원시 문자열(Raw String Literal)이란? Kotlin의 원시 문자열(Raw String)은 문자열을 표현하는 리터럴 중 한 유형으로 문자열 내에 이스케이프 문자를 사용하지 않고 특수 문자나 여러 줄의 텍스트를 문자 그대로 표현하는 문자열 리터럴입니다. 원시 문자열의 특징 원시 문자열은 아래와 같은 특징을 가집니다. 원시 문자열은 삼중따옴표(""")로 묶어서 정의 -> 따옴표가 아닌 삼중따옴표로 묶어서 정의합니다. 이스케이프 문자를 사용하지 않음 -> Raw String Literal 내에서는 \n, \t, \"와 같은 이스케이프 문자를 사용하지 않아도 됩니다. 따라서 특수 문자를 그대로 포함할 수 있어 가독성이 높아집니다. 여러 줄의 텍스트 처리 -> 여러 줄로 구성된 텍스트를 표현할 때 유..

Android/Kotlin(Java)

[Kotlin/Java] System.arraycopy로 배열 복사하기

이번에는 System.arraycopy에 대해 정리하겠습니다. System.arraycopy란? System.arraycopy는 메소드는 배열의 값들을 지정한 위치에서 갯수만큼 값을 복사할 수 있습니다. System.arraycopy 메소드 public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); Object src -> 복사하려는 배열 int srcPos -> 복사하려는 시작 인덱스 Object dest -> 복사받으려는 배열 (붙여넣으려는) int destPos -> 복사받으려는 시작 인덱스 (붙여넣으려는) int length -> 복사하려는 갯수 만약, srcPos + leng..

Android/Kotlin(Java)

[Kotlin] Comparable Interface 상속으로 클래스 비교하기

두 객체를 비교할 때 객체의 특정 원소를 통해 비교를 하려면 compareTo() 메소드를 통해 간단하게 비교할 수 있습니다. 또한, 이 compareTo() 메소드는 단순히 객체간의 비교 뿐만 아니라 List의 정렬에서도 사용됩니다. 자바와 코틀린에서는 이 compareTo() 메소드를 쉽게 사용할 수 있는 Comparable 인터페이스를 제공합니다. Comparable package kotlin /** * Classes which inherit from this interface have a defined total ordering between their instances. */ public interface Comparable { /** * Compares this object with the s..

Android/Kotlin(Java)

[Kotlin] Collections API - associate(), associateBy, associateWith(), groupBy()

associate associate()를 이용하면 List를 Map 형태로 변형시킬 수 있습니다. 단, groupBy()와의 차이점이 있습니다. associate()는 groupBy()와는 달리, key가 중복이 되면 마지막 요소를 Map의 value로 저장합니다. (groupBy()는 Map 형태로 만들기 때문에 key가 중복이 되어도 List에 전부 담을 수 있습니다.) 1. associate() associate() 함수 public inline fun Iterable.associate(transform: (T) -> Pair): Map { val capacity = mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16) return associat..

Android/Kotlin(Java)

[Kotlin] Collections API - groupingBy() 와 Grouping

groupingBy groupingBy()를 이용하면 데이터들을 그룹화 시키는 Grouping 객체를 만들 수 있습니다. Grouping 클래스에는 그룹화 되어있는 데이터들에 대한 연산을 수행하는 메소드들을 가지고 있습니다 groupingBy()는 4가지 클래스에서 사용할 수 있습니다. Iterable.groupingBy() Array.groupingBy() Sequence.groupingBy() CharSequence.groupingBy() Grouping의 확장함수 aggregate() 함수 aggregate()는 Grouping의 인자들을 key로 그룹화 하고 각 그룹의 요소에 순차적으로 연산(operation)을 적용하고 누적값(accumulator) 결과를 Map에 저장합니다. @SinceKot..

Android/Kotlin(Java)

[Kotlin] Collections API - flatMap()

flatMap()이란? map의 모나드 버전. flatMap()을 통해 List를 평면화를 거쳐 새로운 List를 반환시킬 수 있습니다. public inline fun Iterable.flatMap(transform: (T) -> Iterable): List { return flatMapTo(ArrayList(), transform) } public inline fun Iterable.flatMapTo(destination: C, transform: (T) -> Iterable): C { for (element in this) { val list = transform(element) destination.addAll(list) } return destination } flatMap() 함수를 보면 수신..

Android/Kotlin(Java)

[Kotlin/Java] 얕은복사 vs 깊은복사, Collection의 방어적 복사

[이 글은 NextStep Kotlin TDD, Refactoring, Clean Code 수업 중 공부한 것을 복습하고자 정리한 글입니다.] 얕은 복사란? 주소값 자체를 복사하는 것이다. 복사된 객체의 인스턴스는 원본 객체의 인스턴스와 같은 메모리주소를 참조합니다. -> 따라서, 같은 메모리 주소값을 참조하기 때문에 복사된 객체의 값이 변경되면 원본 객체의 값도 변경됩니다. 깊은 복사란? 새로운 메모리 공간에 객체의 모든 값을 복사하는 것이다. 원본 객체는 그대로 두고, 새로운 메모리공간에 원본 객체의 값들을 모두 복사합니다. -> 따라서, 다른 메모리 주소값을 참조하기 때문에 복사된 객체가 변경되어도 원본 객체는 영향을 받지 않습니다. 얕은복사의 문제점 자바(코틀린)에서는 기본적으로 '='를 사용하여..

Android/Kotlin(Java)

[Kotlin] Kotlin 예외처리 - require(), requireNotNull(), check(), checkNotNull()(feat. IllegalArgumentException, IllegalStateException)

Kotlin 예외처리 함수 require(), check() require(), requireNotNull() 함수 require() : 매개변수의 값이 참인지 체크, 거짓이라면 throw IllegalArgumentException requireNotNull() : 매개변수의 값이 null이 아니면 value를 반환, null이면 throw IllegalArgumentException * 일반적으로 IllegalArgumentException은 적절하지 않은 인자를 전달했을 때 발생시키는 Exception 함수 원형 // 참이 아니라면 throw IllegalArgumentException("Failed requirement.") public inline fun require(value: Boolean..

Android/Kotlin(Java)

[Kotlin] isAssignableFrom 와 is (Java instanceOf)

class UserViewModel @Inject constructor(): ViewModel() val userViewModel = UserViewModel() Log.d(TAG, "${ViewModel::class.java.isAssignableFrom(UserViewModel::class.java)}") // true Log.d(TAG, "${userViewModel is ViewModel}") // true instanceof (Kotlin에서 is) -> Class가 어떤 클래스 or 인터페이스를 상속했는지를 체크합니다. Class.isAssignableFrom() -> Class가 어떤 클래스 or 인터페이스에게 상속되었는지 체크합니다.

반응형
seunghwaan
'Kotlin' 태그의 글 목록