본문 바로가기

기타25

[Kotlin] map, flatMap 비교 안녕하세요. 이번 포스팅은 Kotlin의 map과 flatMap을 비교해보려고 합니다. 일단 map같은 경우 내부 구현은 아래와 같이 구현되어 있는데 좀 더 보자면 //_Collections.kt public inline fun Iterable.map(transform: (T) -> R): List { return mapTo(ArrayList(collectionSizeOrDefault(10)), transform) } public inline fun Iterable.mapTo(destination: C, transform: (T) -> R): C { for (item in this) destination.add(transform(item)) return destination } //Iterables.kt.. 2022. 6. 21.
[이펙티브자바] 4. 클래스와 인터페이스 1. 클래스와 멤버의 접근 권한을 최소화하라. 1.1. public클래스의 가변필드는 public이 아니어야 한다. 1.2. static final Array 같은 경우 값의 변경이 가능하기 때문에 private으로 만들어라. 더보기 public static final Integer[] VALUES = {1, 2, 3}; //수정 가능 EffectiveJava.VALUES[0] = 1; private static final Integer[] VALUES = {1, 2, 3}; //해결방법 1.불변 리스트로 만들기 public static final List VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES)); //해결방법 2.복사본을.. 2022. 6. 4.
[이펙티브자바] 3. 모든 객체의 공통 메소드 1. equals는 일반 규약을 지켜 재정의하라. 1. 모든 클래스는 Object를 상속받는데 equals, hashCode, toString, clone, finalize 를 재정의 할 수 있다. 2. equals는 물리적 동치성(메모리 주소가 같은지)이 아니라 논리적 동치성(갖고 있는 값이 같은지 등)을 비교할 때 이다. 3. equals 메소드의 규약을 따라야 한다. 3.1. 반사성 : x.euqals(x) 는 항상 true - 자기자신은 항상 같다라는 뜻 3.2. 대칭성 : x.euqals(y) 가 true이면 y.euqals(x) 도 true이다. 3.3. 추이성 : x.euqals(y) 가 true이고 y.euqals(z) 도 true이면 x.euqals(z)도 true이다. 3.4. 일관성 .. 2022. 5. 16.
[이펙티브자바] 2. 객체 생성과 파괴 1. 생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩토리메서드의 장점 5가지 1.1 생성자에 대한이름을 가질 수 있다. 1.2 호출마다 인스턴스를 새로 생성하지 않아도 된다. 1.3 하위타입의 객체를 반환할 수 있다. 1.4 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 1.5 정적팩터리 메서드를 작성하는 시점에 반환할 클래스의 객체가 존재하지 않아도 된다. 1.5.1 이런 유연함은 서비스 제공자 프레임워크(service provider framework) 의 근간이 된다. 정적 팩토리메서드의 단점 1. 정적팩토리 메소드만 제공하면 하위클래스를 생성할 수 없다. 2. 정적팩토리 메소드는 API문서에 설명이 잘 드러나있지 않는다. 코드 더보기 class EffectiveJava { .. 2022. 4. 30.
[안드로이드 NextStep] 2.5 UI변경 메커니즘 invalidate란? ViewGroup에게 자신의 영역을 다시 그려야 한다는 의미를 갖는 함수 1. invalidate 메서드의 호출스택 ViewGroup의 invalidateChild를 호출 invalidateChild에서는 invalidateChildInParent를 호출 invalidateChildInParent는 parent가 null일 때까지 while문으로 실행된다. 현재 루트가 아닐때 ViewGroup의 invalidateChildInParent 호출 현재 루트일때 ViewRootImpl의 invalidateChildInParent 호출 ViewRootImpl의 invalidateChildInParent에서 traversal 함수 호출 traversal 함수는 invalidate 영역을 다.. 2022. 1. 31.
코틀린 특징 및 자바와 차이점 정리(작성중) 1. 코틀린은 mutable과 immutable 변수를 var와 val이라는 키워드로 쉽게 설정가능 var는 mutable하고 val은 immutable 이다. 자바로 치면 val은 final과 같다. 2. 코틀린은 객체의 초기화에 대해서 늦은 초기화가 가능하다. 즉 변수가 사용될 시점에서 초기화가 가능하다. var 변수의 경우 lateinit var를 설정하면 반드시 한번은 초기화를 해야한다. 반면 val 변수의 경우 선언과 동시에 초기화하는 코드를 넣어주고 변수가 참조될때 초기화가 된다. val lazyTest: String by lazy { "Test" } lateinit var lateInitTest: String fun main() { println(lazyTest) println(lateIni.. 2021. 10. 4.