Back-End/Java

12. 내부 클래스, 람다식, 스트림

Yerin Thea Yoo 2026. 2. 12. 00:33

Java는 원래 클래스 중심 언어지만, Java 8 이후 함수형 프로그래밍 요소가 강화되었다.

이 흐름을 이해하려면 내부 클래스 → 람다식 → 스트림 순서로 보는 것이 좋다.

 

1. 내부 클래스(Inner Class)

클래스 내부에 정의된 클래스를 내부 클래스라고 한다.

class Outer {
	class Inner {
    	void print() {
        	System.out.printIn("Inner Class");
        }
    }
}

 

1) 내부 클래스 종류

  1. 인스턴스 내부 클래스
  2. static 내부 클래스
  3. 지역 내부 클래스
  4. 익명 클래스

 

2) 인스턴스 내부 클래스

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
  • 외부 클래스의 인스턴스 필요
  • 외부 멤버 접근 가능

 

2) static 내부 클래스

static class Inner {}
  • 외부 객체 없이 생성 가능
  • static 멤버만 접근 가능

 

3) 지역 내부 클래스

메서드 내부에서 정의

void method() {
	class Local{}
}

 

4) 익명 클래스

이름 없는 클래스

Runnable r = new Runnable() {
	@Override
    public void run() {
    	System.out.printIn("실행");
    }
}

한 번만 사용할 클래스에 적합하다.

 

2. 람다식(Lambda Expression)

익명 클래스를 더 간결하게 표현한 문법이다.

1) 람다식 기본 구조

(매개 변수) → { 실행문 }

ex.

(int a, int b) → a + b

 

3. 함수형 인터페이스

람다는 반드시 함수형 인터페이스와 함께 사용된다.

함수형 인터페이스란, 추상 메서드가 하나만 있는 인터페이스다.

@FunctionalInterface
interface MyFunctino {
	void run();
}

람다는 이 한 개의 메서드를 구현한다.

 

1) 자주 쓰이는 함수형 인터페이스

인터페이스 설명
Consumer 입력 O, 반환 X
Supplier 입력 X, 반환 O
Function 입력 O, 반환 O
Predicate boolean 반환

 

4. 스트림(Stream)

스트림은 데이터를 함수형 방식으로 처리하는 API다.

List<String> list = Arrays.asList("A", "B", "C");

list.stream()
	.forEach(System.out::printIn);

 

1) 스트림의 특징

  • 원본 데이터 변경 없음
  • 중간 연산 + 최종 연산 구조
  • 내부 반복 방식

 

2) 스트림 처리 단계

  1. 생성
  2. 중간 연산(filter, map 등)
  3. 최종 연산(forEach, collect 등)
list.stream()
	.filter(s -> s.equals("A"))
    .map(String::toLowerCase)
    .collect(Collectors.toList());

 

5. 주요 스트림 연산

1) 중간 연산

메서드 설명
filter 조건 필터링
map 변환
sorted 정렬
distinct 중복 제거

 

2) 최종 연산

메서드 설명
forEach 반복
collect 수집
count 개수
reduce 집계

 

6. 내부 동작 개념

기존 반복문

for (String s : list) {}

스트림

  • 내부 반복
  • 지연 연산(Lazy Ealuation)
  • 병렬 처리 가능
list.parallelStream();

 

7. 전체 흐름 정리

내부 클래스 → 익명 클래스 → 람다식 → 스트림

  • 내부 클래스 : 클래스 안의 클래스
  • 익명 클래스 : 일회성 구현
  • 람다식 : 익명 클래스의 간결화
  • 스트림 : 람다 기반 데이터 처리 API