안드로이드 앱개발

    Permission

    매니페스트에 이렇게 써놓고 코드에서 이렇게 가져올 수 있다. PackageInfo packageInfo = packageManager.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);

    Dagger2 Scope

    # @Scope @Scope //스코프임을 알린다. @Retention(value = AnnotationRetention.RUNTIME) //이 주석은 런타임동안 유지된다. annotation class ActivityScope When a type is marked with a scope annotation, it can only be used by components that are annotated with the same scope. @Scope라고 붙인 타입은 같은 스코프를 가진 컴포넌트에서만 사용될 수 있다. When a component is marked with a scope annotation, it can only provide types with that annotation or ty..

    클린아키텍쳐에서의 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의 게시물에 댓글을 달았..

    브로드캐스트(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은 브로드캐스트 메시지를 식별하는 식별자다. 상수를 모아둔 클래스를 만들고..