해당글은 blog.berkberber.com/solid-principles-in-kotlin-4f37e9b62dde SOLID Principles in Kotlin In object-oriented computer programming, SOLID is design principles intended to make software more understandable, flexible and… blog.berkberber.com 의 번역본 입니다. (글쓴이가 화웨이에 다니고 있어서 그런지 화웨이 예제가 상당히 많네요) SOLID ? 객체 지향 프로그래밍에서 SOLID 원칙은 좀더 "이해가능한", "유연한", "유지보수 가능한" 소프트웨어를 만들기 위해 의도 되어진 디자인 원칙이다. SOLID 원칙은 기능 ..
0. 영어 공부하기 - 영어로 된 문서를 볼 일이 많고, 회사에서도 간혹 영어로 커뮤니케이션이 필요한 일이 있다. 영어 문서는 번역기를 돌리기도 하고, 어쩌어찌 코드를 보며 이해할 수 있지만, 영어 스피킹은 너무나도 부족하다. 학원을 다녀서 보완할 수 있도록 하자! 1. 멘토 만들기 - 소프트웨어 스킬 뿐만 아니라 커리어등 좀더 개인에 초점을 맞춘 질문을 할 수 있는 멘토 구하기(지금껏 개발을 하며, 닮고 싶다 느끼는 시니어 개발자가 몇 있었다) - 회사에서 시니어 개발자분들과 소통이 있고, 다양한 이야기를 하는 편이지만 아직 목마름이 있다, 2. 시니어 개발자 혹은 미드 레벨의 개발자가 되기 위한 기초 만들기 - 현재 주관적인 저의 역량은 주니어 개발자, 그리고 주니어 개발자 풀에서 잘하는 편은 아니라..
이제는 코루틴으로 인해, 사용빈도가 적어지는 자주 사용했던 Rx 함수들을 정리하는 시간을 가지려고합니다. 그리고 안녕... 제대로 동작하는 것을 확인하기 위해, 테스크 케이스로 작성하고 딱 20개만 해보려고합니다. 먼저 전체 코드를 링크 걸어두겠습니다 Single, Completable, Observable, Flowable, Maybe 의 목적과 특성은 이미 알고 있을 것이라고 가정하고, 위의 자료형과 상관없이 생각나는 함수 위주로 작성해보겠습니다. 1. Just 함수 /** * Single.just, SingleJust : Single 로 Wrapping 된 아이템을 한번 방출한다. * 특정 아이템을 Single 타입으로 변경하여 체이닝을 이어갈 때 사용하면 유용하겠다. * ex) flatMap 으로..
// dialog 를 프로퍼티(멤버변수)로 선언했다고 가정 dialog?.dismiss() dialog = Dialog() dialog?.show(xxxFragmentManager, dialogTag) 위와 같은 코드가 있다. 대략적인 의미를 보면 1. dialog null 이 아니라면 dismiss 시키고 2. dialog 를 초기화 하고 3. 마지막으로 다이얼로그를 보여준다. 잘 작성한 코드로 다이얼로그가 중복으로 뜨는일은 없을 것 같이 느껴진다. 하지만 Configuration change(퍼미션 변경, 화면 변경, 언어 변경 등), OOM 가 일어나면 문제가 생기게 된다. 보통 안드로이드 이론 공부하면, Configuration change 가 일어나면 액티비티가 다시 시작되는 것을 우리는 알고 ..
Context 와 Uri 를 사용하여, Bitmap 을 가져오는 함수가 deprecated 되어 Replacement 함수로 변경하고 나서 QA 중 에러가 발생했다. 아래와 같이 레거시 방법들을 사용하고 있었고 // (deprecated) BitmapDrawable(context.resources).bitmap // (deprecated) BitmapDrawable( context.resources, MediaStore.Images.Media.getBitmap(context.contentResolver, this) ).bitmap 사용했던 문제의 코드 ImageDecoder.decodeBitmap(ImageDecoder.createSource(context.contentResolver, this)) 에서..
오랜만에 안드로이드 글을 작성하는 것 같습니다. 적당한 퍼포먼스를 가지는 리싸이클러뷰를 만들어 볼 예정입니다. 완성된 소스코드는 맨 아래 링크에 있습니다. 이번 포스팅은 Architecture 등은 제외하고, Recyclerview 구현에만 관심이 있습니다. 4개의 뷰타입을 가지는 리싸이클러뷰 디펜던시는 프로젝트 생성시 추가되어 있는 라이브러리 + Third party (Glide, Recyclerview) 입니다 네트워크에서 가져온다면 (Gson 등이 필요합니다) 먼저 보여줄 Data class 를 명세해줍니다. @Parcelize 어노테이션을 이용하여, 다른 Activity, Fragment 에 아이템을 전달할 일이 있을 때, 쉽게 처리할 수 있도록 추가하였습니다. @Parcelize data cla..
What is Architecture? * 전체적인 시스템 개발에 기반을 제공하는 변경 불가능한 초기 결정사항의 집합 Java, Spring, MySQL, MVC 같은 것이 아닌, 사용법(설계)에 대한 것 What is UseCase ? * 일련의 단계의 집합 * Actor(목적이 같은 클라이언트 집단) 와 시스템의 상호작용을 정의해둔 것들 * Architecture exposes usage (MVVM 을 사용했고, Repository 패턴을 적용했고, 디비는 Room 을 적용했고 같은 것들로 일부가 표현될 수는 있지만 정확하게는 아님 - 전자는 Application 이 어떤 목적으로 만들어졌고 어떤 기능을 하는지에 대해 알려주지 못한다) 클린 코더스 강의에서는 위의 사진 같은 것이 좀더 아키텍쳐에 가깝..
주석 1. 의미 없는 주석은 되도록 작성하지말자 (형식적인 주석) // 의미 없는 주석의 예 /** * Set a configuration property * @param key the property key * @param value th property value */ public void setConfigProperty(final String key, final String value) { // ... } 2. 주석을 읽는 모든 사람들이 감사한 마음을 가질 수 있어야 한다 3. 주석을 함수의 이름에 잘 녹여낼 수 있도록 하자(물론 Assembly 언어는 불가능) 4. 보통의 개발자들이 작성하는 주석은 함수명으로 녹여낼 수 있고, 주석은 작성자의 코드의 표현력이 충분하지 못하다는 반증이 되기도 한다...
이번 시간에는 함수는 어떤식으로 만들어야할까? 에 대한 이야기 입니다 - Arguments - The Stepdown Rule(어떤 순서로 작성할 것인지) - Remove Switch and case - Temporal Coupling (시간, 순서상의 결합도를 어떤식으로 해결할 것인가) - CQS - Tell Don't Ask - Law of Demeter - Early Return - Error handling - Special Case (Null object 패턴 - 수많은 if-else 분기 보다는 특정 문제해결을 위한 클래스를 만들자) - Null is not an error - Null is value - Try 도 하나의 역할/기능이다. 위의 주제들에 대해 이야기를 나눠보겠습니다. * Arg..