개발/개념 및 기법(13)
-
[생존 매뉴얼] 작동하는 코드보다 더 무서운 건, 작동하는 줄 알고 넘어간 코드다.
오래된 앱을 유지보수 하는 입장에서는 고쳐야 할 곳이 너무 많다.그 때 그 때 고치고 덧대는 이런 느낌. 서드파티 라이브러리는 지원을 하지 않고, View는 아주 오래전에 쓰던 방식이고.그렇다고 한번에 바꾸는 건 회사에서 허락해주지 않는다. (시간적 비용 등…) 결국 조금씩 리팩토링을 해나가는 방법 뿐이지만, 그렇게 되면 사이드 이펙트를 무시할 수 없다.사소한 로직을 하나 고치고 “에이, 이건 괜찮겠지~” 넘어갔다가 앱을 배포하면다음 날 엄청난 Crash 지옥을 맛볼 수 있다. 코드는 “에러 없이 돌아간다”고 해서 끝난 게 아니다.“내가 의도한 대로, 모든 케이스에서 정확히 동작한다”는 확신 없이는결국 폭탄 돌리기일 뿐이다.오류를 줄이는 디테일한 실천 가이드 (생존 매뉴얼)(1) 작은 수정도 반드시 직접..
2025.03.25 -
보이지 않는 문자들의 연합: 유니코드 이야기
옛날엔 나라별로 문자 인코딩이 다 달랐다.영어는 ASCII, 한국어는 EUC-KR, 일본어는 Shift-JIS...그래서 문자 하나 복붙만 해도 깨지고 뭉개지고 난리 난리~ 그래서 등장한 유니코드 !! “전 세계 모든 문자를 한 표준으로 다 담아버리자 !!!!” 1. 유니코드란?전 세계의 모든 문자를 하나의 표준으로 통합한 문자 체계 !!!!특징각 문자는 고유 코드포인트를 가짐 → 예: ‘A’ = U+0041, ‘가’ = U+AC00이모지, 한글, 일본어, 아랍어 전부 포함인코딩 방식: UTF-8, UTF-16, UTF-32 등 (저장 방식 차이)15만 개 이상의 문자를 지원하며 현재도 계속 증가 2. 인코딩 (UTF-8, UTF-16, UTF-32)유니코드는 “문자를 숫자로 바꾸는 표준”이고,인코딩은 ..
2025.03.21 -
메타 프로그래밍 리플렉션(Reflection)이란?
1. 리플렉션(Reflection)이란?리플렉션은 앱 실행 중에 클래스, 메서드, 속성 등의 정보를 동적으로 가져오거나 수정할 수 있는 기능이다.즉, 코드가 자기 자신을 들여다보고 조작하는 능력.(1) 리플렉션이 필요한 이유런타임에서 클래스 정보를 조회해야 할 때 → 예를 들어, DI(의존성 주입) 같은 곳에서 객체 타입을 몰라도 생성해야 할 경우코드 수정 없이 동적으로 메서드 호출 → 프레임워크에서 코드를 직접 수정하지 않고 기능을 확장할 때JSON 직렬화/역직렬화 → Gson, Moshi 같은 라이브러리가 리플렉션을 사용해서 객체를 변환(2) 리플렉션 사용 예제클래스 정보를 가져오기import kotlin.reflect.full.*data class User(val name: String, val a..
2025.03.12 -
오버헤드(overhead)와 스택 오버플로우(Stack Overflow), 왜 발생하고 어떻게 해결할까?
오버헤드(overhead)란?어떤 작업이나 시스템을 운영할 때 추가적으로 드는 비용, 시간 메모리 같은 리소스를 의미한다.> 코드 실행 오버헤드불필요하게 많은 객체 생성 시 발생복잡한 연산 수행 시 발생⇒ 결과적으로 실행 속도가 느려짐> 메모리 오버헤드필요 이상으로 큰 데이터 로드할 때 발생캐시를 많이 사용할 때 발생⇒ 결과적으로 메모리가 낭비됨> 네트워크 오버헤드짧은 데이터를 보내는데도 요청/응답을 위한 추가적인 정보가 많을 때 발생⇒ 결과적으로 더 많은 트래픽이 발생함 대충 “뭔가를 하려는데 쓸데없이 부담되는 짐이 추가된다” 정도의 느낌.오버헤드 성능 최적화 시 고려해야 할 사항재귀보다는 반복문 사용 (StackOverflow 방지)불필요한 객체 생성 줄이기 (GC 부하 감소)쓰레드보다는 코루틴 사용..
2025.03.04 -
네트워크 API 통신할 때 suspend 함수 vs Flow
현재 나는 Nia(Now In Android) 프로젝트를 보면서 신규 프로젝트 구조를 설계하고 있다.이걸 보는데 flow와 suspend 함수가 마구 뒤섞여져 있었다.그럼 나는 어떤걸 기준으로 작업을 진행해야 할까?1️⃣ suspend 함수란?suspend 함수는 코루틴(Coroutine)에서 사용되는 특수한 함수이다.코루틴에 대한 설명은 👉 https://anovice-dp.tistory.com/348suspend 함수는 일시중단(suspending)이 가능한 함수이다.즉, 실행을 멈췄다가 다시 재개할 수 있다.✅ 주요 특징비동기 작업을 쉽게 표현suspend 함수는 일반적인 함수처럼 보이지만, 내부적으로 비동기 작업을 수행네트워크 요청, DB 쿼리 같이 시간이 오래 걸리는 작업에 유리직관적인 코드a..
2025.02.19 -
KMP vs CMP
🌟 들어가기 전지난 번에는 Android와 iOS 모두 개발 가능한 KMP를 알아보았다.그런데 이건 UI를 각각 네이티브에 맞춰 따로 개발해야 하는 이슈 !!! 그럼 내가 SwiftUI를 다시 배워야 하냐구우~?!?!?!?!!! 그래서 그럴 필요가 없는 CMP를 체크 ✅ 🔍 세부 내용KMP (Kotlin Multiplatform)정의: Kotlin을 사용하여 여러 플랫폼(Android, iOS, JVM, JS 등)에서 동작하는 코드를 작성할 수 있도록 하는 기술.주요 특징:공유 코드: 비즈니스 로직, 네트워크, 데이터 레이어 등을 공통 모듈에서 구현 가능.각 플랫폼별 구현 가능: expect/actual 키워드를 사용해 플랫폼별 코드 작성 가능.UI 분리: 각각의 플랫폼에 맞춰 UI 제작CMP (Co..
2025.01.25