복잡한뇌구조마냥

[JAVA] 반복문 간결하게 쓰는 법 - 람다와 메서드 참조로 리팩토링 본문

BE/JAVA

[JAVA] 반복문 간결하게 쓰는 법 - 람다와 메서드 참조로 리팩토링

지금해냥 2025. 7. 29. 10:15

☕ 자바 스트림과 람다 표현식의 간소화 과정

람다 표현식을 처음 접하면 -> 기호에 낯설 수도 있지만, 반복적인 코드를 훨씬 간결하고 읽기 쉽게 만들 수 있습니다. 이번 글에서는 반복문을 스트림과 람다로 점진적으로 간소화해보는 과정을 소개합니다.

 

✅ 1. 전통적인 반복문

for (int i = 1; i <= 5; i++) {
    System.out.println(i + "번째 반복문");
}

 

  • 익숙하지만 반복 변수를 직접 관리해야 합니다.
  • 병렬 처리나 함수형 스타일로 확장하기 어렵습니다.

 

✅ 2. 스트림 사용 + 익명 클래스

IntStream.rangeClosed(1, 5)
    .forEach(new IntConsumer() {
        @Override
        public void accept(int value) {
            System.out.println(value + "번째 반복문");
        }
    });

 

  • IntStream.rangeClosed(1, 5)으로 숫자 범위를 스트림으로 생성
  • IntConsumer를 구현한 익명 내부 클래스 사용

 

✅ 3. 람다 표현식

IntStream.rangeClosed(1, 5)
    .forEach((int value) -> {
        System.out.println(value + "번째 반복문");
    });

 

  • 익명 클래스를 람다 표현식으로 간소화
  • 타입 명시 가능하지만 생략도 가능함

 

✅ 4. 람다식 간소화

IntStream.rangeClosed(1, 5)
    .forEach(value -> System.out.println(value + "번째 반복문"));

 

  • 매개변수 타입 생략
  • 중괄호도 한 줄이면 생략 가능
  • 가장 간결한 형태의 람다

 

✅ 5. 인스턴스 메서드 참조

IntStream.rangeClosed(1, 5)
    .forEach(System.out::println);

 

  • 여기서는 "n번째 반복문"이 아닌 숫자만 출력됩니다.
  • System.out은 PrintStream의 인스턴스이며, println은 인스턴스 메서드입니다.
  • 따라서 특정 객체의 인스턴스 메서드 참조입니다.

📎 전체 코드

import java.util.function.IntConsumer;
import java.util.stream.IntStream;

public class Main {
    public static void main(String[] args) {
        System.out.println("1. 스트림 미사용");
        for (int i = 1; i <= 5; i++) {
            System.out.println(i + "번째 반복문");
        }

        System.out.println("2. 스트림 사용");
        IntStream.rangeClosed(1, 5)
                .forEach(new IntConsumer() {
                    @Override
                    public void accept(int value) {
                        System.out.println(value + "번째 반복문");
                    }
                });

        System.out.println("3. 람다 표현식 사용");
        IntStream.rangeClosed(1, 5)
                .forEach((int value) -> {
                    System.out.println(value + "번째 반복문");
                });

        System.out.println("4. 람다식 간소화");
        IntStream.rangeClosed(1, 5)
                .forEach(value -> System.out.println(value + "번째 반복문"));

        System.out.println("5. 인스턴스 메서드 참조 (특정 객체의 인스턴스 메서드)");
        IntStream.rangeClosed(1, 5)
                .forEach(System.out::println);
    }
}

✍️ 마무리

람다 표현식과 스트림을 적절히 사용하면 코드가 짧고 명확하며,
가독성 높은 함수형 스타일로 바꿀 수 있습니다.

 

LIST