IT
-
YAGNI 원칙의 모호한 경계에 대한 빛 같은 답변IT/[짧 but 좋] 2025. 5. 20. 14:04
질문: 이건 “미래를 위한 설계”가 아니라, “지금 해결해야 할 문제인가?” 라는 질문으로 판단하면 쉬워. 라고 이야기 해줬는데 그렇게따지면 맨처음 내가 이야기한 멀티모듈 및 패키지 구조도 같은 의미 아니야? 왜냐하면 모놀리식으로 프로젝트를 구성하더라도 사실동작은 하거든. ChatGPT의 말:너무 좋은 질문이야. 맞아, **“모놀리식 구조로도 동작한다”**는 말은 사실이야.그래서 이 부분이 YAGNI 원칙을 적용할 때 자주 나오는 **“설계적 판단의 회색 지대”**야.그럼 왜 멀티모듈 및 패키지 구조는 괜찮고, 의존성 공통화는 YAGNI로 미루자고 말하는 걸까?🔍 핵심 차이: "설계의 무게"와 "지금 당장의 가치"구분멀티모듈 구조의존성 공통화✅ 지금 도입하면 얻는 가치- 빌드 속도 최적화- 병렬 개발 ..
-
코드 작성 가이드 - 가독성 높은 코드를 작성하는 방법IT/책 2025. 5. 5. 04:13
코드의 가독성을 높이기 위해서는 한가지 지표에 집착하지 말고 여러관점에서 코드의 가독성을 평가해야 합니다. 예를들면 코드의 길이라는 지표는 가독성과 관련이 있지만 이것에 집착해서는 안됩니다. 덩치가 큰 함수가 읽기 어려운것은 당연하지만, 그렇다고 너무 세분화하면 오히려 전체구조를 파악하기 어려운 코드가 될 수 있습니다.즉, 가독성을 평가하려면 여러 추상도를 결정하는 다각적인 지표를 활용해야 합니다.[단순함, 명확한 의도, 독립성, 구조화] 네가지 지표로 살펴보겠습니다. 1. 단순한 코드코드 자체가 단순하면 동작을 쉽게 이해할 수 있습니다. True/False 값 연산을 예로 들어보면 isA && isB , !(!isA || !isB) && isB 는 둘다 결과는 동일하지만, 전자가 어떤 조건에서 True..
-
TypeSafe navigation 에서 '/' 을 포함할 수 있는 객체의 직렬화 시 주의해야합니다IT/android 2025. 3. 4. 17:10
Android navigation 시스템에서 TypeSafe 를 정식으로 지원하게 되면서 현재 진행중인 사이드프로젝트에도 도입을 해보았습니다.그런데 Route 객체 내부에 Primitive 타입이 아닌 Object 를 넣고 라우팅 처리를 할때 특정상황에서 오류가 발생하였습니다.오류문구는 다음과 같았습니다java.lang.IllegalArgumentException: Navigation destination that matches route com.lanpet.free.navigation.FreeBoardCommentDetail/01JNFSERY5NJAVR9JZNKNSBYHW/{"id":"01JNG2R9XJDZANT33HCV2E1JA5","profile":{"nickname":"gpffh1","profil..
-
멀티스레딩 환경에서 발생할 수 있는 경쟁상태 해결의 경우 왜 많은 라이브러리들이 Synchronized 를 사용해 임계구역을 설정함으로써 해결하고 있나요?IT/cs 2025. 2. 15. 16:37
멀티스레딩 환경에서 발생할 수 있는 문제 중에는 대표적으로 경쟁상태가 있습니다.경재상태란 하나의 공유자원에 여러 스레드가 접근하여 값을 변경하는 경우에 해당 공유자원에 대한 기대했던 값과는 다른 값의 불일치 문제가 발생할 수 있는 상태를 의미합니다.경쟁상태를 해결하는 여러 방법이 있는데요, 대표적으로1. Synchronized 를 사용한 임계구역 설정2. Atomic 연산을 지원하는 클래스를 활용3. Mutex or Semaphore 을 이용한 스레드 Lock 관리 가 있습니다. 먼저 의문이 들었던것은 Synchronized 보다 Atomic 연산을 제공하는 클래스를 활용하는것이 더 간단하고 가독성도 좋을것 같은데 왜 사용하지 않는걸까? 였습니다.그 이유는 바로 Atomic 연산을 제공하는 클래스는 단 ..
-
-
Gradle 훑어보기4 - 빌드파일 기본사항IT/android 2024. 12. 14. 20:58
일반적으로 빌드 스크립트에는 빌드구성, 작업, 플러그인이 자세히 설명되어 있습니다.모든 Gradle 빌드는 최소한 하나의 빌드 스크립트로 구성됩니다.빌드 파일에서는 두 가지 유형의 종속성을 추가할 수 있습니다. Gradle 과 빌드 스크립트가 의존하는 라이브러리 및 플러그인 입니다. 프로젝트 소스(즉 소스코드) 가 종속된 라이브러리 입니다.플러그인 추가플러그인은 Gradle 의 기능을 확장하고 프로젝트에 작업을 추가할 수 있습니다.빌드에 플러그인을 추가하는것을 플러그인 적용 이라고 하며 이를 통해 추가 기능을 사용할 수 있습니다.plugins { id("application")} 이 application 플러그인은 실행 가능한 JVM 애플리케이션을 만드는 것을 용이하게 합니다.Application 플러그..
-
Gradle 훑어보기3 - 설정파일 기본사항IT/android 2024. 12. 14. 20:52
설정파일은 모든 Gradle 프로젝트의 시작점 입니다. 설정파일의 주요 목적은 빌드에 하위 프로젝트를 추가하는 것입니다.Gradle 은 단일 프로젝트와 다중 프로젝트 빌드를 지원합니다.단일 프로젝트 빌드의 경우 설정파일은 선택사항입니다.다중 프로젝트 빌드의 경우 설정파일은 필수이며 모든 하위 프로젝트를 선언해야합니다.설정 스크립트setting.gradle 설정파일은 스크립트 입니다. Kotlin 으로 작성된 경우 settings.gradle.kts 로 명명됩니다.Gradle 스크립트에 허용되는 언어는 Groovy DSL 과 Kotlin DSL 뿐입니다. 설정파일은 일반적으로 프로젝트의 root 디렉토리에 있습니다.rootProject.name = "root-project" // 프로젝트의 이름을 정의합..
-
Gradle 훑어보기2 - Gradle Wrapper 기본사항IT/android 2024. 12. 14. 20:47
Gradle 빌드를 실행하는 데 권장되는 방법은 Gradle Wrapper 을 사용하는 것입니다.Wrapper 스크립트는 선언된 Gradle 버전을 호출하며, 필요한 경우 미리 다운로드 하게 됩니다.Wrapper 은 gradlew 또는 gradlew.bat 파일로서 제공됩니다. Wrapper 을 사용하면 다음과 같은 이점을 얻을 수 있습니다.주어진 Gradle 버전에 맞춰 프로젝트를 표준화 합니다.다양한 사용자에게 동일한 Gradle 버전을 제공합니다.다양한 실행 환경(IDE, CI 서버 등) 에 대한 Gradle 버전을 제공합니다.Gradle Wrapper 파일 이해하기.├── gradle│ └── wrapper│ ├── gradle-wrapper.jar // Gradle Wrapper ..