개발기록
개요Garbage Collection(GC)은 자바, 코틀린 등의 언어에서 중요한 메모리 관리 메커니즘입니다. 하지만 GC가 자주 발생하면 애플리케이션 성능에 부정적인 영향을 미칠 수 있습니다. 따라서 Heap 메모리에서 불필요한 객체 생성을 최소화하는 것이 중요합니다.GC 최적화를 위한 6가지 전략객체 재사용새로운 객체를 생성하는 대신 기존 객체를 재사용합니다.예: 객체 풀(Object Pool) 패턴 활용불변 객체 사용불변 객체는 상태 변경이 불가능하여 새로운 객체 생성이 줄어듭니다.예: String, Integer 등의 불변 클래스 활용적절한 자료구조 선택상황에 맞는 효율적인 자료구조를 사용합니다.예: ArrayList vs LinkedList, HashMap vs TreeMap 등지역 변수 활용메..
Java에서 객체나 값을 비교할 때 주로 사용되는 두 가지 방법이 있습니다: == 연산자와 equals() 메소드입니다. 이 두 방법은 비슷해 보이지만 실제로는 매우 다른 동작을 합니다. 이 포스트에서는 이 두 가지 비교 방법의 차이점과 각각의 사용 시기에 대해 자세히 알아보겠습니다.1. 기본적인 차이==기본 데이터 타입의 값을 비교하거나 객체의 참조를 비교합니다.연산자이므로 오버라이딩할 수 없습니다.equals()Object 클래스의 메소드로, 객체의 내용을 비교합니다.개발자가 클래스에 맞게 오버라이딩하여 사용할 수 있습니다.2. 상세 비교사용 대상==: 주로 기본 데이터 타입(int, float, boolean 등)의 값 비교에 사용됩니다. 객체에 사용할 경우 참조 비교를 수행합니다.equals():..
1. 부동소수점 연산의 문제점부동소수점 수는 컴퓨터에서 실수를 표현하는 가장 일반적인 방법입니다. 그러나 이 방식은 몇 가지 중요한 한계를 가지고 있습니다.1.1 정확성 문제부동소수점 수는 이진 분수로 표현되기 때문에, 10진 소수를 정확히 표현하지 못하는 경우가 많습니다. 예를 들어:double result = 0.1 + 0.2;System.out.println(result); // 출력: 0.30000000000000004이러한 오차는 금융 거래나 정밀한 과학적 계산에서 심각한 문제를 일으킬 수 있습니다.1.2 플랫폼 의존성부동소수점 연산의 결과는 CPU 아키텍처, 운영체제, 심지어 컴파일러 설정에 따라 미세하게 다를 수 있습니다. 이는 서로 다른 환경에서 실행되는 프로그램의 일관성을 해칠 수 있습니..
Kotlin에서 로깅을 할 때 다음과 같은 패턴을 자주 볼 수 있습니다:private val logger = KotlinLogging.logger {}// 로그 사용 예logger.info { "아임포트 결제 요청 $param" }여기서 주목할 점은 로그 메시지를 중괄호 {} 로 감싸고 있다는 것입니다. 이런 방식이 단순히 스타일의 차이가 아니라 실제로 여러 이점을 제공한다는 사실을 알고 계셨나요? 이번 포스트에서는 이 방식의 주요 이점들을 살펴보겠습니다.1. 지연 평가 (Lazy Evaluation)중괄호를 사용하면 로그 메시지가 람다 함수로 래핑됩니다. 이는 해당 로그 레벨이 활성화된 경우에만 메시지가 실제로 생성되고 평가된다는 것을 의미합니다.2. 성능 향상로그 레벨이 비활성화된 경우(예: prod..
코틀린이 Java보다 편리한 이유코틀린은 Java의 여러 단점을 보완하고 현대적인 프로그래밍 패러다임을 적용하여 개발자의 생산성을 높이는 데 초점을 맞추고 있습니다. 다음은 코틀린이 Java보다 편리하다고 여겨지는 주요 이유들입니다:1. Null 안전성코틀린은 타입 시스템에 null 안전성을 내장하여 NullPointerException을 줄입니다.// Kotlinvar name: String? = null // 명시적으로 null 허용var length = name?.length // 안전 호출 연산자var nonNullName = name ?: "Default" // Elvis 연산자// JavaString name = null; // 암시적으로 null 허용int length = name != nu..
오늘은 Kotlin DSL(Domain-Specific Language)의 실용적인 활용 방법에 대해 알아보겠습니다. 특히 데이터베이스 쿼리와 테스트 케이스 작성에서 DSL을 어떻게 효과적으로 사용할 수 있는지, 그리고 왜 DSL을 사용하면 좋은지에 대해 자세히 살펴보겠습니다.1. 데이터베이스 쿼리 DSL먼저 데이터베이스 쿼리를 위한 간단한 DSL을 만들어 보겠습니다.DSL 없이 SQL 쿼리 작성하기일반적으로 SQL 쿼리를 문자열로 작성하면 다음과 같습니다:val query = """ SELECT name, age FROM users WHERE age > 18 ORDER BY name""".trimIndent()이 방식은 간단하지만, 복잡한 쿼리의 경우 가독성이 떨어지고 오류가..
코틀린의 스코프 함수: let, run, with, apply, also 완벽 가이드코틀린의 스코프 함수는 객체의 컨텍스트 내에서 코드 블록을 실행할 수 있게 해주는 강력한 기능입니다. 이 함수들을 사용하면 코드를 더 간결하고 읽기 쉽게 만들 수 있습니다. 이 글에서는 let, run, with, apply, also의 다섯 가지 스코프 함수에 대해 자세히 알아보겠습니다. 스코프 함수는 다음과 같은 특징을 가집니다:임시 스코프를 만듭니다.람다 식 내에서 객체를 간편하게 참조할 수 있게 합니다.객체의 상태를 변경하거나 객체에 대한 연산을 수행할 수 있습니다.각 스코프 함수는 두 가지 주요 차이점이 있습니다:객체 참조 방법: it (암시적) 또는 this (수신자)반환 값: 람다의 결과 또는 컨텍스트 객체이..
Kotlin은 개발자의 생산성을 높이기 위한 다양한 기능을 제공합니다. 그 중에서도 '데이터 클래스(Data Class)'는 데이터를 다루는 클래스를 정의할 때 특히 유용한 기능입니다. 이번 포스트에서는 Kotlin의 데이터 클래스에 대해 자세히 알아보겠습니다.데이터 클래스란?데이터 클래스는 데이터를 보유하는 것이 주목적인 클래스를 간편하게 만들 수 있게 해주는 Kotlin의 특별한 클래스 유형입니다. 데이터 클래스는 몇 가지 표준 기능을 자동으로 생성해주어 보일러플레이트 코드를 크게 줄여줍니다.데이터 클래스 선언데이터 클래스를 선언하는 방법은 매우 간단합니다. 클래스 앞에 data 키워드를 붙이면 됩니다.data class User(val name: String, val age: Int)이 간단한 선언..
Kotlin의 확장 함수: 기존 클래스에 새로운 기능 추가하기Kotlin은 개발자들에게 많은 편리한 기능을 제공하는데, 그 중 하나가 바로 확장 함수(Extension Functions)입니다. 확장 함수를 사용하면 기존 클래스의 소스 코드를 변경하지 않고도 새로운 기능을 추가할 수 있습니다. 이는 특히 서드파티 라이브러리나 수정할 수 없는 클래스를 다룰 때 매우 유용합니다.확장 함수란?확장 함수는 클래스의 멤버 메소드인 것처럼 호출할 수 있지만, 클래스 외부에 정의된 함수입니다. 이를 통해 기존 클래스에 새로운 동작을 "확장"할 수 있습니다.확장 함수 정의 방법확장 함수를 정의하는 기본 구문은 다음과 같습니다:fun 수신자타입.함수이름(매개변수): 반환타입 { // 함수 본문}여기서 수신자타입은 ..
보호되어 있는 글입니다.