분류 전체보기
-
[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..
-
[Android] FCM을 이용해 Push 구현하기Android 2021. 4. 15. 18:38
Push Service? FCM? 서버에서 모바일 장치에 보내는 알림 또는 메시지. 직접 구현한 서버에서 사용자 장치로 알림을 보내기 위해서는 앱과 서버의 연결을 지속적으로 유지해야한다. 그러나 FCM(Firebase Cloud Messaging)은 구글 클라우드 서버를 사용해 앱에서 서버에 연결하지 않아도 기기의 내부 연결을 통해 메시지를 보낼 수 있다. FCM을 사용해서 메시지를 보내는 과정 FCM을 이용해 메시지를 보내는 과정을 간단하게 다섯 단계로 나눠서 정리해보았다. 1. 토큰 요청 및 획득 먼저 사용자가 앱을 설치하고 최초 실행시 토큰을 얻기위해 클라우드 서버에 요청을 보내고 토큰을 획득한다. 2. 서버에 토큰 저장 획득한 토큰을 서버로 전송하여 서버 db에 저장한다. 이 토큰은 서버가 클라우..
-
[Android] Notification 구현 예제 및 ChannelAndroid 2021. 4. 15. 16:32
기본 상단 알림 구현하기 안드로이드에서는 화면 상단에 정보를 표시해서 사용자에게 메시지나 상태를 보여주는 알림을 구현할 수 있다. 상단 알림은 NotificationManager 시스템 서비스와 NotificationCompat.Builder를 이용해 간단하게 생성하고 등록할 수 있다. 안드로이드 오레오(API 26) 이상부터는 채널이 필요하다. * 채널에 대한 내용은 본문 하단에 정리했으니 거기서 자세히 살펴보자. Build.VERSION.SDK_INT를 이용해 버전을 확인하고 오레오 이전 이후로 나눠서 Builder를 만든다. NotificationCompat.Builder builder = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { b..
-
[Android] 스레드(Thread)와 핸들러(Handler), 작업 스레드에서 UI 업데이트 요청하기Android 2021. 4. 14. 16:32
스레드(Thread) 스레드는 프로세스 내부에서 자원을 공유하며 실행되는 흐름의 단위다. 안드로이드에서는 메인 스레드는 UI 스레드로써 UI 작업을 담당하기 때문에 메인 스레드로 장기적인 작업을 수행할 경우 ANR이 발생한다. * ANR (Application Not Responding) : 말그대로 어플리케이션 응답 없음. 메인 스레드가 어떤 Task에 오랜 시간 잡혀 있을 때 발생한다. 어플리케이션이 응답없다는 팝업 메세지와 함께 어플리케이션이 종료된다. 멀티 스레드 (Multi Thread) 프로세스는 둘 이상의 스레드를 가질 수 있는데, 여러 개의 스레드는 프로세스 내 자원을 공유하면서 동시에 작업하며 효율적으로 동작한다. 안드로이드에서는 UI를 차단하지 않기 위해 네트워크 통신같은 작업은 주로 ..
-
[Android] JSON 라이브러리 : GSONAndroid 2021. 4. 12. 19:48
Json이란? Json(JavaScript Object Notiation)은 키-값(key-value)로 이루어진 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다. 자바스크립트 뿐만 아니라 여러 프로그래밍에서 사용된다. 읽고 쓰는 것이 간단하고, 언어 독립적이며, XML보다 가볍다는 장점이 있어서 네트워크 통신에서 자주 사용된다. 기본 구조 json은 하나의 문자열로 구성되며 "{key : value}"의 객체 형태를 기본으로 하고 콤마(,)로 구분된다. value에는 문자열, 숫자, 배열, boolean값과 다른 객체를 포함할 수 있다. (자바스크립트 객체 표현 방식과 거의 동일하다.) { "이름": "홍길동", "나이": 25, "성별": "여", "주소": "서울특별시 양천구 목동", "..