본문 바로가기

분류 전체보기

(57)
코틀린(Kotlin) - 리팩토링 : 로컬 함수와 확장 함수로 코드 중복 없애기 우리가 생각하는 좋은 코드의 중요한 특징 중 하나가 "중복이 없는 것" 이라고 생각합니다. 흔히 "두번 이상 반복적으로 사용되는 로직은 따로 빼서 재활용할 수 있도록 해라."라는 말도 있죠 ㅎㅎ 그래서 리팩토링을 통해, 긴 메소드를 부분 부분 기능을 나눠서 따로 떼어내는 작업을 하게 되는데, 하지만 그렇게 코드를 리팩토링 하게 되면, 클래스 안에 작은 메소드들이 너무 많아지게 되고, 각 메소드 사이의 관계를 파악하기가 쉽지가 않아서, 오히려 코드를 이해하기 더 어려워지는 상황이 발생하게 됩니다... 그렇다고, 따로 떼어낸 메소드들을 모아서 내부 클래스(inner class) 안에 넣자니, 코드는 깔끔해지긴 하는데 그에 따른 불필요한 작업들이 늘어나게 됩니다. 하지만 우리에겐 코틀린이 있고, 코틀린에는 더..
코틀린(Kotlin) - 확장 함수 만들기 자바 컬렉션에는 디폴트 toString()이 구현되어 있습니다. 하지만, 그 디폴트 toString()의 출력 형식은 고정되어 있기 때문에, 우리에게 필요한 형식이 아닐 수도 있습니다. val list = listOf(1, 2, 3) >>> println(list) //디폴트 toString() 호출 [1, 2, 3] 위의 디폴트 구현과 달리, 우리 입맛대로 toString()을 커스텀 하고 싶다면 어떻게 해야 할까요? 코틀린에는 이런 요구 사항을 처리할 수 있는 함수가 표준 라이브러리에 이미 탑재 되어 있습니다! 확장함수(Extension Function) 라고 하며, 마치 기본 클래스에 정의된 함수인 것처럼 새로운 기능을 추가하는 기능입니다. 우선 먼저, 알고가야할 개념으로는 "코틀린에서는 함수를 클..
기존 레이아웃을 데이터바인딩 레이아웃으로, 한방에 자동 변환하기! 기존 레이아웃을 데이터 바인딩으로 변환하려면, 최상단 루트(Root)를 태그로 감싸야합니다. 또한, 네임 스페이스 정의 (xmlns:로 시작하는 속성 예) xmlns:android, xmlns:app...)도 루트로 이동해야 합니다. 수동으로, 잘라내기(복사)+붙여넣기 해도 그리 복잡한 작업은 아니지만, 여러 xml파일들을 일일이 작업한다면 상당히 번거로운 작업이 될 수 있습니다. 그래서, 안드로이드 스튜디오는 이런 작업을 자동으로 수행해주는 편리한 기능을 제공해줍니다! 방법 1. 변환하기 전의 기존 레이아웃 루트에 커서를 위치시키고 2. ⌥(option) + Enter 키 (Alt + Enter for Win/Linux) 입력 후, "Convert to data binding layout" 선택 3. ..
코틀린(Kotlin) - 컬렉션 만들기 코틀린에서는 단순하게 컬렉션을 만들 수가 있습니다. val set = hashSetOf(1, 2, 3) val list = arrayListOf(1, 2, 3) val map = hashMapOf(1 to "one", 2 to "two", 3 to "three") 코틀린은 자신만의 컬렉션 기능을 제공하지 않는다는 것이 특징인데, 이유는 표준 자바 컬렉션을 활용하면 자바 코드와 상호작용 하기가 훨씬 더 쉽기 때문에, 서로 변환할 필요가 없어서 코틀린 컬렉션은 자바 컬렉션과 똑같은 동일 클래스를 사용합니다. 하지만, 코틀린에서는 자바보다 더 많은 기능을 쓸 수 있습니다. 예를 들어, 리스트의 마지막 원소(last)를 가져오거나, 수로 이뤄진 컬렉션에서 최댓값(max)을 찾을 수 있습니다. val list =..
AndroidX 로 마이그레이션 하기 개요 구글에서는 Android Support Library의 28.0.0 버전을 마지막으로, 더 이상 android.support 라이브러리의 릴리즈는 없을 것이라고 하며, 새로운 기능 개발은 모두 AndroidX 에서 이루어질 것이라고 하였습니다. AndroidX는 기존 Support 라이브러리를 완전히 대체하면서, 새롭게 추가되는 라이브러리들 까지 포함하고 있습니다. 이에 따라, 저희도 기존 support 라이브러리를 AndroidX로 마이그레이션하는 작업을 해야 합니다. 다행스럽게도, 안드로이드 스튜디오의 Refactor 기능을 사용하면, 간편하게 마이그레이션 작업을 진행 할 수 있습니다. 그렇다면, 지금부터 AndroidX로 마이그레이션하는 방법과 더불어, 이전하는 과정에서 겪을수있는 에러의 해결..
안드로이드 MVVM 아키텍처 (Android Apps Using MVVM Architecture) "아키텍처" 라는 주제는 사실 쉽게 이해하기도 힘들며, 완벽한 답안이 있는 게 아니다 보니 어떤 원칙대로 설계를 해야 하는지에 대한 모호함과 어려움이 있어서 쉽게 놓치곤 합니다. 하지만, 안드로이드 프로젝트에 적합한 아키텍처를 정의하지 않으면 코드 베이스가 커지고 팀이 확장됨에 따라 유지보수가 어려워집니다. (유지보수 : 유지하고 보수하는 것뿐만이 아니라, 가독성, 테스트, 기능 추가, 변경, 삭제, 버그 수정, 인수인계...) 그렇기 때문에, 괜찮은 방식의 아키텍처를 정하는 것에 대해 고민할 수밖에 없고 좋은 아키텍처는 개발자에게 명확한 프로젝트 가독성과 더 큰 효율과 생산성을 가져다준다고 생각합니다. 여기서 설명드릴 MVVM 아키텍처는 우리에게 가장 좋은 래퍼런스가 되는 Google Android A..
코틀린 전환과 같이하면 좋은 선행작업! 코틀린 전환의 선행작업 코틀린 전환을 시작하면서, 코틀린 전환에 효과적인 선행작업은 무엇이 있을까? 라는 생각을 해보았습니다. 단순히 자바를 코틀린으로 바꾼다면 그저 문법 변환에 그치고, 결과적으론 기존 래거시와 동일한 프로젝트 구조에 문법만 코틀린인채로 남을 것 같다는 생각이 들었습니다. 그렇기 때문에, 코틀린 전환을 하기에 앞서, 아키텍처를 선정하여 잡아놓고 시작한다면, 구조적으로 유리할뿐만 아니라, 유지보수와 테스트에도 용이하며, 코틀린 언어의 특성을 최대한 활용할 수 있고, 결과적으로는, 앱의 구조가 튼튼해져서 훨씬 더 성공적인 코틀린 전환이 될 수 있을것 같다고 생각하였습니다. 그럼 아키텍처 정의에 앞서, 코틀린 전환과 아키텍처 선정에 큰 도움이 될 수 있는 AndroidX 라이브러리를 먼저 살..
기기 및 네트워크 악용 정책 위반 : 구글 플레이 스토어 앱 거부 해결 방법 문제 발생 구글 플레이 스토어에 앱을 업데이트하는 과정에서, 아래와 같은 리젝(reject) 메일을 받았습니다. 게시 상태: 거부됨 앱이 정책 위반으로 거부되어 게시되지 않았습니다. 기존 앱의 업데이트를 제출하신 것이라면 이전에 게시된 버전은 Google Play에서 사용자에게 계속 제공됩니다. 문제: 기기 및 네트워크 악용 정책 위반 사용자의 기기, 기타 기기 또는 컴퓨터, 서버, 네트워크, 애플리케이션 프로그래밍 인터페이스(API), 서비스(기기에 설치된 기타 앱, Google 서비스, 승인된 이동통신사 네트워크를 포함하나 이에 국한되지 않음)를 방해하거나, 작동에 지장을 주거나, 손상시키거나, 무단으로 액세스하는 앱은 허용되지 않습니다. 앱이 서비스 약관을 위반하는 방식으로 서비스 또는 API에 액..