질문 정리 36

효율적인 로깅을 위한 LogUtils

안녕하세요. 오늘은 제가 사용하고 있는 LogUtils에 대해 이야기하고자 합니다. 이 object는 로그를 더 효율적으로 관리하고 디버깅을 용이하게 만들기 위해 정리했습니다. object LogUtils { private const val TAG = "five-two-weeks" private val isDebug = BuildConfig.DEBUG_MODE fun d(message: String, name : String = TAG) { if (isDebug) Log.d(name, createLogMessage(message)) } fun e(message: String, name : String = TAG) { if (isDebug) Log.e(name, createLogMessage(message..

질문 정리 2024.01.23

HTTP Content Type과 Retrofit

프로젝트를 새로 시작하게 되었는데, 서로 코드 리뷰를 하던 도중 오랜만에 application/json를 Content-Type으로 붙인 것을 발견하여 정리하게 되었습니다. Content-Type HTTP Content Type, 또는 MIME 타입은 HTTP 헤더에서 사용되는 문자열로, 통신하는 상대방에게 데이터의 형식을 알려주는 역할을 합니다. 안드로이드 개발을 막 시작했던 초반에는 해당 content-type을 항상 header에 붙였습니다. @Header("Content-Type") contentTypeHeader: String = "application/json" Retrofit을 사용하고 있다면, header에 "application/json"은 붙이지 않아도 됩니다. Retrofit.Buil..

질문 정리 2024.01.12

안드로이드 4대 컴포넌트 정리

면접 준비를 하며, 안드로이드 4대 컴포넌트에 대해서 복습했습니다. 액티비티 (Activity): 액티비티는 사용자 인터페이스(UI)와 상호작용하는 주요 화면 요소입니다. 사용자와 앱 사이의 상호작용을 처리하며, 버튼 클릭, 터치 이벤트, 메뉴 선택 등과 같은 사용자 입력을 처리합니다. 하나의 앱은 여러 개의 액티비티를 가질 수 있고, 각 액티비티는 화면 전환 및 탐색을 담당합니다. 안드로이드 앱이 반드시 하나 이상의 액티비티를 가져야 하는 것은 아닙니다. 액티비티는 안드로이드 앱에서 사용자 인터페이스(UI)를 표시하고 사용자와 상호작용하는 주요 컴포넌트 중 하나이지만, 모든 앱이 액티비티를 가져야 하는 것은 아닙니다. 서비스 (Service): 서비스는 백그라운드에서 실행되는 컴포넌트로, 사용자 인터페..

질문 정리 2023.09.27

네트워크 처리량과 병목현상

이제 네크워크 처리량과 지연, 병목 현상, 토폴로지에 대해서 정리해보겠습니다. 네트워크 처리량은 패킷 처리량이라고 할 수도 있습니다. 패킷 물리적인 네트워크를 통해 데이터를 전송할 때, 큰 데이터를 한 번에 보내기보다는 작은 조각으로 나누어 전송하는 것이 효율적입니다. 이 작은 조각을 "패킷"이라고 부릅니다. 각 패킷은 데이터의 일부를 담고 있으며, 패킷에는 몇 가지 중요한 정보가 포함되어 있습니다. 헤더 (Header): 패킷의 헤더에는 출발지 주소와 목적지 주소, 패킷의 크기, 패킷의 순서 정보 등이 포함됩니다. 이 정보는 패킷을 전송하고 수신하는 동안 어디로 가야 할지를 결정하는 데 사용됩니다. 데이터 (Data): 패킷의 본문에는 실제 데이터의 작은 일부가 포함됩니다. 예를 들어, 웹 페이지의 경..

질문 정리 2023.08.28

MVC, MVP, MVVM 패턴에 대한 정리

MVC 패턴 MVC (Model-View-Controller) 패턴은 사용자 인터페이스를 가진 애플리케이션을 설계하는 데 일반적으로 사용되는 설계 패턴입니다. 이 패턴은 애플리케이션의 개발을 세 가지 구성 요소로 분리함으로써 관심사를 분리합니다. Model: 이 부분은 애플리케이션의 데이터와 비즈니스 로직을 처리하는 역할을 합니다. 데이터를 저장하고 검색하는 메서드, 비즈니스 로직, 비즈니스 규칙, 그리고 데이터를 조작하는 데 사용되는 계산 등을 포함합니다. View: 이 부분은 사용자에게 보여지는 UI 부분입니다. 단순히 xml 코드만을 의미하는 것이 아니라, 클릭 리스너나 데이터바인딩을 포함하고 있습니다. 사용자에게 정보를 표시하고 사용자의 명령을 받아들입니다. View는 Model이 가지고 있는 정..

질문 정리 2023.07.31

왜 코틀린인가요?

새 프로젝트를 시작할 때가 되면 그때의 환경에 맞게 기술스택과 언어등을 정하게 됩니다. 3년정도 전부터 안드로이드 프로젝트를 할 때, 코틀린을 사용해왔는데 이쯤되니 왜 코틀린을 사용하게 되었는지 기억이 나지 않아서 생각난 김에 정리를 하게 되었습니다. 코틀린이란 무엇인가? 코틀린(Kotlin)은 JetBrains가 2011년에 개발한 정적 타입의 프로그래밍 언어입니다. 코틀린은 현대적인 프로그래밍 언어가 가져야 할 특징들을 갖추고 있으며, JVM(Java Virtual Machine), Android, 브라우저, 네이티브 환경에서 동작합니다. 코틀린은 다양한 플랫폼에서 사용될 수 있도록 설계되었으며, Java와 완벽하게 호환될 수 있습니다. 이 때문에 기존의 Java 코드를 변경하지 않고도 코틀린 코드를..

질문 정리 2023.06.27

첫 안드로이드의 벽, RecyclerView 사용 방법

안드로이드 리싸이클러뷰(RecyclerView)란? 안드로이드 리싸이클러뷰(RecyclerView)는 안드로이드 앱에서 리스트 형태의 데이터를 효율적으로 표시하고 관리하기 위한 위젯입니다. 리싸이클러뷰는 이전에 사용되던 리스트뷰(ListView)보다 더 강력하고 유연한 기능을 제공합니다.리싸이클러뷰는 다음과 같은 주요 특징을 가지고 있습니다: 1. 재활용(View Recycling): 리싸이클러뷰는 화면에 보여지는 항목만을 생성하고 재활용하여 메모리 사용량을 최적화합니다. 스크롤 시에도 새로운 항목을 생성하는 대신 기존에 보이지 않던 항목을 재활용하여 데이터를 업데이트합니다. 2. 레이아웃 매니저(Layout Manager): 리싸이클러뷰는 레이아웃 매니저를 사용하여 항목의 배치 방식을 결정합니다. 수직..

질문 정리 2023.05.30

안드로이드 메뉴 만드는 법

최근에 시작한 간단한 메모 앱 프로젝트에서 메뉴 만들 일이 많아서 정리합니다. 안드로이드에서 메뉴를 만드는 방법은 주로 세 가지 유형이 있습니다. 컨텍스트 메뉴(Context Menu), 옵션 메뉴(Option Menu), 팝업 메뉴(Popup Menu). 이들 메뉴 유형의 주요 차이점은 다음과 같습니다. 컨텍스트 메뉴(Context Menu) 컨텍스트 메뉴는 특정 뷰에 대해 사용자가 길게 누르거나 뷰를 선택했을 때 나타나는 메뉴입니다.일반적으로 뷰와 관련된 작업을 수행하기 위해 사용됩니다. onCreateContextMenu 및 onContextItemSelected 메서드를 사용하여 컨텍스트 메뉴를 만들고 처리할 수 있습니다. 컨텍스트 메뉴는 전체 애플리케이션에 대해 일관된 메뉴를 제공하지 않으며, ..

질문 정리 2023.03.21

안드로이드 4대 컴포넌트와 Intent

이번에 브로드캐스트 리시버와 서비스에 대해서 배웠기 때문에 복습 겸 정리를 합니다. 안드로이드 4대 컴포넌트는 앱의 기본 구성 요소로, 앱의 구조와 작동 방식을 결정합니다. 각 컴포넌트는 고유한 역할을 수행하며, 시스템 및 다른 앱과 상호 작용하는 방법을 정의합니다. 1. Activity 액티비티는 사용자 인터페이스(UI)를 가지는 화면입니다. 사용자와 상호 작용하는 앱의 주요 구성 요소입니다. 일반적으로 하나의 액티비티는 하나의 화면을 나타내며, 사용자가 앱 내에서 이동하면 여러 개의 액티비티가 차례로 실행됩니다. 2. Service 서비스는 백그라운드에서 실행되는 구성 요소로, 사용자 인터페이스(UI)가 없습니다. 오랫동안 실행되어야 하는 작업이나 백그라운드 작업에 사용됩니다. 예를 들어, 음악 플레..

질문 정리 2023.03.20

코틀린 it과 this 정확히 무슨 개념일까?

항상 간편하게 사용했지만 정확히 알지 못했던 it과 this의 개념을 정리해봤습니다. it it은 람다식 내부에서 사용되는 암시적 변수입니다. 람다식에서 인자가 하나인 경우 it을 사용해서 인자를 참조할 수 있습니다. val numbers = listOf(1, 2, 3, 4, 5) val evenNumbers = numbers.filter { it % 2 == 0 } 위의 예제에서 it은 numbers 리스트의 각 요소를 나타냅니다. this this는 클래스의 인스턴스를 참조하는데 사용됩니다. this를 사용하여 클래스 내부에서 멤버 변수나 멤버 함수를 참조할 수 있습니다. class Person(val name: String) { fun printName() { println(this.name) } ..

질문 정리 2023.03.15