전체 글(367)
-
Kotlin에서 == vs === 차이
주말마다 진행하는 프로그래머스 스터디에서는 다양한 언어가 공존한다.Kotlin, C#, Swift, JavaScript.여기서 JavaScript 소스코드를 보는데 “===” 연산자가 나왔다.Kotlin에도 해당 연산자가 있는지 찾아보았다. 1. == (Structural Equality - 구조적 동등성)두 객체의 값이 같은지 확인할 때 사용한다.내부적으로 equals() 함수를 호출한다.즉, 내용만 같으면 true가 나온다.예제data class Person(val name: String)fun main() { val person1 = Person("개발새발") val person2 = Person("개발새발") println(person1 == person2) // ✅ true ..
2025.03.18 -
안드로이드 스튜디오 실행 환경별 필요한 성능 정리
작업 환경에 따라 CPU, RAM, SSD, GPU 요구 사항이 다르다.기본적으로 코어는 많을수록, RAM은 클수록 유리하다.1. 프로젝트 1개 실행 (기본 개발 환경)작업 내용코드 작성, 빌드, USB 연결 테스트필요 사양 항목 최소 사양 원활한 사양 (추천) CPUi3-13100 / Ryzen 5 5500i5-13400 / Ryzen 5 7600RAM8GB16GB (더 쾌적)SSDNVMe 256GBNVMe 512GB 이상 추천GPU내장 그래픽 가능내장 그래픽 (iGPU)RAM이 16GB 이상이면 기본 개발환경에서 충분히 원활하게 작동!2. 프로젝트 3개 실행 (멀티 프로젝트 작업)작업 내용여러 프로젝트를 동시에 띄워서 코드 비교 & 작업필요 사양 항목 최소 사양 원활한 사양 (추천) CPUi5-1..
2025.03.17 -
메타 프로그래밍 리플렉션(Reflection)이란?
1. 리플렉션(Reflection)이란?리플렉션은 앱 실행 중에 클래스, 메서드, 속성 등의 정보를 동적으로 가져오거나 수정할 수 있는 기능이다.즉, 코드가 자기 자신을 들여다보고 조작하는 능력.(1) 리플렉션이 필요한 이유런타임에서 클래스 정보를 조회해야 할 때 → 예를 들어, DI(의존성 주입) 같은 곳에서 객체 타입을 몰라도 생성해야 할 경우코드 수정 없이 동적으로 메서드 호출 → 프레임워크에서 코드를 직접 수정하지 않고 기능을 확장할 때JSON 직렬화/역직렬화 → Gson, Moshi 같은 라이브러리가 리플렉션을 사용해서 객체를 변환(2) 리플렉션 사용 예제클래스 정보를 가져오기import kotlin.reflect.full.*data class User(val name: String, val a..
2025.03.12 -
Annotation Processor 완전 정복: KAPT vs KSP 한눈에 알아보기
1. Annotation Processor컴파일 시 @Annotation을 읽고, 자동으로 필요한 코드를 생성하는 기능이다.즉, 개발자가 직접 코드를 작성하지 않아도, 특정 Annotation을 붙이면 필요한 코드가 자동으로 생성된다.✔ 예제현재는 Kotlin의 DataClass로 인하여 거의 사용하지 않는 Java의 Lombok이 대표적인 예시이다.@Getter@Setterpublic class User { private String name; private int age;}컴파일 시, Annotation Processor가 getName(), setAge() 같은 메서드를 자동으로 생성해준다.✔ Annotation Processor를 사용하는 이유코드 자동 생성 → 중복 코드 제거 & 생산..
2025.03.11 -
좀비 같은 Activity 처리하기, finish()와 finishAActivity()의 차이
회사 앱에서 Crash가 발생하였다.로그를 확인하여 예상 시나리오로 재현을 했더니 분명 Finish 시켰던 Activity가 다시 나타나며 발생한 Crash.그럼 Finish가 정확하게 된게 아닌건가? AActivity 호출 -> AActivity finish() -> CActivity 호출 -> 화면꺼짐(sleep) -> BActivity 호출(push 알람을 통한) -> BActivity finish() -> AActivity 호출-> AActivity finish() -> BActivity 부활(좀비) 아니 Finish를 시키면 결국 Activity는 죽어야 하는거 아닐까?✔ finish() 후에도 Activity가 다시 나타나는 이유Activity가 백스택에서 제거되지 않고 남아 있음finish(..
2025.03.10 -
안드로이드 모듈 간 리소스 충돌 방지: 리소스 ID와 모듈 의존성
안드로이드 프로젝트에서 여러 모듈을 사용하는 경우, 리소스 충돌을 피하기 위한 전략이 중요하다.특히 string, drawable, color와 같은 리소스 파일을 다룰 때,리소스 ID가 어떻게 관리되는지 모듈 간 의존성에 대한 이해가 필요하다. 1. 리소스 ID는 이름과 위치에 따라 결정된다.안드로이드에서 각 리소스(string, drawable, color 등)에 대해 고유한 ID가 자동으로 할당된다.이 ID는 리소스 이름과 해당 리소스가 위치한 모듈에 따라 결정된다.따라서 동일한 리소스 이름을 가진 string 파일이 core 모듈과 feature 모듈에 존재한다면,각 모듈에 대해 각각의 ID가 할당된다. 2. 리소스 이름이 같으면 동일한 ID가 할당된다.하지만 모듈마다 ID가 부여될 뿐, 그 ID..
2025.03.05