분류 전체보기

    [Kotlin] if, require 메서드를 활용해 메서드 실행 제한하기

    블록이 실행되지 말아야 할 때의 Best Practice Kotlin에서는 if-else 문으로 코드 블록을 실행할지 결정한다. 하지만 if-else 문을 중첩해서 쓰면 블록이 계속 블록이 중첩되기 때문에 가독성이 떨어진다. 특히 오랫동안 유지보수된 레거시 코드들을 보면 이러한 상황이 매우 잘 나타난다. 보통 이러한 코드들은 null이 아님을 확인하기 위해 1번 if 문을 쓰는 것을 기본으로 한다. 예를 들어 다음 코드와 같이 사용된다. fun blockExecuteExample(apple : Apple?) { if (apple != null) { if(apple is Fruit) { eat() } } } 여기서 끝나면 괜찮겠지만 보통 이런 코드들은 if문을 여러 번 중첩한다. if 문을 여러 번 중첩하..

    [Kotlin] 변수의 변경 가능 지점 최소화를 통한 코드 안정성 증대 전략

    변수의 변경 가능 지점을 최소화 해야 하는 이유 프로그래밍을 하다보면, 이곳 저곳에서 변수의 값이 변화되는 것을 볼 수 있다. 코드의 양이 작을 때는 이런 것이 문제가 안되지만 코드의 양이 많아질 수록 문제가 된다. 특히 특정 클래스에 속한 변수가 외부에서 직접 접근된 다음 수정되면 해당 클래스 상태(State)의 변경 가능 지점이 늘어나기 때문에 문제가 생긴다. 예를 들어 ExampleView와 ExampleView의 데이터를 저장하는 ExampleViewModel이 있고 ExampleViewModel의 viewData는 서버에서 가져온다고 해보자. 이때 viewData는 초기화 시 한 번만 가져오고 이후에 바뀌면 안된다. 그러면 다음과 같이 코드가 만들어질 수 있다. class ExampleView(..

    [Android Datastore] 5. Shared Preferences를 Datastore로 Migration하기

    Shared Preferences와 Datastore Shared Preferences를 Datastore로 Migration 하기 위해서는 Datastore가 저장되는 공간에 Shared Preferences가 저장했던 정보를 다시 저장해야 한다. 이 뜻은 Shared Preferences를 Datastore로 이전 저장하기 위해 Migration 용 스펙을 정의해놓은 객체가 필요하다는 뜻이다. Shared Preferences를 Datastore로 이전하는 작업은 보통 두가지 상황의 경우에 고려된다. 첫 째, Shared Preferences가 새로 만들 Datastore과 Dependency가 있어 같이 작업하는 것이 좋은 경우. 둘 째, Datastore에서 제공하는 Coroutines, Flow..

    [Android Datastore] 4. Proto Datastore 사용 방법 한 번에 정리하기

    환경세팅 안드로이드에서 Proto Datastore을 사용하기 위해서는 Type Safety를 위한 처리를 해주어야 하기 때문에 Preference Datastore보다 복잡하다. Gradle 파일 세팅 1. 모듈 수준의 gradle 파일에 플러그인을 추가한다. plugins { .. id("com.google.protobuf") version "0.8.17" } 2. 모듈 수준의 gradle에 라이브러리를 추가한다. 하나는 datastore 라이브러리이고 다른 하나는 protocol buffer을 위한 java 라이브러리이다. dependencies { .. implementation("androidx.datastore:datastore:1.0.0") implementation("com.google.p..

    [Apollo GraphQL] 2. Android에서 Apollo GraphQL 사용 방법 한 번에 정리하기

    환경 세팅 Apollo GraphQL을 사용하기 위해서는 gradle에 설정과 GraphQL에서 사용할 수 있는 schema를 Apollo GraphQL을 사용해 받아올 수 있도록 하는 작업을 해야 한다. Gradle 파일 세팅 1. 모듈 수준의 Gradle에 plugin을 적용한다. plugins { .. id("com.apollographql.apollo3").version("3.1.0") } 2. 모듈 수준의 Gradle의 android 블록에 패키지 이름을 세팅한다. android { .. apollo { packageName.set("com.simpli.graphql") } } 3. 모듈 수준의 main 디렉토리에 graphql 디렉토리를 만든 후 2에서 설정한 패키지명의 폴더들을 만든다. 4...