728x90
전체 글

전체 글

    [Android] 룸(Room) 지속성 라이브러리

    룸(Room)이란? 안드로이드 앱에서 SQLite 데이터베이스를 쉽고 편리하게 사용할 수 있도록 하는 기능이다. SQLite 위에 만든 구글의 ORM(Object-relational mapping)이다. 룸을 사용하면 앱의 단일 정보 소스로 제공되는 캐시를 통해 인터넷 연결 여부와 관계없이 앱에 있는 주요 정보의 일관된 사본을 볼 수 있다. 룸의 구성요소 (Database, Entity, Dao) 1. Database 데이터베이스 홀더를 포함하며 앱의 지속적인 관계형 데이터에 대한 기본 연결을 위한 기본 Access Point 역할을 한다. @Database로 처리된 클래스는 다음과 같은 조건을 충족해야 한다. RoomDatabase를 확장하는 추상 클래스여야 한다. 어노테이션 내에 데이터베이스와 연결..

    [Android] Jetpack Databinding이란?

    DataBinding이란? 코틀린에서 레이아웃을, 레이아웃에서 코틀린의 데이터를 직접 참조하는 라이브러리. 코틀린에서 레이아웃 파일에 의존적인 부분이 많이 사라지고 MVVM등의 패턴과 함께 사용된다. One-way binding은 데이터의 흐름이 단방향을 말하고, Two-way binding 데이터의 흐름이 양방향을 말한다. 기본 사용법 Databinding에서 사용되는 레이아웃 파일들의 Root태그는 이되어야 한다. .... 어떤 객체를 참조하여 데이터를 출력할 지 를 정의해 주어야 한다. 데이터를 선언한 후 @{user.firstName} 처럼 데이터를 View에 참조하도록 연결할 수 있다. 이벤트 처리 1. 메소드 참조 데이터가 바인딩될 때 생성된다. 핸들러에 이벤트를 할당하려면 호출할 메서드 이름..

    [Android] Executors를 활용한 스레드 병렬 처리

    안드로이드는 UI 스레드에서 데이터베이스에 접근하는 것을 제한하고 있다. 데이터베이스에 접근하기 위해선 다른 스레드를 생성해서 처리해줘야 한다. 이러한 비동기 작업을 하기 위해선 여러 방법이 있지만, 이번 포스팅에서는 그중 하나인 Executors를 활용한 방법을 다룰 것이다. Java에서는 java.util.concurrent.Executors와 java.util.concurrent.ExecutorService를 제공하며 이를 이용하면 간단히 스레드 풀을 생성하여 병렬 처리를 할 수 있다. Executors 클래스에서의 여러 static 메서드를 사용해 ExecutorService 인터페이스의 구현 객체를 만들 수 있는데, 이러한 객체가 스레드 풀이다. 스레드 풀은 작업 처리에 사용되는 스레드를 제한된..

    [Android] MediatorLiveData가 동작하지 않을 때

    안드로이드 프로젝트를 진행하며 MediatorLiveData를 처음 사용해보았다. MediatorLiveData는 한 개 이상의 LiveData를 데이터 소스에 추가하여 관찰할 수 있다. 이번 글에서는 오늘 겪었던 문제점과 LiveData와 MediatorLiveData의 개념을 다시 한번 정리해보고자 한다. 간단한 사용자의 정보를 가지고 있는 UserEntity와 모든 사용자의 정보를 조회하는 getAllUsers() 메서드가 들어있는 UserDao가 있다고 해보자. UserEntity @Entity(tableName = "user") class UserEntity { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id: Long = 0 ..

    [Design Pattern] 디자인 패턴의 이해와 GoF 패턴

    디자인 패턴(Design Pattern)이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 수 있는 훌륭한 해결책이다. 패턴은 비슷하거나 동일한 양식 또는 유형들이 반복되어 나타난다는 의미이며, 문제와 해결책도 동일한 유형이나 양식을 통해 쉽게 찾을 수 있다. 디자인 패턴의 구조는 context, problem, solution 3개의 필수적인 요소로 구성된다. context : 문제가 발생하는 여러 상황을 기술한다. 패턴이 적용될 수 있는 상황을 나타낸다. problem : 패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 기술한다. 이때 여러 제약 사항과 영향력도 문제 해결을 위해 고려해야 한다. solution : 문제를 해결하도록 설계를 구성..

    [Design Pattern] 커맨드(Command) 패턴이란?

    커맨트 패턴(Command pattern)은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다. 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴이다. 아래의 예제는 눌리면 특정 기능을 수행하는 버튼을 표현한 예제다. 1. Command 동작을 수행하는 execute 메서드가 포함된 Command 인터페이스 public interface Command { public abstract void execute(); } 2. Button Button 클래스의 pressed 메서드에서 구체적인 기능(램프 켜기, 끄기)을 직접 구현하는 대신 버튼을 눌렀을 때 실행될 기능..

    [Design Pattern] 옵저버(Observer) 패턴이란?

    옵저버 패턴(Observer pattern)은 데이터의 변경이 발생했을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용하다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 간단한 예제인 입력된 성적 값을 출력하는 프로그램을 작성해보자. 1. Observer 추상화된 통보 대상 클래스 public interface Observer { /* 데이터의 변경을 통보했을 때 처리하는 메소드 */ public abstract void update(); } 2. Subject 추상화된 변경 관심 대상 데이터 public abstract class Subject { private List observers = new ArrayList(); /* 통보 대상을 추가함 */ pu..

    [Design Patten] 데코레이터(Decorator) 패턴이란?

    데코레이터 패턴(Decorator pattern)이란 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 Decorator 클래스로 정의한 후 필요한 Decorator 객체를 조합함으로써 추가 기능을 조합하는 설계 방식이다. 예를 들어 네비게이션 SW에서 도로를 표시하는 기능을 생각해보자. 네비게이션은 기본 도로를 간단한 선으로 표시하는 기본 기능에 차선 표시, 교통량 표시, 교차로 표시, 단속 카메라 표시의 4가지 추가 기능이 있을 수 있다. 데커레이터 패턴을 사용하면 개별 추가 기능에 해당하는 Decorator 클래스 4개만 구현하고 개별 추가 기능을 객체의 형태로 조합함으로써 추가 기능의 조합을 구현할 수 있다...

728x90