전체 글
-
[Code Readability] 2장 Namingkotlin/[Book] Code Readability 2025. 10. 24. 23:58
Objective읽기 쉬운 이름을 통해 코드의 의도와 책임을 명확히 표현하고, 협업 시 오해를 줄이며 유지보수를 쉽게 만든다.Key ResultsKR1. 좋은 이름의 기본 원칙개념이름은 정확하고(Accurate), 설명적(Descriptive) 이어야 한다.이름이 곧 문서 역할을 한다.문제약어나 모호한 단어(flag, tmp, data)는 맥락을 잃게 만든다.잘못된 문법 순서나 축약어는 코드의 의미를 흐린다.해결 방법정확한 문법을 따르고,“무엇(what)”을 설명하며,의미가 좁고 구체적인 단어를 선택하고,축약어 대신 전체 단어를 사용하며,단위(type/unit)를 명시하고,긍정적인 단어를 사용한다.KR2. 올바른 문법 사용 (Use correct grammar)개념이름의 품사(naming type)에 따..
-
[Code Readability] 1장 도입과 원칙kotlin/[Book] Code Readability 2025. 10. 24. 23:58
가독성이 좋은 코드란?분명해야하고, 간단해야 하고 독립적이어야 하고, 구조적이어야 한다.프로덕트의 규모가 커질수록 코드를 작성하는 것보다 읽는 시간이 더 많아진다.쓰기 편한코드보다 읽기 쉬운 코드가 더 중요하다.프로덕트의 규모가 큰 경우에만 중요하고, 일시적으로 사용하는 코드는 괜찮다.가독성을 개선하는 방법기술, 지식을 목적을 생각해서 선택해야 한다.기술 자체를 사용해보고 싶어서 사용하면 안된다.가치가 있다면 복잡해도 된다.자동 검증을 최대한 활용한다.컴파일러, 테스트 등을 더 신뢰된다.더 자주 논의 하라팀원들과 만들면서 계속 이야기한다.계속 배우자가독성이 높은 코드를 작성하려면 여러 공부가 필요하다.강의, 훈련, 책, 온라인 기사, 코드 리뷰, 페어 프로그래밍Objective대규모 소프트웨어 개발에서도..
-
Android에서 Glide를 더이상 사용할 수 없는 이유Android 2025. 10. 21. 23:00
Kotlin 2.2.20 Exposed Visibility Warning 정리🧩 경고의 의미Kotlin 2.2.20부터 다음과 같은 새로운 컴파일러 경고가 추가됨:“A more visible declaration references a less visible declaration in its signature.”즉,더 넓은 가시성의 선언(public/internal 등)이 자신의 시그니처에 더 좁은 가시성(private/internal/package-private 등)을 사용하면 경고 발생.이 경고는 Kotlin 2.4부터는 에러로 승격될 예정임.📘 예시로 이해하기internal class Apublic fun foo(): A = A()// ❌ public 함수가 internal 타입을 반환 → 경고..
-
Android에서 Gson을 더 이상 사용하면 안 되는 이유와 Kotlinx.serialization 마이그레이션 가이드Android 2025. 10. 21. 22:55
📌 1. Gson을 Android에서 더 이상 권장하지 않는 이유Gson은 이제 Android 프로젝트에서 공식적으로 비권장(deprecated) 되는 방향입니다.이유는 단순한 JSON 변환 문제를 넘어, 성능·안정성·유지보수성 문제 때문입니다.https://github.com/google/gson/pull/2856🔍 주요 이유 요약항목설명1. 리플렉션 기반 구조Gson은 런타임에 리플렉션(reflection)으로 필드 접근 및 변환을 수행합니다. 👉 R8/ProGuard 난독화 시 필드명이 바뀌면 JSON 매핑이 깨질 위험이 있습니다.2. Kotlin 언어 지원 한계Kotlin의 data class, default parameter, nullable, sealed class 같은 기능을 제대로 지..
-
MCP의 기본 개념과 QnAAI/MCP 2025. 10. 17. 23:47
MCP 총정리: 개념·구조 + Q&A (Tistory용)1) MCP 개념·구조 — 기본부터 핵심만큰 그림 (Host · Client · Server)[사용자] │ (요청/승인) ▼[HOST 앱] ─ UI · 보안/정책 · LLM 호출 총괄 ├─ (Client #1) ── 1:1 ── [SERVER A] ├─ (Client #2) ── 1:1 ── [SERVER B] └─ (Client #3) ── 1:1 ── [SERVER C]- Host: 실제 사용하는 앱/환경(데스크톱 앱, IDE 확장 등). LLM 호출, 사용자 승인/보안, 정책 적용, 그리고 MCP Client 인스턴스들을 생성/관리하는 조정자.- Client: Host가 만드는 '연결 어댑터'. 각 MCP Se..
-
Circular Dependency (순환 참조) 문제와 해결 방법kotlin 2025. 4. 27. 17:29
개발을 하다 보면 클래스 간의 의존성이 서로 얽히는 "써큘러 디펜던시(Circular Dependency)" 문제를 종종 만나게 됩니다. 이번 글에서는 코틀린(Kotlin) 코드로 순환 의존성의 문제를 살펴보고, 이를 lazy 초기화, 의존성 역전 원칙(DIP) 등을 통해 해결하는 방법을 예제와 다이어그램을 곁들여 정리해보겠습니다.1. 써큘러 디펜던시란?써큘러 디펜던시(Circular Dependency)는 두 개 이상의 클래스가 서로를 직접 또는 간접적으로 참조해서 순환 참조가 발생하는 상황을 말합니다. 이는 프로그램의 컴파일 또는 실행 과정에서 오류를 유발할 수 있습니다.문제 예제class A(private val b: B)class B(private val a: A)A는 B를 필요로 하고, B는 A..
-
맥에서 정해진 시간에 로또 자동 구매하기Python 2025. 4. 22. 23:52
오늘은 맥에서 정해진 시간마다 로또 자동 구매하기를 구현한다.일주일에 한번은 로또를 구매해야지하고 생각하지만 매번 놓치기 일쑤여서, 내가 따로 노력을 들이지 않아도 정해진 시간마다 로또를 구매하도록 설정한다.요구 사항 정리동행 복권 사이트에서 랜덤 번호로 로또 구매구매한 번호를 캡쳐해서 내 telegram 계정으로 전송맥북에서 일주일에 한번씩 구매동행 복권 사이트에서 랜덤 번호로 로또 구매파이썬을 이용해서 동행 복권 사이트를 selenium의 webdriver로 띄우고 구매 프로세스를 실행하도록 한다.from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.by impo..
-
Kotlin에서 예외 처리와 스택 추적 이해하기: data object vs classkotlin 2025. 4. 3. 10:44
Kotlin에서 예외 처리 시 스택 추적(Stack Trace)은 디버깅과 문제 해결에 중요한 역할을 합니다. 이 글에서는 data object와 class를 사용하여 예외를 정의할 때의 차이점과 예외 객체가 생성될 때 스택 추적이 어떻게 기록되는지 설명합니다.1. data object와 class의 차이Kotlin에서 예외를 정의할 때 data object와 class를 사용할 수 있습니다. 두 방식은 예외 객체의 생성과 스택 추적 기록에 있어 중요한 차이를 가집니다.data object: 싱글톤 패턴으로 동작하여 프로그램 실행 중 단 하나의 인스턴스만 존재합니다. 예외를 던질 때마다 동일한 인스턴스를 사용하므로, 스택 추적은 객체가 초기화된 시점의 정보를 반영합니다.class: 새로운 인스턴스를 생성..