Skils

이번 프로젝트를 진행하면서 서버와 안드로이드를 동시에 개발하고 있는데요,사실 안드로이드 개발만 경험해 본 상황에서 가볍게 서버의 코드를 작성하고 있는 상황입니다.과거에 서버 개발자분들에게 무리하게 API를 요구했던 제 자신을 반성하게 되는 것 같습니다. 이번글은 오류 처리에 관한 글인데요,이번 프로젝트를 하면서 api를 처음 연결한 상황에서 에러 처리를 명확하게 짚고 넘어가고 싶어서 초반부에 코드를 굉장히 많이 수정했던 것 같습니다. 우선 제가 고려했던 점은 일괄된 에러처리를 경험해 보자였습니다. 서버개발자와 협업이었다면, 조금 더 수월하게 진행할 수 있었지만, 혼자 했기에 실수할만한 부분을 빠르게 해결했던 것 같습니다. 우선 서버의 응답은 다음과 같습니다. API 성공 시  API 실패 시  성공과 실..
저번 PR에서 흥미로운 리뷰를 받았습니다. 사실 레포지토리 위에 하나의 계층을 두어 DataSource를 적용해 본 적이 없었습니다.상위 계층을 하나 두면 오히려 복잡하지 않을까라는 생각으로 학습을 한 뒤 코드로 적용해 봤습니다. 사실 안드로이드에서 권장하는 DataLayer의 방식은 DataSource -> Respository의 흐름입니다.하지만 굳이? Data Sources까지 만들어야 하는 이유가 뭘까에 대해서 궁금했습니다. 사실 이는 제가 Repository 패턴에 대해서 잘못 해석을 하고 개발을 했던 것 같습니다. Repository는 직접적으로 데이터를 작성하고, 수정하는 형태가 아닌 데이터를 UI layer에 제공하고, UI에서 사용하려는 데이터로 변환하는 mapper 작업을 합니다.Dat..
아래 포스팅과 이어지는 내용입니다. [Android] 자동 로그인 with DataStore(Kotlin)아래 포스팅과 이어지는 내용입니다. [Android] 네이버 간편 로그인(Kotlin)이번 프로젝트에서 네이버 지도 API를 사용하기 때문에 로그인도 네이버 간편 로그인을 사용하기로 했습니다.저는 설정했jja2han.tistory.com 저번 포스팅에서는 DataStore를 이용하면서 자동로그인을 구현해 봤습니다.과정에서 매번 DataStore를 사용하는 곳에서 DataStore를 주입해줘야 하는 상황이 생겼습니다.그 외에도 추후 개발에서 API와 Repository가 많이 생기기 때문에 개발 초반부에 Hilt를 적용하는 것이 생산성에 도움이 될 것이라고 판단하고 적용해 봤습니다. 기존의 코드는 Ap..
아래 포스팅과 이어지는 내용입니다. [Android] 네이버 간편 로그인(Kotlin)이번 프로젝트에서 네이버 지도 API를 사용하기 때문에 로그인도 네이버 간편 로그인을 사용하기로 했습니다.저는 설정했던 과정과 작성했던 코드와 그에 대한 설명을 적어볼까 합니다.앱을 등jja2han.tistory.com어플을 사용하다 보면 어플의 로고가 뜨고 메인화면으로 넘어가는 구조를 보신 적이 있을 것입니다.Android에서는 SplashActivity로 구현합니다.대략적인 구조는 다음과 같습니다.최초 화면 진입점인 Splash Activity에서 자동 로그인을 요청하고, 실패했다면 Login 화면으로, 성공했다면 Main 화면으로 넘어갑니다.자 이제 그럼 궁금증은 자동 로그인을 요청하는 곳은 어디이며, 어떠한 로..
이번 프로젝트에서 네이버 지도 API를 사용하기 때문에 로그인도 네이버 간편 로그인을 사용하기로 했습니다.저는 설정했던 과정과 작성했던 코드와 그에 대한 설명을 적어볼까 합니다.앱을 등록하는 글은 다른 블로그에도 많더라고요. Gradle 설정저는 arr 파일을 다운로드하고 gradle에 추가하는 방법을 선택했습니다.다운로드한 파일을 project 탭으로 전환시켜서 lib 폴더에 복사해 줍니다. 이후 해당 arr 파일을 dependency에 추가해 줍니다.dependencies{ implementation(files("libs/oauth-5.9.1.aar"))} 이후에는 사용하는 라이브러리를 추가해주셔야 합니다.저 같은 경우 안 쓸 거 같은 라이브러리를 제외하다가, gradle 충돌이 많이 발생해서 제공..
Android 개발을 시작한 지 얼마 지나지 않았을 때 BaseActivity, BaseFragment를 생성하고, Activity와 Fragment가 이를 상속받는 코드의 형태를 봤었습니다. 그때 당시는 더 복잡하고, 보는 사람으로 하여금 혼동을 주는 코드라고 생각했지만, BaseActivity와 Fragment를 상속받음으로써 해결되는 다양한 장점들이 있었습니다. 왜? AppCompatActivity, Fragment가 아닌 BaseActivity, BaseFragment를 상속받는 것은 중복된 코드의 발생을 줄일 수 있습니다. 뭐 얼마나 코드의 중복이 발생하길래 복잡한 구조(BaseActivity와 BaseFragment)를 택하는걸까라고 생각하실 수 있습니다. class TestActivity :..
프로젝트에서 Network 연결 상태에 따라 API 동작 및 화면을 갱신해야 했습니다. 여러 가지 방법이 있지만, 저는 공식문서에 나와있는 ConnectivityManager를 통해서 해결했습니다. 네트워크 상태 읽기 | Connectivity | Android Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 네트워크 상태 읽기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android에서는 앱이 연결의 동적 변 developer.android.com 설명하기 전 네트워크 사용을 위해선 안드로이드 매니페스트에 다음 권한을 포함해야 합니다. 해당 권한은 음악, 갤러리 접근과 달리 일반권한이기 때문에 런타임에 요청할 필요가 없습..
· Skils/Kotlin
Contract 1.3.60 버전부터 사용되었으며, 컴파일러가 이해할 수 있게 명시적으로 자신의 동작을 설명할 수 있게 한다. 컴파일러가 이해할 수 있게 라는 말이 조금은 헷갈릴 여지가 있다고 생각한다. 코드를 통해 살펴보자 회원가입을 구현하려고 할 때의 시나리오를 생각해 보자. @JvmInline value class Password(val password: String) @JvmInline value class Id(val id: String) fun validate(id: Id?, password: Password?): Boolean { return id != null && password != null } fun signUp(id:Id?, password: Password?){ if(validat..
· Skils/Kotlin
등장 배경 원시타입과 문자열을 wrapping 하기 위해 사용했던 데이터 클래스와 클래스는 추가적인 객체 생성과 메모리 할당이 필요했다. 하지만 value class가 추가되면서, 객체 생성 및 메모리 할당을 최소화하고 성능을 개선할 수 있게 되었다. kotlin 1.5에서는 inline class로 사용되었지만, 현재는 Deperecated 되었다. 현재 1.6에서는 value class로 사용하고 있다. 정의 primitive 타입이나, 다른 value class를 감사는 wrapper 클래스로서의 역할을 할 수 있다. 특징 상속이 불가능하다 @JvmInline value class Email(private val email:String) value class SchoolEmail(private va..
재한
'Skils' 카테고리의 글 목록