질문 정리 40

서버로 요청을 보내는 테스트 코드

API 테스트 코드를 작성하게 된 주요 이유 개발 도중 기획 변경으로 인해 API가 자주 수정되고 있습니다. API의 변경에 따라 안드로이드 코드도 연쇄적으로 수정해야 합니다. 서버의 소소한 변경사항에 대한 정보가 누락될 때가 있습니다. 서버가 재배포될 때마다 API 변경으로 인해 발생할 수 있는 오류를 확인하고자 합니다. 주요 JUnit 어노테이션 @Test: 이 어노테이션이 붙은 메소드는 JUnit에 의해 테스트로 인식되고 실행됩니다. @Before: 각 테스트 메소드가 실행되기 전에 실행되어야 할 코드를 포함하는 메소드에 이 어노테이션을 사용합니다. 예를 들어, 테스트에 필요한 객체를 초기화하거나 테스트 환경을 설정하는 데 사용됩니다. @After: 각 테스트 메소드의 실행이 끝난 후에 실행되어야 ..

질문 정리 2024.04.18

_username과 username 왜 나누는 것일까?(백킹 프로퍼티)

평소 프로젝트를 하며 다음과 같은 형식의 코드를 자주 사용했습니다. private var _username: String? = null var username: String? get() = _username set(value) { _username = value } private var _password: String? = null var password: String? get() = _password set(value) { _password = value } _username와 username를 나누어 사용하는 이유는 코틀린에서 일반적으로 사용되는 "백킹 프로퍼티(backing property)" 패턴 때문입니다. 캡슐화 강화: 내부적으로 사용되는 _username 필드는 비공개(private)로 설정..

질문 정리 2024.04.16

Retrofit의 Call과 Response 공부하기

Retrofit 요청 및 응답 타입 구미 인사이더를 개발할 때, 작성한 게시판 조회 코드 요청 및 응답 타입을 Custom해서 사용한 경우 fun getBoardDetail(boardNo: String) { showProgress() viewModelScope.launch { val response = repository.getBoardDetail(boardNo) val type = "게시판 상세조회에" when (response) { is NetworkResponse.Success -> { _boardDetail.postValue(response.body) _commentCount.postValue(response.body.comments) } is NetworkResponse.ApiError -> {..

질문 정리 2024.04.07

깔끔한 코드를 위해서 Ktlint 사용

원래는 안드로이드 스튜디오의 세팅에서 Actions on Save에 있는 자동 import와 format 기능을 사용하고 있었는데 자동 정렬 때문에 느려지는 느낌을 받았고, format의 경우 프로젝트 단위가 아니라 파일 단위로 되었기 때문에 klint를 사용해보려고합니다. https://github.com/JLLeitschuh/ktlint-gradle GitHub - JLLeitschuh/ktlint-gradle: A ktlint gradle plugin A ktlint gradle plugin. Contribute to JLLeitschuh/ktlint-gradle development by creating an account on GitHub. github.com Ktlint의 장점 코드 일관성: ..

질문 정리 2024.01.30

효율적인 로깅을 위한 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