전체 글138 [자바] 스트림 API 자바 8에서 도입된 스트림 API는 컬렉션이나 배열의 데이터를 효율적으로 처리할 수 있도록 도와주는 기능이다.원본 데이터를 변경하지 않으며, 연산 파이프라인을 통해 중간 연산과 최종 연산을 체이닝하여 필터링, 변환, 계산 등을 수행할 수 있다.이를 통해 코드의 가독성을 높이고, 간결하면서도 강력한 데이터 처리가 가능하다.스트림 생성스트림은 다양한 방법으로 생성할 수 있다. 1. 컬렉션에서 생성public class Test { public static void main(String[] args) { List fruits = List.of("apple", "banana", "mango", "peach", "orange"); Stream stream = fruits.stream.. 2025. 4. 5. 함수형 프로그래밍이란? 함수형 프로그래밍이란? 무엇을 할 것인지 상태 변화 없는 순수 함수를 조합하여 문제를 해결하는 프로그래밍 방식을 의미한다. 함수형 프로그래밍은 다음과 같은 특징이 있다.순수 함수 : 같은 입력에 대해서 항상 같은 출력을 반환하며, 외부 상태를 변경하지 않거나, 외부 상태에 의존하지 않는 함수불변성 : 상태 변경이 필요한 경우 새로운 데이터 구조를 생성해서 반환함수를 일급 객체로 취급되기 때문에 함수를 인자로 전달하거나 반환하는 고차 함수 구현이 가능 이제부터 위 특징에 대해 자바 코드로 하나씩 자세히 알아보도록 하겠다. 참고로 자바는 명령형, 객체지향이 주된 패러다임이고, 거기에 람다, 함수형 인터페이스 등 함수형 문법이 일부 도입된 멀티 패러다임 언어이다.순수 함수 같은 입력에 대해서 항상 같은 출력을.. 2025. 4. 4. 프로그래밍 패러다임 프로그래밍 패러다임이란 프로그래밍을 어떤 방식으로 접근하고 문제를 해결할 것인가에 대한 철학이나 스타일을 의미한다.대표적인 프로그래밍 패러다임은 아래와 같이 구분할 수 있다.명령형 프로그래밍 : 프로그램이 어떻게 동작해야 하는지 자세히 설명하는 방법절차지향 프로그래밍 : 프로시저나 함수를 통해 프로그램을 순차적으로 절차(과정) 중심으로 작성하는 방법 (C, Pascal)객체지향 프로그래밍 : 각각 역할과 행동을 부여한 객체들 간의 상호작용을 통해 문제를 해결하는 방법 (Java, C++)선언형 프로그래밍 : 프로그램이 무엇을 해야 하는지 자세히 설명하는 방법함수형 프로그래밍 : 상태 변경 없는 순수 함수를 조합하여 작성하는 방법 (SQL, HTML)명령형 프로그래밍명령형 프로그래밍이란 컴퓨터에게 어떻게 .. 2025. 4. 4. [자바] 람다식과 함수형 인터페이스 람다식은 자바 8에서 도입된 기능으로, 익명 함수를 간결하게 표현하는 방법이다. 익명 함수는 이름이 없는 함수로, 일급 객체로 취급되기 때문에 변수처럼 사용하거나 매개변수로 전달할 수 있다.일급 객체 (First-Class Object)란?- 변수에 저장 가능- 함수의 매개변수로 전달 가능- 함수의 반환값으로 사용 가능위 조건을 만족하는 객체를 일급 객체라고 한다. 먼저 람다식을 알아보기 전에, 자바에서 전통적으로 함수를 선언하는 방식을 살펴보겠다.아래의 코드는 자바에서 메서드 선언 방식의 예이다.public class Test { public static void method() { System.out.println("method 호출"); } public static vo.. 2025. 4. 3. [자바] 디폴트 메서드 디폴트 메서드(default method)는 Java 8부터 추가된 기능으로 인터페이스에서 메서드의 기본 구현을 제공할 수 있도록 하는 기능이다.기존 인터페이스는 추상 메서드만을 제공하고 하위 클래스에서 이를 구현하도록 강제했는데 디폴트 메서드가 생긴 이유는 무엇일까? 다음 예제를 살펴보자.interface Vehicle { void move(); // 추상 메서드}class Car implements Vehicle { @Override public void move() { System.out.println("자동차가 움직인다."); }}class Bus implements Vehicle { @Override public void move() { .. 2025. 4. 3. [자바] Optional 자바에서 null은 값이 없음을 나타내는 방법인데, null 참조에 대해 메서드를 호출하면 NullPointerException이 발생할 수 있다.Optional 클래스는 null을 안전하게 처리하기 위해 도입된 기능으로 해당 클래스는 값이 존재할 수도, 없을 수도 있음을 표현한다. Optional 생성 방법Optional optional = Optional.of("Hello"); // 값이 반드시 있어야 함Optional optionalEmpty = Optional.empty(); // 비어 있는 OptionalOptional optionalNullable = Optional.ofNullable(null); // null 허용 Optional의 값을 존재 여부 확인Optional optional = .. 2025. 4. 3. [Kafka] Docker Compose를 이용하여 Kafka 환경 구성하기 [Kafka] Apache Kafka, Zookeeper 개념Apache Kafka는 대용량의 데이터를 빠르게 처리하고 실시간 스트리밍을 지원하는 pub/sub 모델의 분산 메시지 브로커로 주로 로그 처리, 이벤트 기반 아키텍처, 데이터 스트리밍 등에 활용된다.Kafka는hbb-devlog.tistory.com 이번에는 Docker-Compose를 이용하여 간단하게 Kafka 환경을 구성해보도록 하겠다. docker-compose-local.yml 파일 작성version: "3.8"services: zookeeper: image: confluentinc/cp-zookeeper:latest environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEE.. 2025. 3. 8. [Kafka] Apache Kafka, Zookeeper 개념 Apache Kafka는 대용량의 데이터를 빠르게 처리하고 실시간 스트리밍을 지원하는 pub/sub 모델의 분산 메시지 브로커로 주로 로그 처리, 이벤트 기반 아키텍처, 데이터 스트리밍 등에 활용된다.Kafka는 분산 환경에서 안정적으로 운영되기 위해 Zookeeper를 사용하여 클러스터를 관리한다. Zookeeper는 Kafka의 메타데이터 저장, 브로커의 상태 감시, 리더 선출과 같은 중요한 역할을 수행한다. Kafka의 주요 구성 요소Broker: Kafka 서버로, Producer로부터 메시지를 받아 저장하고, Consumer에게 전달하는 역할을 한다.Topic & Partition:Topic: 메시지를 논리적으로 분류하는 단위.Partition: 토픽을 분할하여 저장하는 단위로 토픽은 하나 이상.. 2025. 3. 6. [Spring] MapStruct 적용 MapStruct란 Java 애플리케이션에서 객체 간 매핑을 편리하게 해주는 코드 생성 라이브러리로 DTO(Data Transfer Object)와 엔티티 간 변환 작업을 간편하게 하기 위해 사용한다. 1. MapStruct는 불필요한 리플렉션을 사용하지 않고 컴파일 타임에 매핑 코드를 생성하여 성능이 뛰어나다.2. 매핑을 위한 반복적인 코드를 줄이고, 간결하게 작성이 가능하다.이 때 Annotation processor를 이용해 자동화 된 매핑을 제공한다. (컴파일 타임에 Impl 클래스를 생성)Lombok을 사용하는 경우 Lombok의 getter/setter/builder를 이용하여 매핑을 하기 때문에 이 때는 Lombok 라이브러리 의존성이 먼저 추가되어 있어야 한다.Annotation proce.. 2025. 2. 28. 이전 1 2 3 4 5 ··· 16 다음