[JAVA] 생성자 참조, 메소드 참조

Van·2023년 5월 26일
0

생성자 참조(Constructor Reference)

Goal

  • 생성자 참조를 간략하게 알아보자
  • 메소드 참조를 간략하게 알아보자

Introduction

생성자 참조(Constructor Reference), 메소드 참조(Method Reference)는 JAVA 8부터 도입된 람다 표현식을 축약하는 방법으로 코드 간결성, 재사용성, 유연성을 향상시키며 함수형 프로그래밍을 지원하기 위해 등장하였습니다.


생성자 참조

생성자 참조는 람다 표현식을 사용하여 객체 생성 코드를 간결하게 표현하는 방법으로 객체의 생성을 명시적으로 표현할 수 있어 코드의 가독성을 향상시킵니다.

생성자 참조는 '::'기호를 사용하여 표현하며 클래스 이름은 객체를 생성하는 클래스의 이름을 나타내며 '::' 뒤에 new 생성자를 붙여서 생성자를 명시합니다.

클래스이름::new

생성자 참조 예제

class Idol {
    private final String name;

    Idol(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
// 스트림 변환
List<String> strings = Arrays.asList("newJeans", "twice", "fifty");
strings.stream().map(Idol::new).forEach(v -> System.out.println(v.getName()));
// 출력 : newJeans twice fifty

// 인스턴스 생성
Supplier<String> stringSupplier = String::new;
String string = stringSupplier.get();

이렇게 생성자 참조를 사용하면 해당 클래스의 생성자가 호출되어 객체 인스턴스가 생성됩니다.
이름 그대로 new를 이용한 인스턴스의 생성이 필요한 경우에 사용이 됩니다


메소드 참조

메소드 참조는 람다 표현식을 사용하여 특정 메소드에 파라미터를 전달하는 부분을 생략하기 위해 사용되며 참조 타입과 메소드 이름만 명시적으로 표현합니다.

메소드 참조는 '::'기호를 사용하여 표현하며 앞에는 메소드를 사용하기 위한 'Integer'나 'String'과 같은 메소드가 구현되어 있는 참조 타입을 나타내며 '::' 뒤에는 사용하고자 하는 메소드 이름을 명시합니다. 또한 파라미터 값은 모두 전달됩니다.

참조타입::메소드이름

메소드 참조 예제

public static void main(String[] args) {
	// 1. 문자열 51245의 값을 List로 변환하는 과정에서 map으로 변환하는 과정에서 Integer의 parseInt를 참조
    String str = "51245";
    List<Integer> collect = Arrays.stream(str.split("")).map(Integer::parseInt).collect(Collectors.toList());
    System.out.println(collect);
    // 출력 : [5, 1, 2, 4, 5]
	
    // 2. List에 Idol 클래스를 담고 클래스의 이름으로 문자열을 만들기 위해 map으로 Idol.getName을 이용하여 문자열을 만든다
    List<Idol> idolList = Arrays.asList(new Idol("newJeans"),new Idol("twice"),new Idol("fifty"));
    String idols = idolList.stream().map(Idol::getName).collect(Collectors.joining(" "));
    System.out.println(idols);
    // 출력 : newJeans twice fifty
}
profile
그럭저럭 어렵지 않게 Smile!

0개의 댓글