Java 8 이상에서 지원하는 문법으로, 메소드 선언 없이 구현부만 작성할 수 있게 해주는 익명 함수 표현식입니다.
| 항목 | 설명 |
|---|---|
| 사용 목적 | 메소드를 간결하게 표현하기 위함 |
| Java 문법 | () -> {} |
| JavaScript 문법 | () => {} |
| 인터페이스 | 설명 | 주요 메서드 |
|---|---|---|
Function<T, R> | 입력 T를 받아, 결과 R을 반환 | .apply(T) |
Supplier<T> | 입력 없이 결과 T를 반환 | .get() |
Consumer<T> | 입력 T를 받아 반환값 없음 | .accept(T) |
Predicate<T> | 입력 T를 받아 boolean 반환 | .test(T) |
데이터의 연속된 흐름(Stream) 을 처리할 수 있도록 해주는 기능.
데이터 흐름 구조:
[ 매개변수 ] ---> [ 중간연산 ] ---> [ 최종연산 ]
| 종류 | 메서드 | 설명 |
|---|---|---|
| 중간 연산 | map() | 데이터 변환 (반환) |
filter() | 조건에 맞는 데이터만 반환 | |
sort() | 정렬 | |
distinct() | 중복 제거 | |
limit() | 추출 데이터 개수 제한 | |
| 최종 연산 | forEach() | 단순 반복 |
collect() | 결과를 컬렉션으로 수집 | |
reduce() | 누적 처리(합계 등)에 사용 |
이미 정의된 메소드를 참조해서 사용하는 람다식의 간결한 표현 방법입니다.
| 구분 | 문법 | 설명 |
|---|---|---|
| 정적 메소드 참조 | 클래스명::정적메소드명 | 객체 없이 사용 (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);
리액트에서는 로그인 후 세션에 정보를 저장해도, 세션 정보를 직접 접근할 수 없습니다.
이를 해결하기 위해 CORS 설정(CorsConfig) 으로 HTTP 세션 유지를 허용해야 합니다.
| 항목 | 설명 | 예시 |
|---|---|---|
| 도메인 문제 | 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" } } |
@Configuration 어노테이션 추가 → 설정 관련 Bean 등록WebMvcConfigurer 인터페이스 구현 후 addCorsMappings() 메서드 오버라이드registry 객체로 세부 CORS 정책 설정registry.addMapping("허용할 컨트롤러 URL") // 전체 허용 시: "/**"
.allowedOrigins("허용할 도메인") // 전체 허용 시: "*"
.allowedMethods("허용할 HTTP 메소드") // 전체 허용 시: "*"
.allowCredentials(true) // HTTP 인증(세션 유지) 허용
.allowedHeaders("*"); // HTTP 헤더 정보 허용