개발일지349 싱글톤 패턴 구현 방법 프로그래밍을 하다 보면 다양한 소프트웨어 디자인 패턴을 접하게 됩니다. 그 중에서도 싱글톤 패턴(Singleton Pattern)은 프로그램 개발에서 자주 사용되는 디자인 패턴 중 하나입니다. 이번 글에서는 자바(Java)에서 싱글톤 패턴이 무엇인지, 어떻게 구현할 수 있는지에 설명하겠습니다.싱글톤 패턴이란?싱글톤(Singleton)은 객체를 단 하나만 생성하여 사용하는 디자인 패턴입니다. GoF의 디자인 패턴 중 생성(Creational) 패턴에 해당하며, 프로그램에서 하나의 인스턴스를 공통으로 사용하는 경우에 자주 사용됩니다. 간단히 말해, 싱글톤 패턴은 어떤 클래스가 오직 하나의 인스턴스만 갖도록 보장하는 방식입니다.싱글톤 패턴을 사용하는 이유메모리와 성능 측면에서의 효율싱글톤을 사용하지 않으면, .. 개발일지/디자인 패턴 2024. 11. 18. 레이어드 아키텍처와 도메인 주도 설계(DDD) 레이어드 아키텍처(Layered Architecture)는 가장 흔하게 사용되는 아키텍처 패턴입니다. 말 그대로 프로그램 내에서 계층을 나누는 설계 방식이며, 의존의 방향은 위에서 아래로만 내려갑니다. 보통 4개의 표준 레이어(Presentation, Business, Persistence, DataBase)로 구성되며, 규모에 따라 레이어를 합치거나 추가하기도 합니다.스프링 프레임워크를 예로 들면 다음과 같은 계층 구조를 갖게 됩니다:Controller → Service → Domain → Repository각 계층은 특정 역할과 관심사(화면 표시, 비즈니스 로직 수행, DB 작업 등)별로 나누어지며, 이를 '관심사의 분리(Separation of Concern)'라고 합니다. 즉, 각 계층은 자신만의.. 개발일지/설계 패턴 2024. 11. 18. JS 프로토타입이란 자바스크립트는 프로토타입(prototype) 기반의 독특한 프로그래밍 언어입니다. 클래스 기반의 객체 지향 프로그래밍도 가능하게 하는 이 프로토타입은 자바스크립트에서 객체 간의 상속을 이해하는 핵심 개념이죠. 이번 글에서는 자바스크립트에서 객체의 프로토타입을 어떻게 다뤄야 하는지, 프로토타입의 설정과 변경은 어떻게 이루어지는지 등을 살펴보겠습니다.“proto” 속성: 프로토타입의 비밀 통로자바스크립트에서 모든 객체는 자신의 프로토타입을 “proto”라는 비밀 속성에 저장하고 있습니다. 이 속성은 객체가 어디서 상속받았는지, 상속 체인의 상위에 무엇이 있는지를 알 수 있게 해주는 중요한 속성입니다.하지만, 이 “proto”는 현재 폐기된(deprecated) 속성입니다. 따라서 애플리케이션 코드에서 직접적.. 개발일지/자바스크립트 2024. 11. 13. JS 객체에 특정 속성이 있는지 확인하는 법 1. in 연산자 사용하기자바스크립트에서 객체에 어떤 속성이 있는지 확인하는 가장 널리 알려진 방법은 in 연산자를 사용하는 것입니다. 이 연산자는 다음과 같은 형태로 사용합니다:const obj = { a: 1 };"a" in obj; // true // 객체에 'a'라는 속성이 존재하므로 true 반환"b" in obj; // false // 객체에 'b'라는 속성이 없으므로 false 반환in 연산자는 객체에 해당 속성이 존재하면 true를, 존재하지 않으면 false를 반환합니다. 객체를 생성한 후에도 얼마든지 속성을 추가할 수 있기 때문에 in 연산자의 결과는 객체의 현재 상태에 따라 달라질 수 있습니다.obj.b = 2;"b" in obj; // true // 'b' 속성을 추가했기 때문에.. 개발일지/자바스크립트 2024. 11. 13. infer와 never 차이 이해하기 TypeScript(이하 TS)는 JavaScript(이하 JS)에서 발생할 수 있는 런타임 에러를 줄이기 위해 타입 이론을 도입한 정적 분석 도구입니다. 이러한 타입 시스템은 우리 코드가 더 안정적이고 오류가 적도록 도와줍니다. 하지만 많은 개발자들은 TS를 활용하면서 타입 추론의 깊은 부분에 대해서는 익숙하지 않은 경우가 많죠. 특히 라이브러리 개발을 할 때는 타입 추론이 제대로 이루어지는 것이 필수적입니다. 이번 글에서는 초보 개발자도 이해할 수 있도록 TS의 타입 이론과 타입 추론의 기초부터 고급 내용까지 차근차근 설명해 드리겠습니다.이 글을 읽으면 좋은 사람JavaScript 라이브러리를 개발하고 싶은 개발자TypeScript에서 타입이 추론되는 원리에 대해 궁금한 개발자infer 키워드와 고급.. 개발일지/TypeScript 2024. 11. 11. Virtual Thread, 기존 스레드 모델 차이점 Java의 JDK 21에 새롭게 도입된 Virtual Thread는 기존의 커널 스레드(Kernel-Level Thread, KLT)와 사용자 스레드(User-Level Thread, ULT) 모델을 개선한 기능입니다. 이 글에서는 기존 스레드 모델과 Virtual Thread의 차이점, 그리고 이를 통해 얻을 수 있는 장점을 초보자도 쉽게 이해할 수 있도록 정리해 보겠습니다.기존 Java 스레드 모델 이해하기기존 Java의 스레드 모델은 주로 KLT와 1:1로 매핑되어 운영되었습니다. 이 모델에서 Java는 각 스레드가 운영체제의 커널에 의해 관리되었고, 멀티코어 CPU의 자원을 효율적으로 활용할 수 있었습니다. Java의 java.lang.Thread는 결국 커널 스레드로 실행되며, JVM은 이를 J.. 개발일지/자바 2024. 11. 8. 자바스크립트에서 데이터 그룹화하기: groupBy() 활용법 자바스크립트를 이용하여 데이터를 처리하는 과정에서도 데이터를 특정 기준에 따라 그룹화하는 작업이 자주 필요합니다. 이번 포스팅에서는 자바스크립트에서 데이터를 효과적으로 그룹화하는 방법을 소개하겠습니다. 특히 최신 자바스크립트에서 사용할 수 있는 Object.groupBy()와 Map.groupBy()를 활용하여 간단하고 가독성 높은 코드를 작성하는 방법에 대해 알아보겠습니다.기존 데이터 그룹화 방법우선 데이터를 그룹화하는 작업을 하기 위해 reduce() 함수나 반복문을 이용한 기존 방법은 코드가 길고 유지보수가 어렵다는 단점이 있었습니다. 예를 들어, 여러 사용자의 이름, 나이, 국가 정보를 가진 배열이 있을 때, 국가별로 사용자를 분류하고 싶다고 가정해봅시다.const users = [ { name.. 개발일지/자바스크립트 2024. 11. 1. 스프링 부트에서 데이터 그룹화하기: groupBy() 활용법 자바 스프링 부트를 이용하여 데이터를 처리하는 과정에서도 자바스크립트와 마찬가지로 데이터를 특정 기준에 따라 그룹화하는 작업이 자주 필요합니다. 이번 포스팅에서는 자바 스프링 부트에서 데이터를 효과적으로 그룹화하는 방법을 소개하겠습니다. 특히 최신 자바 버전에서 제공하는 Stream API의 Collectors.groupingBy()를 활용하여 간단하고 가독성 높은 코드를 작성하는 방법에 대해 알아보겠습니다.기존 데이터 그룹화 방법우선 데이터를 그룹화하는 작업을 하기 위해 반복문과 조건문을 이용한 기존 방법은 코드가 길고 유지보수가 어렵다는 단점이 있었습니다. 예를 들어, 여러 사용자의 이름, 나이, 국가 정보를 가진 리스트가 있을 때, 국가별로 사용자를 분류하고 싶다고 가정해봅시다.import java.. 개발일지/스프링 2024. 11. 1. 스프링 부트에서 최초 실행 시 동작하는 로직 애플리케이션을 운영하다 보면 애플리케이션이 실행되는 시점에 단 한 번만 실행되어야 하는 로직을 정의할 필요가 있는 경우가 많습니다. 예를 들어, 초기 설정값을 미리 로딩하는 Warm up 과정이나 환경 설정을 기반으로 하는 로직이 이에 해당합니다. 그렇다면 이처럼 최초 1회 실행되어야 하는 로직은 어디에 정의해야 할까요?그 방법을 네 가지로 나누어 상세히 소개합니다.1. Bean 생명주기를 이용하는 방법스프링 부트에서 빈(Bean)의 생명주기를 활용하여 최초 실행 로직을 정의할 수 있습니다. 가장 많이 사용되는 방법으로 생성자(Constructor)와 @PostConstruct 어노테이션을 사용하는 방법이 있습니다.1.1 생성자(Constructor) 이용@Slf4j@Componentpublic clas.. 개발일지/스프링 2024. 10. 31. Faker 라이브러리 사용하는 방법 1. Faker 라이브러리란?Faker는 무작위 더미 데이터를 생성하기 위한 라이브러리로, 테스트 환경이나 샘플 데이터를 생성하는 데 매우 유용합니다. 이름, 주소, 전화번호, 회사명 등 현실감 있는 다양한 데이터를 만들어주기 때문에 프로젝트에서 테스트 데이터를 쉽게 얻을 수 있습니다.2. 프로젝트에 Faker 라이브러리 추가하기Faker를 사용하려면 프로젝트에 이 라이브러리를 추가해야 합니다. Spring Boot 프로젝트는 일반적으로 Maven이나 Gradle 빌드 도구를 사용하므로, 각각의 방식으로 Faker 라이브러리를 추가하는 방법을 살펴보겠습니다.2.1 Maven을 사용하는 경우pom.xml 파일에 Faker 의존성을 추가하세요. com.github.javafaker javafake.. 개발일지/스프링 2024. 10. 31. 코드 실행 특정 시간 대기/지연 방법 JavaScript에서 코드의 실행을 특정 시간 동안 지연시키고 싶을 때가 종종 있습니다. 이럴 때 유용하게 사용할 수 있는 것이 바로 Promise와 setTimeout을 조합한 방법입니다. 간단하게 한 줄짜리 함수로 정의해두고 호출하는 방식으로 손쉽게 구현할 수 있습니다.다음은 실행 지연을 위한 간단한 함수입니다. const delayTime = async (millisec) => new Promise((resolve) => setTimeout(resolve, millisec)); 이 함수를 사용하면 코드의 실행을 원하는 시간만큼 지연시킬 수 있습니다. 예를 들어 delayTime() 함수를 호출하면 Promise 객체가 반환되므로, then()을 이용한 콜백 함수 방식이나 async/await 방식.. 개발일지/자바스크립트 2024. 10. 31. Gradle 의존성 설정의 이해 - api와 implementation의 차이 Gradle에서 외부 라이브러리를 프로젝트에 추가할 때 compileOnly, runtimeOnly, implementation, api 등 다양한 키워드를 사용할 수 있습니다. 이 중에서도 api와 implementation은 가장 자주 사용되는 옵션으로, 각각의 기능과 동작 방식이 다르기 때문에 상황에 맞게 사용해야 프로젝트의 의존성을 효율적으로 관리할 수 있습니다. 이 글에서는 api와 implementation의 차이와 사용법을 자세히 알아보겠습니다.Gradle 의존성 설정 기본 예시// build.gradle 파일dependencies { api 'org.apache.httpcomponents:httpclient:4.5.7' implementation 'org.apache.common.. 개발일지/스프링 2024. 10. 29. 이전 1 2 3 4 ··· 30 다음