전체 글
-
[Java] Effective Java 3/E 정리 - 6장 열거 타입과 어노테이션Study/이펙티브 자바 2021. 7. 7. 16:21
자바에는 특수한 목적의 참조 타입이 두가지 있다. 클래스의 일종인 열거 타입(enum)과 인터페이스의 일종인 어노테이션(annotation)이다. 이번 장에서는 이 타입들을 올바르게 사용하는 방법을 알아보자. Item34. int 상수 대신 열거 타입을 사용하라 열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 자바에서 열거 타입을 지원하기 전에는 접두어를 붙이고 정수 상수 나열하여 선언하는 정수 열거 패턴을 사용했다. public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public ..
-
[Java] Effective Java 3/E 정리 - 4장 클래스와 인터페이스Study/이펙티브 자바 2021. 6. 23. 19:22
이번 장에서는 클래스와 인터페이스를 쓰기 편하고, 견고하며, 유연하게 만드는 방법을 알아본다. Item15. 클래스와 멤버의 접근 권한을 최소화하라 정보 은닉 (캡슐화) 잘 설계된 컴포넌트는 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼는냐가 중요하다. 이는 정보은닉, 혹은 캡슐화라고 하는 개념으로 소프트웨어 설계의 근간이 되는 원리다. 정보 은닉의 장점은 다음과 같이 정리할 수 있다. 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌트로 교체하는 부담도 적기 때문이다. 정보 은닉 자체가 성능을 높여주지는 않지만, 성능 최적화에 도움을 준다. 완성된 시스템을 프로..
-
[Java] Effective Java 3/E 정리 - 3장 모든 객체의 공통 메서드Study/이펙티브 자바 2021. 6. 16. 18:55
3장은 Object에서 재정의가 가능한 메서드를 재정의할 때 지켜야할 규약에 대해 설명한다. * equals, hashCode, toString, clone, finalize 규약을 지키지 않고 잘못 구현할 경우 HashMap, HashSet 등과 같은 클래스에서 오동작할 위험이 있다. Item10. equals는 일반 규약을 지켜 재정의하라 equals를 재정의하지 않고 사용할 경우 오직 자기 자신과만 같게 된다. 아래 4가지의 상황에 해당된다면 재정의하지 않는 것이 좋다. 각 인스턴스가 본질적으로 고유하다. 값을 표현하는 것이 아니라 동작하는 객체를 표현하는 클래스가 해당한다. ex) Thread 인스턴스의 '논리적 동치성(logical equality)'을 검사할 일이 없다. 상위 클래스에서 재정의..
-
[Java] Effective Java 3/E 정리 - 2장 객체 생성과 파괴Study/이펙티브 자바 2021. 6. 9. 15:09
이번 장은 객체의 생성과 파괴에 대해 다룬다. 객체의 생성 시점, 생성 방법, 불필요한 생성을 피하는 법 , 객체의 소멸을 보장하는 법, 정리 작업을 관리하는 법 등을 알아 본다. Item 1. 생성자 대신 정적 팩토리 메서드를 고려하라 클래스의 인스턴스를 얻을 때 public 생성자를 주로 사용한다. 그러나 여기서는 정적 팩토리 메서드(static factory method)를 소개하며 정적 팩토리 메서드를 사용했을 때의 장단점을 설명한다. 정적 팩토리 메서드(static factory method)란? 클래스의 인스턴스를 반환하는 정적 메서드로, public 생성자 대신 혹은 함께 사용 가능하다. 책에서는 Boolean 클래스의 정적 팩토리 메서드 valueOf를 예제로 소개하고 있다. valueOf..
-
[Android] AAC-LiveData의 setValue와 postValueAndroid 2021. 4. 23. 10:22
워크 스레드로 카운팅을 하는 앱에서 LiveData를 setValue()로 제대로 갱신되지 않는 상황이 발생했고, postValue()로 변경하면서 해결했다. 그래서 까먹지 않기 위해 setValue와 postValue에 대한 정리를 하려고 한다 :) setValue() 레퍼런스 문서를 보면 setValue는 아래와 같이 정리되어 있다. Sets the value. If there are active observers, the value will be dispatched to them. This method must be called from the main thread. If you need set a value from a background thread, you can use postValue(Ob..