클린 아키텍처는 모든 개발자가 관심을 가지고 주목하는 개념이다. 하지만, 다른 개발에 치이고 클린 아키텍처를 구현하는데 들어가는 리소스는 어마한데 비해 앱 사용자 입장에서는 바뀐게 없다고 느끼니 과도하게 시간을 쏟기가 정말 애매한 분야처럼 보인다. 하지만 고객들에게 많은 기능들이 포함된 고품질의 애플리케이션을 제공하기 위해서는 복잡도가 굉장히 높아지게 되고 이에 따라 유지 보수하기 쉬운 코드를 작성할 필요가 생겼습니다. 새로운 기능이 추가되거나 내부 로직이 변경되더라도 유연하게 프로젝트를 관리할 수 있게 구조를 짜야하는 거죠. 클린 아키텍처의 목표 계층을 분리하여 관심사를 분리하는 것!! 클린 아키텍처의 4가지 계층 Entities 엔티티는 비즈니스 규칙을 캡슐화한다. 메서드를 갖는 객체일 수도 있지만 ..
도입 오늘 평소대로 코딩을 하던 도중 선배와 코드 리뷰를 하던 도중 델리게이트 패턴이라는 얘기가 나왔다. 선배가 델리게이트 패턴에 대해 대략적인 설명도 해주시고 델리게이트 패턴을 적용하면 코드 재사용성이 좋아지고 유지보수하기가 쉬워진다라고 말씀하셨지만 직접 정리해보는게 도움이 될거라고 생각하면 오랜만에 블로그 글을 작성하기로 하였다. 델리게이트 패턴이란? Delegate는 위임하다라는 사전적인 의미를 가지고 있는데 이 뜻을 의식하면서 이해해보려고 하였다. 원래 본인이 해야할 작업을 다른 객체에게 자신의 일을 위임하는 패턴이 델리게이트 패턴인 것이다. 그럼 다음 예시를 알아보자! 그럼 어떻게 쓸 것인가? 실생활로 예시를 들어보자. 이제 직장도 구했고 방을 구해야 하는데 전세 대출도 알아봐야 하고 부동산 돌..
RecyclerView의 item에 Custom View를 넣고 싶을 때 이슈 RecyclerView가 10개의 아이템을 가지고 있다고 하였을 때, 0번째 item에서의 Custom View에서 특정 작업을 했던 것이 7번째 item의 Custom View에도 영향을 줍니다. 즉, 별개의 Custom View로 동작해야하는데 서로가 서로에게 영향을 줬습니다. 0번째, 7번째가 서로 영향을 주는 것은 특정 상황에서만 나온 것이고 서로 영향을 주는 객체는 매번 달라졌습니다. 수정 전 코드 지금껏 해왔던대로 RecyclerView의 item 레이아웃(item_layout.xml)에 직접 만든 Custom View를 넣어서 사용함. (저 같은 경우에는 GraphView를 만들었습니다.) RecyclerView ..
하노이의 탑 하노이의 탑이라는 단어는 뭔가 익숙했는데 문제 내용은 굉장히 생소한 내용이었습니다. 재귀 문제를 설명하는 데 있어서 많이 다룬다고 하는데 비전공자여서 그런가 이런 문제가 낯설기만 합니다.. 그래서 가끔 이런 유명한 문제에 대해서는 포스팅을 하면서 깊게 파야겠습니다. 문제 설명 '하노이의 탑'은 프랑스의 수학자 에두아르 뤼카가 1883년 소개한 유명한 문제로 다음과 같이 그림으로 표현할 수 있습니다. 이 문제의 목표는 기둥 A에 쌓여 있는 원판을 기둥 C에 옮겨서 다시 쌓는 것이 목표입니다. 하지만 원판을 옮길 시에는 다음과 같은 두 가지 조건을 만족하면서 옮겨져야 합니다. 한 번에 하나의 원판만 옮길 수 있습니다. 큰 원판이 작은 원판 위에 있어서는 안됩니다. 이 조건에서 '최소의 이동횟수로..
이 요약은 https://youtu.be/Lpieg1zrKdg 다음 영상을 보고 요약한 개념입니다. 여러 개의 루틴을 동시에 실행하여 결과를 내고 싶다면 비동기 처리를 지원하는 코루틴을 사용한다. 코루틴은 메인이 되는 루틴과 별도로 진행이 가능한 루틴으로 코루틴은 개발자가 실행과 종료를 마음대로 제어할 수 있는 단위이다. 코루틴은 제어 범위와 실행 범위를 지정할 수 있다. 코루틴의 Scope GlobalScope 프로그램 어디서나 제어, 동작이 가능한 기본 범위 CoroutineScope 특정한 목적의 Dispatcher를 지정하여 제어 및 동작이 가능한 범위 Coroutine의 dispatcher Dispatcher.Default : 기본적인 백그라운드에서 동작 Dispatcher.IO : 네트워크나 ..
Ch2. 운영체제 개요 운영체제의 역할 1. User Interface (편리성) CUI (Character User Interface) GUI (Graphic User Interface) EUCI (End-User Comfortable Interface) 2. Resource management (효율성) HW resource (processor, memory, I/O devices, Etc.) SW resource (file, application, message, signal, Etc.) 3. Process and Thread management Process : 프로그램 실행의 주체 4. System management (시스템 보호) [색이 칠해진 부분이 OS 층] 운영체제의 구분 동시 사용자 ..
Ch1. 컴퓨터 시스템 개요 컴퓨터의 자원을 효율적으로 관리해서 사용자에게 서비스를 제공하는 소프트웨어 컴퓨터 하드웨어 프로세서 계산하는 역할 CPU GPU 응용 전용 처리장치 등 메모리(Memory) 무언가 저장하는 역할 주 기억장치 보조 기억장치 주변장치 키보드/마우스 모니터, 프린터 네트워크 모뎀 등 프로세서 (Processor) 컴퓨터의 두뇌 (중앙처리장치) 연산 수행하고 컴퓨터의 모든 장치의 동작을 제어함 레지스터 (Register) 프로세서 내부에 있는 메모리 프로세서가 사용할 데이터를 저장 컴퓨터에서 가장 빠른 메모리 레지스터의 종류 용도에 따른 분류 전용 레지스터, 범용 레지스터 사용자가 정보 변경 가능 여부에 따른 분류 사용자 가시 레지스터, 사용자 불가시 레지스터 저장하는 정보의 종류에..
In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. ('변화의 전파와 데이터 흐름'과 관련된 '선언적 프로그래밍' 패러다임이다.) From 위키피디아 변화의 전파와 데이터 흐름 : 데이터가 변경될 때 마다 이벤트를 발생시켜서 데이터를 계속적으로 전달한다. 선언적 프로그래밍 : 실행할 동작을 구체적으로 명시하는 명령형 프로그래밍과 달리 선언형 프로그래밍은 단순히 목표를 선언한다. 명령형 프로그래밍 vs. 선언형 프로그래밍 명령형 프로그래밍 VS 선언형 프로그래밍 명령형 프로그래밍과 선언형 프로그래밍에 대한 비교를 어디선가 한..