전체 글
-
다크모드 적용기개발/안드로이드 2021. 10. 14. 20:00
최근 기존 프로젝트에 다크모드를 적용하는 일을 진행했었다. 꽤 오랜 시간이 소요될 줄 알았지만 안드로이드에서 제공하는 기능을 통해서 생각보다 빠르게 적용할 수 있었다. 이번 포스트에서는 다크모드를 적용하면서 유용했던 기능을 정리해봤다. 0. 동일한 이름으로 다크모드를 적용할 때 주요하게 변경하는 부분은 텍스트 색깔, 그림 파일 형태의 앱 내 아이콘, XML로 생성한 그림 파일(사각형이나 그라데이션 등등) 이다. 다크모드를 적용하더라도 각각의 파일 이름은 그대로 가져가야 앱 내에서 수정하는 부분을 최소화 할 수 있기 때문에 리소스의 이름은 동일하게 유지하고 라이트모드, 다크모드 각각의 상태에서는 다른 파일을 사용하도록 진행했다. 1. 아이콘 리소스 분리 안드로이드에서는 리소스 폴더에 키워드를 넣어서 앱의 ..
-
Kafka - Event Streaming Platform개발/기술 2021. 10. 13. 20:30
Event Streaming Platform Kafka를 간단히 설명하면 Event Streaming Platform이다. 그래서 Kafka에 대해서 이해하려면 먼저 Event Streaming Platform이 무엇인지 먼저 이해할 필요가 있다. Kafka 공식 문서에서는 Event Streaming을 다음과 같이 정의한다. Technically speaking, event streaming is the practice of capturing data in real-time from event sources like databases, sensors, mobile devices, cloud services, and software applications in the form of streams of e..
-
RxJava - Disposable Deep Dive!개발/안드로이드 2021. 9. 17. 20:00
1. Disposable 클래스의 역할 RxJava 공식 문서에서는 Observable과 Observer의 관계를 위 그림으로 표현한다. Observable에서 데이터를 전달 할 때는 onNext() 함수가, 더이상 전달할 값이 없을 때는 onComplete() 함수가 마지막으로 에러가 발생하면 onError()가 호출되는 방식이다. 이런 설명 방식도 조금 디테일하게 분석해보면 Observable과 Observer 사이에 Disposable 객체를 추가하는 것이 조금 더 정확할 것 같다. Disposable 객체는 Observable에서 노출할 자원을 갖고 있고 Observer에게 이벤트로 전달하는 객체다. 그래서 RxJava 내부 소스코드를 분석해보면 첫번째 그림에 보여진 Observabe -> Obs..
-
RxJava dispose()개발/안드로이드 2021. 9. 16. 20:00
이번 포스트에서는 RxJava를 사용할때 왜 dispose() 함수를 호출해서 메모리 정리를 해야하는지를 사례를 통해서 정리해보고자 한다. class LeakActivity : AppCompatActivity() { private var disposable1 : Disposable? = null companion object { private const val TAG: String = "leak_activity_tag" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val observeSource = Observable.interval(1, TimeUnit.SECONDS) disposable..
-
IoC container and Bean개발/spring 2021. 9. 6. 21:00
IoC Containner and Bean In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. Otherwise, a bean is simply one of many objects in your application. Beans, and the dependencies among them, are reflected in the configura..
-
@Bean vs @Component개발/spring 2021. 9. 6. 20:00
Spring IoC 컨테이너 내에서 관리하는 객체들을 Bean 이라고 하고 Bean으로 사용 될 수 있는 객체는 XML이나 코드상에서 지정이 가능하다. 어노테이션을 사용하는 경우 @Bean, @Conponent 같은 어노테이션을 이용해 Spring IoC 컨테이너에 클래스를 객체로 등록할 수 있다. @Bean @Bean 어노테이션은 method 레벨 어노테이션으로 개발자가 수정할 수 없는 3rd 라이브러리 객체를 IoC Container에 등록하고 싶을 때 사용한다. 예를 들면 아래 코드처럼 애플리캐이션 전체에서 공통적으로 사용하고 싶은 Kafka 클래스를 만드려는 경우 아래와 같은 코드로 Bean을 등록 할 수 있다. @Bean을 사용할 때는 @Configuration 어노테이션이 추가된 클래스 내부에..
-
오브젝트 리뷰 - 7카테고리 없음 2021. 8. 29. 13:34
다형성 다형성 강제다형성은 언어가 지원하는 자동적인 타입 변환이나 사용자가 직접 구현한 타입 변환을 이용해 동일한 연산자를 다양한 타입에 사용할 수 있는 방식을 가리킨다. 매개변수 다형성은 제너릭 프로그래밍과 관련이 높은데 클래스의 인스턴스 변수나 메서드의 매개변수 타입을 임의의 타입으로 선언한 후 사용 시점에 구체적인 타입으로 지정하는 방식을 가리킨다. 포함 다형성은 메시지가 동일하더라도 수신한 객체의 타입에 따라 실제로 수행되는 행동이 달라지는 능력을 말한다. 객체지향 프로그래밍에서 가장 널리 알려진 형태의 다형성이다. 포함다형성을 위한 전제 조건은 자식 클래스가 부모 클래스의 서브타입이어야 한다는 것이다. 상속의 진정한 목적은 코드 재사용이 아니라 닿령성을 위한 서브타입 계층을 구축하는 것이다 상속..
-
ListAdapter, DiffUtil개발/안드로이드 2021. 8. 20. 09:24
ListAdapter는 RecyclerView.Adapter의 확장기능으로 리스트내에 노출할 아이템의 변경 여부를 백그라운드 쓰레드에서 판단할 수 있는 기능을 제공한다. 생성자에는 DiffUtil.ItemCallback의 구체 클래스를 넘겨주는데 여기서 구현하는 두 함수를 이용해 아이템 변경 유무를 판단한다 class BookAdapter() : ListAdapter(object : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: Book, newItem: Book): Boolean { return oldItem.isbn13 == newItem.isbn13 } override fun areContentsTheSame(oldItem: Boo..