이중 콜론 연산자 (Double Colon Operator)

mallin·2022년 6월 17일
2

JAVA

목록 보기
3/6
post-thumbnail

이중 콜론 연산자 (Double Colon Operator) 는 Java 8 에서 추가된 메소드 참조 연산자이다.

람다식에서 파라미터를 중복해서 사용하고 싶지 않을 때 사용하고,
람다식과 동일한 처리 방법을 갖긴 하지만, 이름으로 기존 메소드를 참조함으로써 더욱 보기 쉽게 사용할 수 있다

사용 방법

[인스턴스]::[메소드명(or new)]

ex) User::getId

① 람다 표현식 () -> {} 에서만 사용 가능하고
② static 메소드인 경우 인스턴스 대신 클래스 이름으로 사용할 수도 있다 !

자세한 건 예시를 통해서 더 알아보자

예시

리스트를 순회하면서 String 을 대문자로 바꿔주고자 할 때

List<String> testList = Arrays.asList("one", "two", "three", "four");
testList = testList
        .stream()
        .map(a -> a.toUpperCase()) // 람다 표현식 
        .collect(Collectors.toList());

testList = testList
        .stream()
        .map(String::toUpperCase) // 이중 콜론 연산자 사용 
        .collect(Collectors.toList());

a -> a.toUpperCase() 를 이중 콜론 연산자로 표현하려면 String::toUpperCase 로 나타낼 수 있다

특정 Dto 리스트에서 아이디만 뽑을 때

@Getter
@AllArgsConstructor(staticName = "of")
public class TestDto {
    private Long id;
    private String name;
}

List<TestDto> testDtoList = new ArrayList<>();
testDtoList.add(TestDto.of(1L, "첫번째"));
testDtoList.add(TestDto.of(2L, "두번째"));

// 람다 표현식
testDtoList.stream().map(a->a.getId()).collect(Collectors.toList());
// 이중 콜론 연산자 사용 
testDtoList.stream().map(TestDto::getId).collect(Collectors.toList());

static 메소드를 사용할 때

@Getter
@AllArgsConstructor(staticName = "of")
public class NameDto {
	private String name;
}
    
List<String> testList = Arrays.asList("one", "two", "three", "four");
// 람다 표현식 
testList.stream().map(a->NameDto.of(a)).collect(Collectors.toList())
// 이중 콜론 연산자 사용 
testList.stream().map(NameDto::of).collect(Collectors.toList())

위의 예시처럼 여러 방면으로 활용할 수 있고, 이를 통해 코드 양을 줄이고 가독성을 올려 줄 수 있다.

굳이 수동으로 이중 콜론 연산자로 수정하지 않더라도 람다 표현식으로만 표현했을 때 인텔리제이에서 제안해주기 때문에 Replace lambda with method reference 를 눌러서 변경해주면 쉽게 변경 가능하다 !!!

1개의 댓글

comment-user-thumbnail
2023년 5월 2일

안녕하세요 좋은글 잘 보고 갑니다. 그런데 섬네일 이렇게 깔끔하게 만드는 방법이 무엇인지 알려주실 수 있나요 ?

답글 달기