Java

· Java
1. 프로그래밍 패러다임 개요명령형(Imperative): 어떻게(How) 실행할지를 상세히 기술절차지향(Procedural), 객체지향(OOP)이 포함선언형(Declarative): 무엇(What)을 할지를 선언하고 구현 방식은 추상화SQL, HTML, 함수형 프로그래밍 등이 속함 ​2. 함수형 프로그래밍이란?정의: 순수함수(pure function)를 조합하고,부수효과(side effect)와 가변상태(mutable state)를 최소화하는 선언형 스타일핵심 특징순수 함수(Pure Function)부수 효과 최소화 (Side Effect Minimization)불변성(Immutable State)일급 시민 함수(First-class Functions)선언적 접근(Declarative)함수 합성(Com..
· Java
고급 3편 자바 섹션12 병렬 스트림1️⃣ 단일 스트림 (Sequential Stream)한 줄씩 순서대로 실행됨 → main 스레드 1개 사용성능: 1초 작업 × 8개 → 8초 소요int sum = IntStream.rangeClosed(1, 8) .map(HeavyJob::heavyTask) // 1초 작업 .sum();[main] calculate 1 → 10 ... [main] calculate 8 → 80 총 소요 시간: 약 8000ms 2️⃣ 스레드 직접 사용 (Thread 객체)직접 Thread를 만들어 작업 분할 처리예: thread-1, thread-2가 병렬 수행Thread t1 = new Thread(() -> task(..
· Java
고급 3편 자바 섹션11 Optional1. Optional이 필요한 이유NullPointerException(NPE): null 참조 접근 시 런타임 예외 발생.가독성 저하: if (obj != null) 반복.의도가 불명확: 반환값이 null일지 아닐지 메서드만 보고 알 수 없음.➡️ 이를 해결하기 위해 Java 8에서 Optional 클래스가 도입됨.2. Optional 생성 방법Optional.of("value") // null 아님 확신Optional.ofNullable(value) // null 가능성 있음Optional.empty() // 명시적 빈값3. Optional 값 꺼내기 (get() 대신 아래 사용 권장)opt.orElse("기본값"); //..
· Java
자바 스트림(Stream) API 핵심 정리스트림(Stream)이란?데이터 흐름을 추상화한 자바 8 기능Collection, 배열 등을 선언형 방식으로 연속 처리 가능마치 데이터가 "물 흐르듯" 연산 파이프라인을 따라 처리됨🔄 스트림 처리 흐름1. 스트림 생성List list = List.of("A", "B");Stream stream = list.stream(); 2. 중간 연산 (Intermediate Operation)데이터 변환 or 필터링.filter() – 조건 필터링.map() – 요소 변환3. 최종 연산 (Terminal Operation)스트림 소비 → 실행 시작! .toList() – 리스트로 변환.forEach() – 요소마다 실행4. 내부 반복 방식 → 루프 직접 작성 필요 없음 ..
· Java
메서드 참조란?이미 정의된 메서드를 람다 표현식 대신 간결하게 표현하는 문법예: (x, y) -> add(x, y) → 클래스명::메서드명메서드 참조의 4가지 유형1. 정적 메서드 참조클래스의 static 메서드 참조Math::max, Integer::parseInt2. 특정 객체의 인스턴스 메서드 참조인스턴스를 명확히 지정person::introduce3. 생성자 참조생성자 호출 참조Person::new4. 임의 객체의 인스턴스 메서드 참조매개변수로 들어오는 객체의 메서드 참조Person::introduce, String::toUpperCase1. 메서드 참조를 쓰는 이유코드 간결화: 람다식보다 짧고 명확중복 제거: 공통 로직을 하나의 메서드로 참조 가능가독성 향상: add(x, y)처럼 내부 구현만 ..
· Java
본 내용은 강의 내용 뿐 아니라, 추가 공부 정리 내용도 포함합니다. 혹시 잘못된 내용이 있다면 지적 적극환영! :) ✅ 섹션 4 람다활용 - 필터, 맵🔹 1. 람다의 활용: 필터(Filter)와 맵(Map)Filter (Predicate): 조건에 맞는 요소만 골라내기Map (Function): 요소를 다른 값으로 변환하기// 짝수 필터filter(numbers, n -> n % 2 == 0);// 문자열 길이로 변환map(strings, s -> s.length());2. 유틸리티 패턴화 → 재사용성 증가GenericFilter 와 GenericMapper 클래스를 만들어 모든 타입에 유연하게 대응 가능함.GenericFilter.filter(numbers, n -> n > 5);GenericMap..
· Java
Java Lambda & invokedynamic 심층 분석1. 들어가며Java 8부터 도입된 람다 표현식(Lambda Expression)은 코드를 간결하게 만들고 함수형 프로그래밍 스타일을 지원하기 위한 핵심 기능이다. 단순한 문법적 설탕(syntactic sugar)처럼 생각할 수 있지만, 실제 내부 동작은 전혀 다르다. 특히 invokedynamic 명령과 LambdaMetafactory의 역할을 알면 람다의 진짜 정체와 동작 메커니즘을 깊이 이해할 수 있다. (이 글에서는 초보자도 따라오기 쉽도록 쉽게 글을 써봤습니다.혹시 읽다가 틀린내용이 있으면 알려주면 감사하겠습니다.) 3. 람다와 익명 클래스의 차이점Runnable r1 = () -> System.out.println("Lambda"); ..
· Java
✅ 1. 함수형 인터페이스란?추상 메서드가 단 하나만 있는 인터페이스람다식을 사용하려면 반드시 함수형 인터페이스 필요@FunctionalInterface 사용 (컴파일 타임 체크)@FunctionalInterfaceinterface MyFunction { int apply(int x);}✅ 2. 제네릭 도입 전/후 비교방식코드 재사용타입 안정성특징StringFunction, NumberFunction 등 별도 정의❌✅타입마다 따로 만들어야 함ObjectFunction✅❌다운캐스팅 필요, 타입 불안정GenericFunction✅✅타입 안정성 + 재사용성 확보제네릭 도입후 아래와같이 편리하게 사용 가능하다.@FunctionalInterfaceinterface GenericFunction { R a..
· Java
1. 람다가 필요한 이유핵심 개념코드 중복 제거 및 재사용성을 위해 코드의 변하는 부분과 변하지 않는 부분을 분리할 필요가 있음메서드가 처리해야 하는 데이터(값)뿐만 아니라 코드 조각(동작)도 전달할 수 있어야 함2. 값 매개변수화 (Value Parameterization)메서드에서 문자열, 숫자와 같은 값을 직접 넣는 대신, 외부에서 매개변수를 통해 값을 전달받아 메서드 재사용성을 높임예: 문자열 "Hello Java" → 파라미터로 전달받음3. 동작 매개변수화 (Behavior Parameterization)코드 조각(동작)을 외부에서 전달받아 실행할 수 있도록 구성하는 방식클래스 또는 익명 클래스를 이용하여 인터페이스를 구현한 후, 메서드를 통해 실행하는 형태인터페이스로 정의한 메서드를 구현한 클..
· Java
⬛ 애노테이션 기반 서블릿 설계🟢 애노테이션 서블릿애노테이션 활용: @Mapping 애노테이션으로 URL 경로와 메서드를 연결하여 간결하고 효율적인 매핑을 구현.리플렉션 사용: 메서드의 애노테이션 값을 기반으로 호출할 메서드를 동적으로 탐색.유연성과 효율성: 필요한 파라미터만 메서드에 전달하도록 설계(AnnotationServletV2), 해시맵.처음엔 잘 구조가 커서 파악이 잘 안됐는데, 계층적 탐색이라고 생각하니 이해가 쉽게 됐다.큰 폴더에서 세부 폴더로 점점 구체적인 파일을 찾아가는 과정과 비슷하다!HttpServer:HTTP 요청을 받아 ServletManager를 통해 적절한 서블릿으로 전달.ServletManager:URL 경로에 따라 요청을 적합한 서블릿(AnnotationServletV3..
고쩡이
'Java' 카테고리의 글 목록