메소드 참조

2024. 10. 21. 19:38·Java

메소드 참조는 람다 표현식을 더 간결하게 작성할 수 있는 기능이다.

람다 표현식이 단순 기존 메소드를 호출하는 경우 사용할 수 있다.

 

메소드 참조의 기본 구조

 

  • 클래스 또는 객체 이름
  • 이중 콜론(::) 연산자
  • 메소드 이름

예시는 다음과 같다.

Integer::parseInt

 

 

 

메소드 참조의 종류

메소드 참조에는 4가지 유형이 있다.

 

1. 정적 메소드 참조 (Class::staticMethod)

다음과 같은 람다 표현식에 사용할 수 있다.

(String str) -> Integer.parseInt(str)

 

위의 식은 메소드 참조를 활용하면 다음과 같이 변경된다.

Integer::parseInt

 

2. 다양한 형식의 인스턴스 메소드 참조 (Class::instanceMethod)

다음과 같은 람다 표현식에 사용할 수 있다.

(String str) -> str.length()

 

위의 식은 메소드 참조를 활용하면 다음과 같이 변경된다.

 

 

String::length

 

3. 외부 객체의 인스턴스 메소드 참조 (object::instanceMethod)

다음과 같은 람다 표현식에 사용할 수 있다.

// Transaction 객체를 할당받은 expensiveTransaction 지역 변수가 있다 가정
() -> expensiveTransaction.getValue()

 

위의 식은 메소드 참조를 활용하면 다음과 같이 변경된다.

expensiveTransaction::getValue

 

4. 생성자 참조 (Class::new)

다음과 같은 람다 표현식에 사용할 수 있다.

// Supplier는 get 추상 메소드를 가지는 () -> T 형태의 함수형 인터페이스이다.
Supplier<Apple> c1 = () -> new Apple();
Apple a1 = c1.get();

 

위의 식은 메소드 참조를 활용하면 다음과 같이 변경된다.

Supplier<Apple> c1 = Apple::new;
Apple a1 = c1.get();

 

 

메소드 참조의 장점

  1. 가독성 향상: 람다 표현식보다 코드가 더 간결하고 직관적이다.
  2. 재사용성: 이미 존재하는 메소드를 재사용할 수 있어 중복 코드를 줄일 수 있다.
  3. 유지보수성: 람다 표현식에 비해, 메소드 참조는 해당 메소드가 무엇을 하는지 명확히 알 수 있어 유지보수성이 좋다.

 

메소드 참조의 단점

  1. 메소드 오버라이드 불가 : 기존 메소드를 호출하는 경우에 적합하지만, 동적으로 로직을 변경하거나 추가하는 것은 람다 표현식을 사용하는 것이 낫다.
  2. 디버깅 어려움 : 람다 표현식과 마찬가지로 디버깅 시 어떤 메소드에서 문제가 일어났는지 확인하기 어렵다.

'Java' 카테고리의 다른 글

스트림(1) - Stream API 개요  (4) 2024.10.23
람다, 메소드 참조 활용하기  (1) 2024.10.21
람다 표현식  (1) 2024.10.21
Intellij 인텔리제이 live template 만들기  (0) 2024.08.07
인텔리제이 단축키(Java)  (1) 2024.07.23
'Java' 카테고리의 다른 글
  • 스트림(1) - Stream API 개요
  • 람다, 메소드 참조 활용하기
  • 람다 표현식
  • Intellij 인텔리제이 live template 만들기
뽀루피
뽀루피
  • 뽀루피
    뽀루피의 개발스토리
    뽀루피
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프로젝트 (3)
      • Java (32)
        • JPA (4)
        • Spring (8)
      • FrontEnd (4)
        • JavaScript (1)
        • Flutter (3)
      • DB (4)
        • SQL (4)
      • 알고리즘 (10)
      • Git (3)
      • SSAFY (0)
      • Figma (1)
      • Notion (0)
      • Jira (0)
      • 기획 (0)
      • 네트워크 (10)
      • 우아한테크코스 (2)
      • Infra (5)
        • AWS (0)
        • Docker (3)
      • AI (1)
      • 자격증 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    모던 자바 인 액션
    백준
    SQL
    fetch join
    Jenkins
    n8n
    네트워크
    스프링
    redis streams
    Stomp
    트랜잭션
    자바
    네트워크 기초
    Docker
    크래프트맨 멘탈리티
    알고리즘
    JPA
    cloudflare
    웹소켓
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
뽀루피
메소드 참조
상단으로

티스토리툴바