본문 바로가기

[클린아키텍처] 4부 : 컴포넌트 원칙 클린 아키텍처에서 실제 아키텍처 장에 들어가기 전에 컴포넌트에 있어 지켜야 할 원칙들에 대해 보이고 있는 장이다. 중요한 개념을 가지고 있으면서, 여러 이 개념을 이해하고 응용하는데 필요한 용어들이 다수 있기에 이를 정리해보고 리마인드 하고 싶은 내용을 마저 정리해보고자 한다! REP : 재사용/ 릴리스 등가 원칙 재사용 단위는 릴리스 단위와 같다. 개발자는 릴리즈 단위를 통해 어느 시점의 컴포넌트를 사용해야 하는지 알 수 있다. 요즘엔 너무도 일반적인 사용 예! CCP : 공통 폐쇄 원칙 동일한 이유로 동일한 시점에 변경되는 클래스를 같은 컴포넌트로 묶어라. 서로 다른 시점에 다른 이유로 변경되는 클래스는 다른 컴포넌트로 분리하라. SRP와 OCP 원칙을 가지고 이 원칙을 적용해낼 수 있다. CRP :..
[클린아키텍처] 3부 : SOLID 원칙 계속 머릿속에 되뇌이면서 코드에 녹여내야 할 중요한 원칙 SOLID에 관한 내용이다. 단순한 코드 차원에서 나아가 전반적인 구조를 어떻게 구성해야 할 지에 대한 내용에 더 가깝다. 기존에 살폈던 내용과 책을 읽고 난 뒤 다시 정리 차 내용을 끄적여 본다. SRP(Single Responsibilty Principle) 단일 책임 원칙 각 모듈은 하나의 구성원에게만 책임을 진다. 유사한 기능을 수행하는 로직이 있을 지라도, 이는 사용하는 대상과 더불어 대상에 따라 다르게 적용될 이후 수정사항들이 존재할 수 밖에 없기 때문에, 이를 분리함으로써 하나의 기능 수정이 모든 모듈에 미칠 수 있는 영향을 제거하는 것이다. OCP(Open Close Principle) 개방 폐쇄 원칙 기존의 코드를 건드리지 않고, ..
[클린아키텍처] 2부 : 프로그래밍 패러다임 우리가 개발자로써 업무를 진행하면서 겪게 되는 다양한 애로사항들, 거기에 있어서 우리가 가져야 하는 자세와 중요한 원칙에 대해 1부에서 짚어 보았다면, 이제 2부에서는 우리에게 익숙한 구조적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍으로 정리되는 패러다음들의 핵심이 무엇인지, 그 이전과 그 이후가 어떠한지 설명하고 있다. 권한의 박탈과 구조적 프로그래밍 각 프로그래밍 패러다임의 핵심을 로버트 C. 마틴은 '권한을 박탈하는 것'으로 시작과 끝을 맺고 있다. 프로그래밍 패러다임이 있기 이전인 1950년대에는 어떤 특정한 원칙 없이, 기능 구현을 위한 방법이 말대로 무궁무진하게 열려 있었기 때문에, 개발자들이 필요 이상으로 복잡한 설계를 만들게 되고, 불필요한 세부사항을 양산하는 일이 만연해 있었다...
[클린아키텍처] 1부 : 클린 아키텍처, 그 첫 장 오랫동안 해야지 해야지 하고 사두고는 고이 꽂아 두었던 로버트 C. 마틴의 클린 아키텍처를 드디어 집어 들었다. 집어 들은데서 더 나아가 펼치기까지 했다(이건 누군가에겐 종종 대단한 일이 되기도 한다.) 아직 실제 클린 아키텍처에 대한 구체적인 내용은 들어가지 않았지만, 클린 아키텍처와 개발이라는 것에 대한 저자의 생각과 개발에 대해 어떠한 마음가짐을 가지고 들어가야 할 지를 흥미롭고, 공감되도록 하면서 경각심을 들게끔 하고 있다. 첫 장을 읽고 나서 내가 중요하게 생각하는 부분들 일부를 조금 정리해두려고 한다. 첫번째는 바로 경각심이다. " 하지만 프로그램을 제대로 만드는 일은 전혀 다르다. 소프트웨어를 올바르게 만드는 일은 어렵다. 소프트웨어를 제대로 만들려면 적정 수준의 지식과 기술을 겸비해야 하지..
[Android/UI-UX] 유동적인 TextView의 사이즈를 제한하고, 정렬까지(with ConstraintLayout) UI 구성을 하면서 때때로 유동적으로 늘어나는 View 때문에 골머리를 앓을 때가 많다. 극단적으로 짧은데서 극단적으로 길어질 수 있는 텍스트를 담는 TextView, 그리고 이 좌측에 붙어야 하는 ImageView까지.. 하드코딩으로 가기 쉬운 요구사항 들이다. 다행스럽게도 안드로이드에는 ConstraintLayout이 있었으니, 이를 이용해 아래 세가지의 요구사항을 모두 충족시킬 수 있었다. TextView는 화면의 우측에 붙는다. TextView는 화면의 중앙 영역까지만 늘어난다 TextView의 좌측에는 아이콘이 들어간 ImageView가 있어야 한다.
[안드로이드] 안드로이드 스튜디오 Gradle build가 먹통일 때! Gradle sync failed: EventQueue.isDispatchThread()=false Toolkit.getEventQueue()=com.intellij.ide.Ide 갑자기 무슨 일일까, Git 브랜치를 변경한 후 제대로 빌드되지 않은 클래스들을 다시 빌드하기 위해 Invalidate Caches and Restart를 해주었는데 웬걸 위와 같은 오류와 함께 그래들 빌드가 전혀 되지 않았다. 위 상황을 해결하기 위해 갖은 노력을 해보았다. Invalidate Caches and restart 반복 : 실패 Android Studio 재시작 : 실패 Project 닫은 뒤 다시 열기 : 실패 아무 SDK 다운받아 설치해보기 : 실패 컴퓨터 재시작 : 실패 그리고 마침내 내가 찾은 솔루션은....
[안드로이드] 람다 Function을 파라미터로 가지는 로직의 Unit Testing! 자바에서 코틀린으로 넘어오면서 람다 식은 이제 부수적으로 쓴다기보단 항상 쓰게되는 부분 중에 하나가 되었다. 람다식을 단순히 이용할 때엔 간결하고 쉽게 사용이 가능하지만, 유닛 테스팅에 사용할 때, 특히 람다 Function을 파라미터로 포함한 function을 테스트해야 될 때는 이를 어떻게 Mock 해야 하는지, 가능은 한지에 대해서 머리를 싸매고 있었다. 결국에 개발이란 안 되는 건 없고, 방법을 찾지 못한 것이라는 말이 사실이었던 걸까, 방법은 있었다. mockito의 when 문을 이용해서 특정 function을 call 할때와, 이를 call 한 경우의 동작을 정의할 수 있는 것이었다. 방식은 아래와 같다. 우선 아래와 같은 클래스와 function을 예로 들어보겠다. class sampleC..
[안드로이드/Firebase] adb를 Android studio 터미널에 설정하기, adb 이용해 Firebase event 디버깅하기 Firebase analytics는 앱으로부터 입력받은 다양한 이벤트를 기반으로 사용자 분석을 돕는 유용한 툴이다. 다만 개발자가 지정한 이벤트가 의도한대로 올바르게 들어오는지에 대해서는 로컬에서 확인하기가 어려울 수 있다. 이를 위해 Firebase는 DebugView라는 기능을 제공한다. adb(Android Debug Bridge)를 이용해 원하는 디바이스를 Firebase Debug View에서 모니터링 할 수 있도록 설정하고 나면, 앱을 실행해 사용하는 중에 들어오는 이벤트를 실시간으로(물론 서버를 거치기 때문에 딜레이가 조금 있다.)확인이 가능하다. 그것도 아주 이쁘게. 그렇다면 우선 adb를 안드로이드 스튜디오에 설정하고, 다음 DebugView에서 기기를 보기 위한 명령어를 살펴보겠다. 1..