개발

개발

클린 아키텍처와 SOLID

클린 아키텍처는 이제 안드로이드 진영의 많은 기업들이 선호하는(?) 아키텍처가 되었다. 내가 이 책을 읽었던 작년 이 맘 때와 비교해보면, 이제는 상당히 많은 기업들의 채용 공고 우대 사항에 들어가 있는 것을 보면서 느끼고 있다. 선호한다기보다는 구조적 이해도를 가진 개발자를 원하는 느낌이라 해야할까? "클린 아키텍처를 실무에 적용해 본 적이 있나요?"라는 부분보다, "아키텍처의 중요성과 그에 대한 이해도를 가지고 있나요?"라는 의미에 더 가깝다고 생각한다. 오늘은 아키텍처 설계에서 SOLID 원칙의 역할과 중요성에 대해 알아보고자 한다. Single Responsibility Principle여러 블로그 포스팅에서는 단일 책임 원칙을 "클래스/모듈은 단 하나의 책임만 가져야 한다"고만 설명하고 있다. ..

개발/Kotlin

[Kotlin] 타입 소거와 Star projection

제네릭은 제대로 알고 사용해야 한다… ✔️ 제네릭은 Java 5에서 처음으로 도입된 개념이다. Java는 초기 개발 단계에서 제네릭을 고려하지 않았다. 제네릭 도입 전의 컬렉션은 타입 안전성을 제공하지 않았기 때문에 런타임 에러(ClassCastException) 발생 위험이 높았는데, 이후 제네릭이 도입되면서 기존의 컬렉션 클래스와 인터페이스를 타입 안전하게 만들기 위해 제네릭 타입 파라미터를 추가하게 된다. 그로 인해 제네릭이 없던 버전의 코드와 제네릭이 도입된 이후의 코드의 호환성을 유지해야 하는 문제가 발생하게 되는데, 여기서 오늘의 주제 중 하나인 "타입 소거"를 Java 5(1.5)에서 도입하게 된다.타입 소거 제네릭 타입 정보를 컴파일 타임에만 유지하고, 런타임에는 제거하여 원시 타입(raw..

개발/Android

[안드로이드] RecyclerView는 어떻게 동작할까?

개요 평소 당연한 듯 ViewPager와 RecyclerView를 사용해왔는데, 이번 기회에 내부 코드를 읽고 동작 원리를 파악하기 위해 포스팅을 남긴다. 1편은 우선 Recycler 클래스에 대해 알아보고, 2편에서는 RecyclerView의 Animation 처리에 대해 알아볼 예정이다. 그 다음은 ViewPager나 Proto datastore에 대해 포스팅하려 한다. 메인 키워드ViewHolderRecyclerscrap/unscrapRecycledPoolView와 ViewHolder의 관계RecyclerView는 화면에 보여지는 항목 개수만큼의 View와 ViewHolder를 생성한다. 이 때 각각의 View는 ViewHolder와 1:1의 관계를 가지게 되는데, 화면에 6개의 아이템이 보여진다면..

개발/트러블슈팅

[안드로이드] 안드로이드 스튜디오 PluginException

안드로이드 스튜디오 Giraffe patch3로 업데이트 후, 설정에서 experimental 기능인 new UI를 적용하다가 발생한 문제이다. 그 순간에 내 안드로이드 스튜디오는 Plugin들을 업데이트 중이였고,(Dracula, Material icon 등) 업데이트 중에 IDE가 재시작되면서 이 예외가 발생했다. 안드로이드 스튜디오를 근 3-4년간 사용하면서 윈도우 시스템 팝업으로 예외를 뿜어내는 경우는 처음이라, 계속 검색해봤지만 일반적으로 경험해보기 힘든 IDE 오류라서 해답을 찾기가 어려웠다. Plugin 업데이트 중설정 - new UI 적용안드로이드 스튜디오 재구동예외 발생 팝업 출력된 후 안드로이드 스튜디오 진입 불가 오류 메시지com.intellij.diagnostic.PluginExce..

개발/Android

[안드로이드] EXTRA_PICK_IMAGES_MAX 사용 시 주의할 점

개발을 하다 보면 이미지 업로드를 위해 갤러리 사진 선택 기능을 사용하는 경우가 있다. 내가 구현하고자 했던 기능은 이미지를 최대 N장 선택 및 리사이클러뷰에 추가, 이후 서버에 업로드하는 기능이였는데, Tiramisu 이상에서 추가된 MediaStore.ACTION_PICK_IMAGES의 MediaStore.EXTRA_PICK_IMAGES_MAX라는 Intent extra를 설정하다 문제에 직면했다. 트러블 val maxPhotoCount = MAX_PHOTO_COUNT - currPhotoCount val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply { putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotos..

개발/트러블슈팅

[안드로이드] Jetpack compose dependency 설정

xml과 같은 dsl은 숙련도가 아무리 올라도 복잡한 구조의 ui에 대해서는 개선의 한계가 있다. 볼수록 어질어질 그래서 gpl인 kotlin 기반의 compose를 사용하는 것이 훨씬 개발이나 유지보수 측면에서 큰 이점을 가지는 것 같다. 재사용적인 측면이 특히! 오늘은 Jetpack compose를 시작하는 사람들이 dependency 설정하는 데에 조금이나마 도움이 될 수 있는 gradle 설정에 대한 포스팅이다. jdk / gradle / androidx activity / compose compiler / material3 -> 이 5개가 오늘의 핵심 멤버이다. 1. jvmTarget / compileOptions는 jdk 버전이랑 맞추자! 예전에 jdk11버전을 사용하면서 jvm/compile..

개발/스크랩

[안드로이드] Medium 포스팅 스크랩 - 7월 1주차

6월에 3주간 매주 스크랩 글을 적어봤는데, 미디움에서 Daily digest 메일이 매일 오전 07:40에 와서 일주일에만 해도 40개를 읽어야하고 이걸 또 정리해서 글로 적기에는 퀄리티가 점점 낮아질 것 같아서 앞으로는 한달에 1-2개 정도 포스팅하려고 한다. 대신 정말 도움이 되는 포스팅들로만 추렸다. 🎈 UI/UX 버튼 스타일 가이드 여러 플랫폼들을 예시로 들어 버튼 스타일 케이스 스터디를 하는 느낌으로 작성된 글이다. 버튼 스타일도 스타일인데, 각 유명 플랫폼들이 간단하게 색만 이용해서 어떻게 사용자들의 반응을 이끌어내는지 보여서 좋았다. User interface — button styles The style of UI buttons is the result of a careful balanc..

개발/Kotlin

[Kotlin] 테스트 코드 (2) - TDD/BDD와 디자인 패턴

앞선 포스팅에서는 테스트 코드란 무엇이며 왜 작성하고, 그 종류는 어떤 것들이 있는지 간단히 알아보았다. [Kotlin] 테스트 코드 (1) - 테스트 코드란? 오늘 포스팅할 내용은 "테스트 코드 작성"에 관한 이야기이다. 안드로이드 단톡방에서 사람들이 메서드 하나 추가될 때마다 적는다던 테스트 코드, 정보처리기사 공부하다 봤던 TDD, 여러 채용 work2type.tistory.com 하지만 기본적인 내용들만으로 효율적이고 생산적인 테스트 코드를 작성할 수 있다면 좋겠지만, 테스트 코드는 작성부터 유지보수까지 적지 않은 비용이 들어가는 중요한 요소이다. 그렇다면 우리가 테스트 코드 작성에 대해서 더 공부할 수 있는 것들은 어떤 것들이 있을까? 개발방법론 - TDD와 BDD TDD "테스트가 개발을 주도..

개발/Kotlin

[Kotlin] 테스트 코드 (1) - 테스트 코드란?

오늘 포스팅할 내용은 "테스트 코드 작성"에 관한 이야기이다. 안드로이드 단톡방에서 사람들이 메서드 하나 추가될 때마다 적는다던 테스트 코드, 정보처리기사 공부하다 봤던 TDD, 여러 채용 공고들에 숱하게 적혀있던 "테스트 코드 작성 경험이 있으신 분" 등 안드로이드 진영에서의 테스트 코드 작성의 중요성은 날이 갈수록 커지고 있다. "테스트 코드"를 실무에서 작성해 본 경험이 없어 이에 대한 지식이 전무한 사람들도 꽤 많을 것이라 생각되는데, 이번 "테스트 코드" 시리즈 포스팅을 읽은 뒤에는 테스트 코드 작성의 중요성과 작성 방법, 다른 여러 정보들을 알고 갈 수 있었으면 좋겠다. 테스트 코드란? 소프트웨어의 기능과 동작을 테스트하는데 사용되는 코드 테스트 코드는 비단 spring, android에서만 ..

개발/Kotlin

[안드로이드] 테스트 코드 - JUnit의 예외 처리 (expected, assertThrows, doThrow)

우리가 작성해야 하는 테스트 코드 비단 성공하는 케이스뿐만이 아니다. 실패하는 케이스와 발생할 수 있는 여러 예외들에 대한 처리 또한 테스트가 분명 중요한 부분인데, 오늘은 JUnit와 Mockito를 사용한 테스트 코드 작성 시에 사용 가능한 예외 처리 기법에 대해 비교해보고자 한다. ✔️ @Test @Test(expected = NumberFormatException.class) public void CalculateValues_test() { . . . } Test 어노테이션의 expected를 사용한 예외 처리는 JUnit 프레임워크 자체에서 지원하는 예외 테스트 방법이다. 어노테이션에 미리 지정해둔 예외가 해당 테스트 메서드에서 발생하면 테스트가 성공한 것으로 간주하는데, 여기서 문제가 발생한다..

최선의 최선
'개발' 카테고리의 글 목록