반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 데이터과학
- 데이터분석
- 사이버보안
- 컴퓨터공학
- 디자인패턴
- 보안
- 네트워크보안
- 웹개발
- 버전관리
- 클라우드컴퓨팅
- Yes
- 딥러닝
- 인공지능
- I'm Sorry
- 프로그래밍
- 소프트웨어공학
- 알고리즘
- 프로그래밍언어
- 네트워크
- 자바스크립트
- 데이터구조
- 컴퓨터과학
- 머신러닝
- 빅데이터
- 자료구조
- 컴퓨터비전
- 소프트웨어
- 데이터베이스
- springboot
- 파이썬
Archives
- Today
- Total
스택큐힙리스트
[JAVA] 람다식과 메서드 레퍼런스 본문
반응형
🚀 왜 배우나?
자바 8 이후 함수형 프로그래밍 기능이 대거 추가되면서, 스프링 프로젝트에서도 람다식과 메서드 레퍼런스가 필수가 되었습니다.
익명 객체→람다식→메서드 레퍼런스 순으로 코드를 단축해 가독성·생산성·테스트 편의성을 모두 챙겨봅시다.
1. 람다식 한눈에 보기
- 정의 : 메서드를 ‘값처럼’ 표현한 익명 함수 표현식
- 전제 조건 : 대상은 함수형 인터페이스(추상 메서드 1개)
- 기본 문법
(매개변수) -> { 실행문; }
(a, b) -> a + b // 식(식별자 생략 가능)
() -> System.out.println() // 파라미터 없는 형태
✨ 람다식으로 코드 줄이기
// Before: 익명 구현 객체
Runnable task = new Runnable() {
@Override public void run() { log.info("Hello"); }
};
// After: 람다식
Runnable task = () -> log.info("Hello");
2. 메서드 레퍼런스란?
람다식이 “다른 메서드를 그대로 호출하기만” 할 때, 클래스::메서드명 형태로 더 짧게 표현하는 문법입니다.
4가지 사용 패턴
- 정적 메서드 참조 Math::abs
- 특정 객체의 인스턴스 메서드 System.out::println
- 임의 객체의 인스턴스 메서드 String::toLowerCase
- 생성자 참조 ArrayList::new
// 람다식
list.stream().map(num -> Math.abs(num)).forEach(System.out::println);
// 메서드 레퍼런스
list.stream().map(Math::abs).forEach(System.out::println);
3. 실전 — 스프링 서비스에 적용
@Service
@RequiredArgsConstructor
public class OrderService {
private final OrderRepository repo;
// 람다식 + 스트림으로 조건 필터링
public List<Order> highValueOrders(int minPrice) {
return repo.findAll().stream()
.filter(o -> o.getTotalPrice() >= minPrice) // 람다
.sorted(Comparator.comparing(Order::getCreatedAt)) // 메서드 참조
.toList();
}
}
- 람다식으로 가독성 있는 필터·매핑·정렬 파이프라인을 만들고
- 메서드 레퍼런스로 불필요한 변수 선언을 없앴습니다.
4. 람다 & 메서드 레퍼런스 활용 팁
- 가독성 우선 : 표현식이 길어지면 오히려 이해가 어렵습니다.
- 검증된 함수형 인터페이스 활용 : Predicate, Function, Consumer 등 표준형 먼저 고려.
- 예외 처리 : Checked 예외를 던지는 대상은 별도 래퍼로 감싸야 합니다.
- 병렬 스트림 주의 : 멀티스레드 환경에서 상태 공유 객체를 사용하지 말 것.
반응형
'개발' 카테고리의 다른 글
Redis 캐시 3대장: LRU·LFU·TTL, 언제 써야 진가를 발휘할까? (2) | 2025.07.09 |
---|---|
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 2장. 느려진 서비스, 어디부터 봐야 할까 (0) | 2025.07.09 |
자바 스프링 개발 시작하기 - 3일차 컬렉션과 제네릭으로 학생 명단 관리 (1) | 2025.07.09 |
JUnit5로 BankAccount 단위 테스트 작성법 (1) | 2025.07.08 |
자바 스프링 개발 시작하기 - 2일차 조건문·반복문과 객체 설계 (0) | 2025.07.08 |
Comments