아래 내용은 조영호 님의 "객체지향의 사실과 오해"를 읽고 공부한 내용을 개인적으로 정리하였습니다. 3장. 타입과 추상화 추상화 현실은 복잡하고 혼돈의 덩어리이다. 이를 이해하기 위해 인간이 지니고 있는..
AAC ViewModel이란? 우리는 안드로이드 앱을 설계할 때 MVVM 패턴을 많이 사용합니다. 오늘은 이 MVVM 패턴에서 빠질 수 없는 요소인 ViewModel을 쉽게 구현해주는 AAC의 ViewModel에 대해 알아보려고 합니다. AAC..
일반적으로 안드로이드에서 URL로 이미지를 표시할 때 Glide라는 오픈소스 라이브러리를 많이 사용합니다. 이번에는 Glide를 사용하지 않고 URL 이미지를 표시해보려고 합니다. 일단 URL 이미지는 네트워크 통신을..
개인 프로젝트를 하던 중, 리스트의 아이템을 삭제하고 변경 사항을 Room에 저장하기 위해 ViewModel을 사용해야 했다. 처음에는 ViewModel의 인스턴스를 adpater 생성 시에 같이 넘겨주려고 생각을 했었다. 하지..
아래 내용은 조영호 님의 "객체지향의 사실과 오해"를 읽고 공부한 내용을 개인적으로 정리하였습니다. 2장. 이상한 나라의 객체 Section 1 - 인간의 인지 능력 인간은 본능적으로 세상을 독립적이고 식별 가능..
아래 내용은 조영호 님의 "객체지향의 사실과 오해"를 읽고 공부한 내용을 개인적으로 정리하였습니다. 1장. 협력하는 객체들의 공동체 Section 1 객체 지향의 목표는 실세계의 모방이 아니라 새로운 세계를 창..
옛날에 진행되었던 프로젝트를 수정해야 할 일이 있어서 빌드를 하는데 다음과 같은 오류가 나왔다. (일부만 가져왔다.) > No cached version of com.android.tools.build:gradle:4.1.0 available for offline mod..
우리는 ListAdapter를 통해 효과적으로 RecyclerView의 데이터를 갱신할 수 있다. 그리고 새로운 데이터를 갱신할 때 submitList() 이용한다. 하지만 분명 데이터는 변경이 되었지만 실제적으로 RecyclerView에 갱..
예전부터 객체지향 프로그래밍에서는 DI를 잘 사용해야 한다는 말을 들어서인지 이번에 진행하는 새로운 프로젝트에 적용해보고 싶어서 정리를 하게 되었다. 기본에 충실하고자 이번 포스팅은 안드로이드 공식 홈..
토이 프로젝트를 진행하면서 Android Navigation을 사용했는데 하나의 Activity에 여러 개의 Fragment가 종속되다 보니 데이터를 같이 공유할 필요가 있어서 방법을 찾아보았다. 찾아보니 ViewModel을 통해 Activi..
그동안 조금 공부를 게을리했던 것 같아서 다시 의지를 불태우기 위해 오랜만에 책상에 앉아서 프로그래머스를 들어갔다. 새로운 문제를 풀기보다는 예전에 풀어봤던 정확히는 눈으로 보았던 카카오 인턴십 문제를..
새로운 프로젝트를 하면서 실시간으로 갱신되는 데이터 처리가 필요해서 Web Socket 위에서 동작하는 문자 기반 메세징 프로토콜인 STOMP 를 사용했습니다. 이번에는 이 STOMP 를 프로젝트에 적용하면서 공부했던..
1월 중순이 다되어가는 시점에 하반기 회고를 작성한다. 원래는 1월 초에 쓰려고 했는데 솔직히 귀찮아서 작성을 미루고 있다가 정신 차리고 컴퓨터 앞에 앉았다. 정리하다 보니 내용이 크게 없는 것 같아서 앞으..
내 앱에서 다른 앱의 활성화시키려고 할 때 그 앱이 현재 디바이스에 설치가 되어있는지 확인할 필요가 있습니다. 이번에는 PackageManager 를 통해 설치 여부를 확인하는 방법을 알아보겠습니다. 아래의 방법을..
안드로이드 공식 문서에서 Fragment의 View Binding 사용에 대하여 다음과 같이 샘플 코드를 제공하고 있습니다. private var _binding: ResultProfileBinding? = null // This property is only valid between on..
오늘은 Kotlin의 지연 초기화에 대해 알아봅시다. 초기화라는 말은 익숙하게 들어서 쉽게 이해할 수 있지만 지연(Lazy) 같은 경우는 프로그램에서는 기존과 다르게 다음과 같이 해석됩니다. 프로그램에서 Lazy 는..
Android 개발에서 가장 많이 쓰는 라이브러리라고 하면 Retrofit 은 빠질 수 없을 겁니다. 이번에는 이 Retrofit 이 정확히 무엇인지 정리해보려고 합니다. Retrofit 홈페이지에 가면 Retrofit 을 다음과 같이 정..
이번 시간에는 DFS 에 이어 또 다른 그래프 탐색 방법인 BFS 에 대해 정리해보려고 합니다. BFS 너비 우선 탐색(Breadth-First Search) 정의 : 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼..
DFS 는 그래프(Graph)를 탐색하는 방법입니다. 그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조를 말합니다. 코딩 테스트에서 BFS 와 단골로 나오는 개념입니다. DFS 깊이 우선 탐색..
큰 수 만들기 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24]를 만들 수 있습니다. 이 중..
현재 제가 가장 재미있어하고 좋아하는 언어는 Kotlin 입니다. 사실 Kotlin 을 접한지는 1년도 되지 않았지만 처음 사용할 때 묘한 매력을 느꼈습니다. 그래서 개인 프로젝트를 진행할 때 웬만하면 kotlin 과 jav..
최근에 사이드 프로젝트를 하면서 백을 구축해야 할 일이 생겨서 AWS를 사용하게 되었습니다. 이미 설정이 되어있는 AWS는 많이 사용해보았지만 직접 설정을 해본 경험은 없었기 때문에 구글링을 통해 하나하나 찾..
코딩 테스트에서 정렬 문제는 자주 나옵니다. 하지만 보통 정렬 같은 경우에는 언어에 내장된 함수를 사용합니다. 그래서 개인적으로 정렬 알고리즘을 까먹는 부분이 있어서 이번 기회에 알면 좋을 4가지 정렬 알..
Stack 과 Queue 는 코팅 테스트에서 심심치 않게 나오는 친구들입니다. 가끔 풀다 보면 까먹는 경우가 있어서 Stack 과 Queue 의 간단한 개념만 잡고 JAVA에서 어떻게 사용하는지 정리해보려고 합니다. 간단 개념..
regsvr32 는 Windows에서 사용할 수 있는 명령 줄 도구입니다. DLL 파일 및 ActiveX 컨트롤, OCX파일과 같은 개체 연결 및 포함(OLE) 컨트롤을 등록하고 취소하는 데 사용합니다. regsvr32 가 DLL 파일을 등록하면..
일반적으로 코딩 테스트나 프로그래밍에서 리스트를 다룰 때 삭제와 삽입이 용이하고 동적으로 크기를 정할 수 있는 ArrayList 를 많이 사용합니다. 하지만 필요에 따라 ArrayList 를 Array 로 변환해야 할 때가..
JAVA를 처음 접하면 문자열이 같은지 비교할 때 if(A == B) 이렇게 하는 경우가 있습니다. 하지만 이는 의도한 대로 안 나올 가능성이 큽니다. 그 이유를 한 번 알아보겠습니다. == 연산자 참조 비교를 통해 두 문..
윈도우 프로그램을 만들 때 설치되는 컴퓨터가 실행 가능한 Window 버전인지 확인해야 할 때가 있습니다. 이를 위해서 C#에서는 System.OperatingSystem 을 통해서 현재 컴퓨터의 Window 버전을 알 수 있습니다. S..
메모리 관리 는 컴퓨터 시스템에 있어서 매우 중요합니다. 왜냐하면 CPU가 작업을 하는 곳이 메모리이기 때문입니다. 이 메모리를 어떻게 관리하느냐가 결국 컴퓨터 성능에 막대한 영향을 미치게 됩니다. 이번에는..
교점에 별 만들기 문제 설명 Ax + By + C = 0 으로 표현할 수 있는 n 개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리려 합니다. 예를 들어, 다음과 같은 직선 5개를 2x - y + 4 = 0 -2x - y + 4..
Splash 화면이란? 앱을 실행할 때 보여주는 시작화면을 말합니다. 짧게는 1초에서 길게는 5초까지 보여줍니다. 보통 앱 실행 시 앱의 정체성을 보여주거나 필요한 데이터를 로딩하기 위해 사용합니다. 하지만 의도..
데드락(Dead lock, 교착 상태)이란? 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태 보통 한정된 시스템 자원을 여러 곳에서 동시에 사용하려고 할 때..
API를 만들다가 응답 값으로 내가 원하는 데이터만 뽑아서 원하는 JSON 데이터로 반환을 해야 했는데 처음에는 헤매다가 여기저기 찾아서 해결을 했습니다. 제가 한 방법보다 더 좋은 방법이 있을 것 같은 느낌이..
이번에는 단순한 API를 만드는 것이 아닌 기기별 업데이트 버전을 관리할 수 있는 기능을 작업하게 되었습니다. DB를 새롭게 생성하고 필요한 Service와 Repository를 만들면서 추가적으로 공부했던 내용을 정리하..
최소직사각형 문제 설명 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을..
최근에 업무상 필요한 API를 만들게 되었습니다. API 자체는 간단히 조회를 통해서 특정 주문 데이터를 가져오는 것인데 문제는 Spring에 대해서는 완전 기초적인 것만 알고 있는 상태였습니다. 이번에 API를 만들..
베스트 앨범(Level 3) 문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다...
앞서 프로세스 개념과 스케줄링에 대해 알아보았습니다. 그럼 여기서 서로 독립된 개체인 프로세스들끼리는 어떻게 데이터를 주고받는지 알아보겠습니다. 프로세스 간 통신의 종류 [프로세스 내부 데이터 통신] 하..
정의 CPU 스케줄러는 프로세스가 생성된 후 종료될 때까지 모든 상태 변화를 조정하는 일을 합니다. 규모에 따라 고수준, 중간, 저수준 스케쥴링으로 구분됩니다. 우리가 어떤 일정을 계획할 때 일 단위로 우선..
어느 날, 오후 급하게 회사 메신저로 CS 측에서 문의가 왔습니다. 앱에서 특정 매장의 메뉴를 선택하는 과정에서 앱이 뻗어버린다는 것이었습니다. 처음에 디버그도 찍어보고 관리자 페이지의 데이터를 대조하면..
다리를 지나는 트럭 문제 설명 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_..
프로세스와 스레드는 프로그래밍을 배우면 자주 접하는 단어일 것입니다. 프로그램의 동작 방식을 이해하기 위해서는 기본적으로 알고 있어야 하기 때문에 기술 면접에서도 단골 질문으로 등장합니다. 이번에는 이..
블로그를 시작하며 처음으로 써보는 회고록이라 그런지 긴장이 된다. 무언가 기록하는 것을 좋아하지만 막상 나의 이야기를 적어본 적은 없었던 것 같다. 다른 분들이 회고를 남기는 것을 보고 한 번 나도 써야겠..
레지스트리(Registry)란? Microsoft Window 32/64bit 버전과 윈도우 모바일 운영체제의 설정과 선택 항목을 담고 있는 데이터 베이스입니다. 주로 윈도우즈 환경 설정과 관련된 각종 정보가 등록된 곳입니다. 레지..
위장 문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추..
해당 글은 https://magdamiu.com/2021/08/23/clean-code-with-kotlin-2/ 를 요약과 개인적인 생각이 들어있습니다. (잘못된 부분이나 내용 개선에 관해서 피드백 환영합니다.) 이번 글에서는 우리는 Clean Code..
컴퓨터에서 병렬 처리는 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식을 말합니다. 이번 글에서는 이러한 컴퓨터의 병렬 처리에 있어서 어떠한 기법을 사용하는지 알아봅시다. CPU 내에서 명령어..
Android 개발을 하다 보면 필연적으로 collection이라는 자료구조를 많이 사용하게 됩니다. collection의 종류로는 List , Map , Set 이 있습니다. Kotlin의 Collection은 기본적으로 Mutable과 Immutable을 별개..
개발에서 테스트는 매우 중요한 부분입니다. 특히 비즈니스 로직을 중점적으로 개발하는 백엔드 개발자에게 있어서 테스트는 언제나 고민이 되는 부분일 것입니다. 그래서 요즈음 TDD(Test-driven Development) ,..
현대 컴퓨터 구조의 가장 큰 문제점은 CPU, 메모리와 주변장치의 작업 속도가 다르다는 것입니다. 메모리는 시스템 버스(FSB)의 속도와 같고 CPU는 내부 버스(BSB)의 속도와 같은데 일반적으로 내부 버스 속도가..
이 글은 https://www.lukaslechner.com/comparing-kotlin-coroutines-with-callbacks-and-rxjava/ 를 번역한 것입니다. (잘못된 부분이나 내용 개선에 관해서 피드백 환영합니다.) Intro 나는 현재 Kotlin Corouti..
대부분의 컴퓨터 작업은 CPU와 메모리의 협업으로 이루어지므로 필수 장치로 분류됩니다. 이번 글에서는 CPU와 메모리에 대해 알아봅시다. CPU CPU는 명령어를 해석하여 실행하는 장치입니다. 인간으로 치면 뇌..
해당 글은 김영한 님의 <스프링 입문> 강좌를 공부하고 정리한 글입니다. Spring을 통해 웹 개발을 할 때 3가지 방식이 있다고 합니다. 정적 콘텐츠(Static Content) MVC와 템플릿 엔진 API 정적 컨텐츠(Static..
커널과 인터페이스 운영체제는 커널과 인터페이스로 이루어져 있습니다. 커널 : 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로 운영체제의 성능을 좌우합니다..
Repository와 MVVM에서 사용 이제 우리가 만든 Room DB를 실제적으로 사용할 수 있게 Repository를 만들어 봅시다. 이때 주의할 점은 Room DB가 메인 스레드에서 접근하려면 하면 에러가 납니다. 그래서 별도의..
Spring 프로젝트 생성 처음 스프링을 접하는 나와 같은 사람들은 프로젝트를 생성하는 것이 까다로울 수 있습니다. 그래서 이미 Spring Initializr 라는 웹사이트를 통해 간단하게 프로젝트를 생성할 수 있게..
Intro RDBS에서 두 개 이상의 테이블을 서로 묶어서 하나의 결과를 보아야 할 경우가 많습니다. 예를 들어 쇼핑몰에서 상품을 구매한 회원 목록을 출력하기 위해선 회원 정보 테이블 과 구매 테이블 을 연결해..
Room 이란? Android App에서 SQLite 데이터베이스를 쉽고 편리하고 쉽게 사용할 수 있게 해주는 라이브러리입니다. 보통 스마트폰 내장 DB에 데이터를 저장하고 싶을 때 많이 사용합니다. DAO , Entity , RoomD..
Intro 데이터베이스에서 대량의 데이터를 등록할 때 기존에 값이 이미 있는 경우 등록하려는 데이터에 Unique 키 값은 같은데 데이터가 다를 경우가 있습니다. 이 때 내가 원하는 건 없는 데이터는 INSERT 하고 기..
운영체제의 역사 이번에는 운영체제가 시대의 흐름에 따라 어떻게 발전되어 왔는지 간략하게 정리해보았습니다. 아래의 표는 시기에 따라 어떠한 시스템과 장치들이 개발되었는지 보여줍니다. 구분 시기 주요 기술..
개요 WPF에서 특정 이벤트가 발생하거나 사용자에게 물어볼 때 사용할 수 있는 Dialog를 버튼 개수에 따라 Dialog를 생성할 수 있는 Utility Class를 만들어 보았습니다. Dialog 모양 같은 경우에는 개발자가 원하..
기존에는 findViewById를 사용하다가 안드로이드 View Binding에 대하여 알게 되었습니다. 생각보다 사용하다 보니 훨씬 편리하고 코드의 생산성도 좋아졌습니다. 기본적으로 사용하는 방법은 build.gradle 파일에..
전화번호 목록 문제 설명 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사 입니다...
처음 안드로이드 개발을 시작할 때는 단순히 기능 구현에 집중을 했었지만 어느 순간부터 만드는 앱의 규모가 커지고 다양한 데이터를 다루다 보니 architecture에 대한 관심을 가지게 되었습니다. 그래서 찾아본..
운영체제란? 운영체제는 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어를 말합니다. 우리가 사용하는 운영체제의 종류는 Windows, Mac Os, Android 등..
이번에는 데이터베이스에서 요청한 데이터를 받아 화면에 표시할 때 사용하는 Promise 에 대해 공부해보겠습니다. Promise란? Promise는 JS 비동기 처리에 사용되는 객체입니다. 주로 Get 방식을 요청할 때 사..
아래는 C#에서 파일을 생성하는 방법입니다. public static void CreateFile(string file, Encoding encoding) { //파일 객체 생성 var fileInfo = new FileInfo(file); //파일이 이미 존재하면 return if (fileIn..
Intro html 페이지의 lifecycle은 3개의 중요한 event를 가지고 있습니다. DOMContentLoaded : Browser에서 HTML이 완전히 로드되고 DOM tree가 만들어 질 때 발생하는 이벤트 load : 문서의 모든 콘텐츠(image..
FCM Message Type Notification Message: Firebase 콘솔을 사용하여 메세지를 전송할 수 있고 JSON형식을 따릅니다. 데이터 또한 포함해서 보낼 수 있습니다.(포어그라운드 / 백그라운드 상태에서 동작 가능) -Dat..
MediaUtility 클래스 특정 폴더에 접근하여 이미지 파일이나 동영상 파일을 가져와 사용하는 경우가 많아서 따로 쉽게 클래스로 구현하여 유틸리티처럼 사용하기 위해 만들었습니다. using System; using System.C..
Custom Calendar 기본적으로 WPF에서 달력을 사용할 때 DataPicker를 사용하는데 기능을 확장하는데 제한이 되어 Custom Calendar를 만들어보았습니다. 추후에 각 일별로 텍스트나 필요한 정보를 추가할 예정입니..
웹 표준(Web Standard)이란? 웹에서 표준적으로 사용되는 기술이나 규칙을 의미하고 웹사이트에 접속한 사용자는 어떠한 운영체체나 브라우저를 사용하더라도 웹페이지가 동일하게 보이고 정상적으로 작동..
이번에는 Vanilla JS에서 Event를 어떻게 등록하고 감지하여 그 이벤트를 어떻게 다른 화면 요소에 전파하는지를 공부하여 정리하였습니다. Vanilla JS에서 이벤트를 전달하는 방식은 Event Bubbling , Event Capt..
식별자는 변수, 함수, 클래스 명들을 개발자가 정의하여 사용하는 단어입니다. 이중 파이썬에서 사용하는 식별자 케이스인 snake case와 camel case에 대해 알아보겠습니다. Snake Case 단어 사이를 언더바(_)로..
Spring을 시작하며 - 백엔드에 도전! 최근에 개발자로서 어떠한 목표를 가지고 살고 싶은지에 대해 진지하게 고민했다. 지금 개발을 하고 있지만 사실 내가 개발을 시작한 것도 우연히 간 학과가 컴퓨터공학과..