본문 바로가기
개발

자바 메서드 참조의 이해와 활용법

by new-fp 2024. 11. 16.
728x90

안녕하세요! 오늘은 여러분과 함께 자바의 메서드 참조(Method Reference)에 대해 알아보도록 하겠습니다. 자바에서는 클래스를 만들고 메서드를 호출하는 것이 기본적인 프로그래밍 방식이죠. 하지만 때로는 코드를 더 간결하고 읽기 쉽게 만드는 방법이 필요합니다. 그럴 때 사용할 수 있는 것이 바로 메서드 참조입니다.

들어가며

메서드 참조는 이름 그대로 특정 메서드를 참조하는 기능을 제공합니다. 이 기능을 활용하면 람다 표현식의 불필요한 부분을 생략하고, 보다 명확한 코드를 작성할 수 있습니다. 자바 8에 도입된 이 기능은 다양한 상황에서 유용하게 활용될 수 있는데요, 여러 예시를 통해 함께 살펴보겠습니다.

메서드 참조의 종류

메서드 참조는 크게 네 가지 종류로 나누어집니다. 이들은 다음과 같습니다:

  1. 정적 메서드 참조(Static Method Reference):
    정적 메서드는 클래스에 속하는 메서드로, 해당 클래스의 인스턴스 없이도 호출이 가능합니다. 예를 들어:위 예시는 Integer 클래스의 정적 메서드 compare를 참조하는 모습입니다.
  2. Collections.sort(list, Integer::compare);
  3. 한정적(인스턴스) 메서드 참조(Limited Instance Method Reference):
    특정 객체에 속하는 인스턴스 메서드를 참조하는 방식입니다. 예를 들어:여기서 str 객체의 startsWith 메서드를 참조합니다.
  4. String str = "Hello"; Predicate<String> predicate = str::startsWith;
  5. 비한정적(인스턴스) 메서드 참조(Unlimited Instance Method Reference):

특정 클래스의 인스턴스가 아닌, 이 클래스의 메서드를 참조하는 것입니다. 즉, 해당 메서드를 구현한 임의의 객체에 대해 호출할 수 있습니다.

Function<String, Integer> function = String::length;
  1. 생성자 참조(Constructor Reference):
    클래스의 생성자를 참조하는 방식입니다. 예를 들어:
    Supplier<ArrayList<String>> supplier = ArrayList::new;
    

메서드 참조와 람다식의 차이

람다 표현식은 특정 기능을 익명 함수로 구현하는 것이지만, 메서드 참조는 작성된 메서드를 재사용하는 방식입니다. 메서드 참조를 사용하면 코드가 훨씬 간결해지고 가독성이 높아지는데요, 두 개념의 차이를 쉽게 이해하기 위해 예를 들어보겠습니다.

예를 들어 아래의 코드처럼 정렬을 할 때:

List<Integer> numbers = Arrays.asList(3, 1, 2, 5, 4);
Collections.sort(numbers, (a, b) -> a.compareTo(b));

위 코드를 메서드 참조로 바꾸면 아래와 같이 간단해집니다:

Collections.sort(numbers, Integer::compare);

언제 메서드 참조를 사용해야 할까?

메서드 참조는 다음과 같은 경우에 유용합니다:

  • 코드가 간결해지고 가독성을 제공하는 상황
  • 이미 존재하는 메서드를 활용하고 싶을 때
  • 복잡한 람다 표현식 대신 명확한 메서드를 재사용하고 싶은 경우

마무리하며

오늘은 자바의 메서드 참조에 대해 살펴보았습니다. 코드의 가독성 및 재사용성을 높이기에 매우 유용한 기능이니, 자바를 활용한 프로젝트를 진행하실 때 꼭 활용해보시기 바랍니다. 추가적인 질문이 있으시거나 더 알고 싶으신 내용이 있다면 댓글로 남겨주세요!

여러분의 프로그래밍 여정에 도움이 되기를 바랍니다! 다음 글에서 만나요.

728x90