분류 전체보기

    sealed class 를 이용한 상태관리

    enum 대신 sealed class를 이용해서 상태관리를 하는 이유는 enum의 장점과 class의 장점을 모두 활용하기 위해서입니다. 1. enum을 쓰는 이유 int SOME_STATE_A = 0 int SOME_STATE_B = 1 만약 enum을 안쓰고 이렇게 상수로 상태를 정의한다고 한다면 컴파일러는 저 두개의 상수가 똑같이 SOME_STATE를 나타낸다는 것을 모를 것입니다. 따라서 when을 이용해 상태관리를 할 경우에 아래처럼 쓰게됩니다. fun foo() : Any { return when(state) SOME_STATE_A -> //do something.. SOME_STATE_B -> //do something.. else -> throw exception } 반면에 enum을 이용..

    클린아키텍쳐에서의 usecase 분리

    유스케이스는 비지니스로직을 수행하는 클래스입니다. 이 유스케이스는 하나의 기능을 하는 편이 좋습니다. 유스케이스가 하나의 기능만한다면, 어느 상황에서 어떤 유스케이스가 필요한지 바로바로 알 수 있습니다. 또한 수정에 용이합니다. 제 깃허브에 있는 메모앱을 예를들어 봅시다. class memoUsecase @Inject constructor(private val repo : Repository) { fun getAll() = repo.getAll() fun createMemo(memo : MemoData) = repo.createMemo(memo) fun deleteAllMemo() = repo.deleteAllMemo() fun updateMemo(memo : MemoData) = repo.updateM..

    안드로이드 앱개발에서의 클린아키텍쳐

    안드로이드 앱개발에서의 클린아키텍쳐

    먼저 이상적인 소프트웨어란 무엇일까요? 개인적으로 이상적인 소프트웨어는 두가지 조건을 만족시켜야 한다고 생각합니다. 1. A라는 클래스를 변경해도 B라는 클래스를 변경할 필요가 없어야한다. 2. A라는 기능을 테스트할때 B라는 기능은 테스트에 영향을 끼치거나, 영향을 받지 않아야한다. 이 조건을 충족하기 위해서는 소프트웨어의 구조를 잘 짜야합니다. 여기서 클린아키텍쳐가 쓰입니다. 클린아키텍쳐란? 클린아키텍쳐는 소프트웨어 아키텍쳐의 한 종류입니다. 그 목적은 소프트웨어를 여러개의 계층으로 나눠서 유지보수성과 테스트 용이성을 올리기 위함입니다. 각 계층은 따로따로 테스트가 가능하고, 한 계층의 변경사항이 다른 계층에 영향을 주지 않습니다. 클린아키텍쳐를 구현하기 위해서는 아래 두가지만 지키면됩니다. 1. 각..

    java에서 kotlin으로 마이그레이션 & 리팩토링 (1) - asyncTask를 Coroutine 으로 대체하기

    이번에 java로 짜여진 앱을 Kotlin으로 마이그레이션하면서 겪은 이야기를 기록하려고합니다. asyncTask를 Coroutine으로 대체했습니다. 복잡한 if else 문은 when으로 대체했습니다. 큰 메서드를 여러 메서드로 분리했습니다. 코드의 의미를 한눈에 알 수 있도록 메서드를 이용해 추상화했습니다. run, apply, use 등의 확장함수를 사용해서 가독성을 높였습니다. 중복을 제거했습니다. 1. asyncTask를 Coroutine 으로 대체하기 이미지를 다운로드 하는 ImageDownloader라는 asyncTask가 있었습니다. asyncTask에는 네가지 함수가 오버라이딩 되있었습니다. - onPreExecute() - doInBackground(String... params) -..

    동영상 스플래시 스크린 띄우기 (동영상에 애니메이션 넣기)

    제목은 이렇게 썼지만, 동영상에 애니메이션은 넣을 수 없습니다. 동영상을 띄울 수 있는 뷰는 대표적으로 1. VideoView 2. SurfaceView 3. TextrueView 이렇게 3가지가 있습니다. 모두 애니메이션을 재생할 수 없는 View이지만, 편법이 있습니다. 저는 동영상이 끝나면 알파값이 감소하는 애니메이션을 넣을 것입니다. 하지만 저 View에는 애니메이션을 재생할 수 없으니 Dummy로서 ImageView를 준비해줍시다. 저 dummy 이미지 뷰에다가 video의 마지막 장면을 띄울 겁니다. 그리고 dummy에 알파애니메이션을 적용하면 마치 동영상에 애니메이션을 적용한 것처럼 보입니다. 전체코드는 제 깃허브에서 볼 수 있습니다.

    Firebase를 이용해 FCM 구현하기(웹서버 이용)

    Firebase를 이용해 FCM 구현하기(웹서버 이용)

    구현하려는 것: 내 게시물에 누군가가 댓글을 남기면 나에게 알림이 오게한다. 또, 그 알림을 누르면 해당 게시물로 이동한다. 프로젝트 설정에 대한 자세한 설명은 공식문서를 참고하기 바란다. firebase.google.com/docs/cloud-messaging/android/client?authuser=0 Android에서 Firebase 클라우드 메시징 클라이언트 앱 설정 Firebase 클라우드 메시징 Android 클라이언트 앱을 만들려면 FirebaseMessaging API와 Gradle이 있는 Android 스튜디오 1.4 이상을 사용하세요. 이 페이지의 안내에서는 Android 프로젝트에 Firebase를 추가하는 단 firebase.google.com 만약 A가 B의 게시물에 댓글을 달았..

    애니메이션 월드컵 개인정보 고지사항

    1. 개인정보의 처리 목적 (‘https://blackmanta.tistory.com/’이하 ‘댕글링포인터’) 은(는) 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다. - 고객 가입의사 확인, 고객에 대한 서비스 제공에 따른 본인 식별.인증, 회원자격 유지.관리, 물품 또는 서비스 공급에 따른 금액 결제, 물품 또는 서비스의 공급.배송 등 2. 개인정보의 처리 및 보유 기간 ① (‘https://blackmanta.tistory.com/’이하 ‘댕글링포인터’) 은(는) 정보주체로부터 개인정보를 수집할 때 동의 받은 개인정보 보유․이용기간 또는 법령에 따른 개인정보 보유․이용기간 내에서 개인정보를 처리․보유합니다. ② 구체적인 개인정보 처리 및 보유 기간은..

    브로드캐스트(android studio Broadcast)

    브로드캐스트(broadcast) 는 널리 알리다는 뜻이다. 예를들어, 핸드폰의 설정을 비행기모드로 바꿨을때 android.intent.action.AIRPLANE_MODE 라는 브로드캐스트 메시지가 발생된다. 이 브로드캐스트 메시지를 앱에서 받아서 여러가지 작업을 할 수 있다. 브로드캐스트를 직접 발생시킬 수도 있는데, 그 방법은 아래와 같다. Intent().also { intent -> intent.setAction("com.example.broadcast.MY_NOTIFICATION") intent.putExtra("data", "Notice me senpai!") sendBroadcast(intent) } 여기서 action은 브로드캐스트 메시지를 식별하는 식별자다. 상수를 모아둔 클래스를 만들고..