Java - 몇 가지 규칙(5)

김형석·2025년 1월 16일

LG CNS AM Inspire Camp

목록 보기
12/18

1. 람다식의 사용

1-1. 고려할 점

  • Java는 객체지향 언어이다.
    • 이로 인해 람다식 사용 시 인터페이스가 개입한다.

1-2. 익명 이너 클래스의 내부 구현 메서드의 약식 표현

  • 람다식을 사용해서 익명 이너 클래스를 구현하는 방법이다.
  • 약식 표현 = 람다식을 사용한 익명 이너 클래스 구현
    • 예를 들어, Runnable, Callable, Comparable, Comparator 등의 하나의 추상 메서드를 가지는 경우 효과적이다.

1-3. 메서드 참조

1-3-1. 정의

  • 이미 구현되어 있는 인스턴스 메서드를 참조하는 방법
객체 선언;
인터페이스 객체 = 객체참조변수::인스턴스 변수명;
  • 반드시 객체를 먼저 생성해야 인스턴스 변수를 사용할 수 있다.

1-4. 배열 생성자 참조

1-4-1. 정의

  • 배열 생성자를 메서드 참조와 유사하게 사용하는 방법이다.

1-4-2. 사용 방법

// 정의
배열타입[]::new

// 예시
len -> new int[len] ====> int[]::new

1-5. 클래스 생성 참고

1-5-1. 정의

  • 클래스 생성을 메서드 참조와 유사한 방식으로 하는 방법이다.

1-5-2. 사용 방법

// 정의
클래스명::new

// 예시
@FunctionalInterface
interface RefDefaultConstructor {
	Cls getInstance();
}

class Cls {
	Cls() { ... }
}


RefDefaultConstructor r1 = () -> new Cls; // 람다
RefDefaultConstructor r2 = Cls::new; // 클래스 생성 참고



2. 표준 API의 함수적 인터페이스

2-1. 인터페이스

2-1-1. 정의

  • 사용 방법에 대한 명세이다.
  • 개발 시 많이 쓰일 수 있는 것을 미리 정의한 것이다.
  • 추상메서드로 구현되어 있으며, 원하는대로 구현해서 사용한다.

2-1-2. 인터페이스의 구성

  • @FunctionalInterface 어노테이션
  • 추상메서드가 존재하는 인터페이스
    참고) 구현 시 람다 표기식을 사용해서 정의할 수 있다.

2-1-3. API 사용 시 람다 함수식의 장점

  • 코드를 간결하게 관리할 수 있다.
  • 순수 함수식을 사용하기 때문에 예상치 못한 사이드 이펙트가 없다.

2-2. java.util.function

2-2-1. 정의

  • 함수형 인터페이스를 제공하는 인터페이스 집합이다.
  • Java 8에서 Stream API와 람다식이 도입되면서 해당 기능을 지원하기 위해 도입되었다.

2-2-2. 대표적인 인터페이스

2-2-2-1. Consumer

  • void accept(T t);
  • 매개변수는 있지만 리턴은 없다.
  • 매개변수를 '소비'하는 인터페이스이다.

2-2-2-2. Supplier

  • T get();
  • 매개변수는 없지만 리턴값은 있다.

2-2-2-3. Function

  • R apply(T t);
  • 매개변수도 있고 리턴값도 있다.
  • 주로 매개값을 리턴값으로 매핑한다(타입 변환한다).

2-2-2-4. ~Operator

  • applyAs~;
  • 매개변수도 있고 리턴값도 있다.
  • 주로 매개값을 연산하고 결과를 반환한다.

2-2-2-5. Predicate

  • boolean test(T t)
  • 매개변수도 있고 boolean을 반환한다.
  • 매개값을 조사해서 true/false를 반환한다.


3. 클래스 선언 vs 람다 함수식

  • 클래스 선언 시 클래스 정의, 객체 생성, 메서드 사용 등 다양한 작업이 필요하다.
  • 람다 함수식 사용 시 클래스 정의, 객체 생성을 하지 않고도 메서드를 호출할 수 있다.
  • 람다 함수식을 사용할 경우, 클래스 선언을 사용하는 경우보다 코드를 간결하게 유지할 수 있다.

4. stream

4-1. 정의

  • Java 8에 추가된 컬렉션 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 하는 반복자
  • 람다식, 메서드 참조를 가능하게 함

4-2. 사용법

  • 메서드를 .로 연결 -> stream 없이 리스트 요소 등을 반복처리 가능

4-3. 기존 방법과의 차이점

  • 기존에는 반복문 등으로 직접 접근
  • stream으로 변환 후 접근할 수 있도록 개선
  • 최종적으로 stream으로 변환하지도 않고 접근할 수 있게 됨

4-4 장점

  • 병렬처리에서의 용이성
  • 대용량 처리에서 효율성 확보

4-5. 사용 예시

  • 파일 읽어들이기
  • map 함수

1개의 댓글

comment-user-thumbnail
2025년 3월 10일

안녕하세요! 캠프 2기에 지원하게되었는데 블로그를 보게되어서 질문 드립니다..! 처음 3개월 교육을 대학교 수업과 병행하며 할 수 있을까요? 이틀은 학교에 가야되는 상황인데 9시부터 6시 강의라서 강의를 듣기만 하면되는지, 복습을 얼마나 해야하는지, 얼마나 시간을 쏟아야하는지 가늠이 안가서 여쭤봅니다..!

답글 달기