Java

· 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
⬛ 애노테이션의 필요성🟢 애노테이션 필요성기존의 리플렉션 서블릿으로는 메서드와 URL 매핑의 유연성이 부족.메서드와 URL을 별도로 매핑하거나, 주석과 같은 정보를 활용해 프로그램이 동적으로 동작할 수 있는 방법이 필요.애노테이션은 컴파일러나 런타임에서 처리 가능한 메타데이터를 제공하여 이런 문제를 해결.@Retention(RetentionPolicy.RUNTIME)public @interface SimpleMapping { String value();}public class TestController { @SimpleMapping("/home") public void home() { System.out.println("홈 실행"); }}여기서 핵심은 애노테이션은 메타데이터를 활용해 동..
· Java
이번 강의에서는 간단한 클라이언트-서버 네트워크 프로그램을 만들어보자.⬛ 리플렉션 개념🟢 리플렉션Java 프로그램이 실행 중에 자기 자신을 들여다보고, 구조를 분석하거나 조작할 수 있는 기능을 의미한다.이를 통해 클래스, 메서드, 필드 등의 메타데이터를 동적으로 탐색하거나 실행할 수 있다. 🟢 리플렉션 제공 기능클래스 정보 조회:클래스 이름, 부모 클래스, 구현된 인터페이스, 패키지 정보를 얻을 수 있음.메서드, 필드, 생성자 등의 정보를 조회할 수 있음.메서드 호출:특정 메서드의 이름을 통해 런타임에 메서드를 동적으로 실행할 수 있음.필드 값 변경:객체의 필드 값을 직접 변경하거나 읽을 수 있음.객체 생성:특정 클래스의 생성자를 이용해 객체를 동적으로 생성할 수 있음.⬛ 클래스 메타데이터 조회pub..
고쩡이
'Java' 카테고리의 글 목록