2025년 9월 30일 화요일 (89일차)

Jeonghoon·2025년 9월 30일

jeonghoon's Study

목록 보기
92/128

🧩 Lambda, Stream API, Method Reference, React 정리


☕ Lambda (람다식)

Java 8 이상에서 지원하는 문법으로, 메소드 선언 없이 구현부만 작성할 수 있게 해주는 익명 함수 표현식입니다.

항목설명
사용 목적메소드를 간결하게 표현하기 위함
Java 문법() -> {}
JavaScript 문법() => {}

💡 주요 사용처

  1. Stream API — 추상 메서드 구현체로 사용 (컬렉션 프레임워크와 함께)
  2. Java GUI 프로그램 내 이벤트 처리 시 사용

⚙️ 주요 함수형 인터페이스

인터페이스설명주요 메서드
Function<T, R>입력 T를 받아, 결과 R을 반환.apply(T)
Supplier<T>입력 없이 결과 T를 반환.get()
Consumer<T>입력 T를 받아 반환값 없음.accept(T)
Predicate<T>입력 T를 받아 boolean 반환.test(T)

🌊 Stream API

데이터의 연속된 흐름(Stream) 을 처리할 수 있도록 해주는 기능.

데이터 흐름 구조:

[ 매개변수 ] ---> [ 중간연산 ] ---> [ 최종연산 ]

⚙️ 주요 연산

종류메서드설명
중간 연산map()데이터 변환 (반환)
filter()조건에 맞는 데이터만 반환
sort()정렬
distinct()중복 제거
limit()추출 데이터 개수 제한
최종 연산forEach()단순 반복
collect()결과를 컬렉션으로 수집
reduce()누적 처리(합계 등)에 사용

🔗 메소드 레퍼런스 (Method Reference)

이미 정의된 메소드를 참조해서 사용하는 람다식의 간결한 표현 방법입니다.

구분문법설명
정적 메소드 참조클래스명::정적메소드명객체 없이 사용 (static)
인스턴스 메소드 참조객체명::메소드명인스턴스를 통해 접근
생성자 참조클래스명::new객체 생성 시 참조
// ✅ static 메소드를 이용한 메소드 레퍼런스
Integer.parseInt("123");

Function<String, Integer> function = Integer::parseInt;
function.apply("123");

// ✅ 생성자를 이용한 메소드 레퍼런스
names.forEach(name -> new MemberDto(name));

// 위 코드를 더 간결히 표현
names.forEach(Member::new);

⚛️ React (리액트)와 Spring 연동 시 주의 사항

리액트에서는 로그인 후 세션에 정보를 저장해도, 세션 정보를 직접 접근할 수 없습니다.
이를 해결하기 위해 CORS 설정(CorsConfig) 으로 HTTP 세션 유지를 허용해야 합니다.

⚠️ Axios 사용 시 주의점

항목설명예시
도메인 문제Spring과 React는 서로 다른 도메인 사용 → 전체 URL 작성 필요http://localhost:8080/...
Credentials 허용JS에서 세션 유지 위해 설정const option = { withCredentials: true };
전송 타입 설정기본값은 JSON. Form, File 전송 시 헤더 변경 필요
Form 전송 헤더const option = { headers: { "Content-Type": "application/x-www-form-urlencoded" } }
File 업로드 헤더const option = { headers: { "Content-Type": "multipart/form-data" } }

⚙️ CorsConfig 설정 방법

  1. 클래스에 @Configuration 어노테이션 추가 → 설정 관련 Bean 등록
  2. WebMvcConfigurer 인터페이스 구현 후 addCorsMappings() 메서드 오버라이드
  3. registry 객체로 세부 CORS 정책 설정
registry.addMapping("허용할 컨트롤러 URL") // 전체 허용 시: "/**"
        .allowedOrigins("허용할 도메인")        // 전체 허용 시: "*"
        .allowedMethods("허용할 HTTP 메소드")    // 전체 허용 시: "*"
        .allowCredentials(true)                // HTTP 인증(세션 유지) 허용
        .allowedHeaders("*");                 // HTTP 헤더 정보 허용

0개의 댓글