ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 람다와 스트림 - 메소드 참조(method reference)
    백엔드/자바 2021. 9. 14. 22:35

    이전에 여러 파트에서 언급했듯이 위와 같이 람다식을 사용하면 메서드를 간단하게 표현이 가능하다.

     

    물론 사용에 제한이 있긴하지만 그럼에도 불구하고 람다식은 그 효율성이 높다.

     

    하지만 그럼에도 불구하고 이 람다식을 더 줄일 수 있는 방법이 있으니 바로 메소드 참조다.

     

     

     

    위 코드는 문자열을 매개변수로 받아 정수형으로 반환하는 Function 참조변수를 표현하고 있다.

     

    Function 참조 변수는 람다식으로 이뤄져 굉장히 간략하게 식을 표현하고 있다.

     

    하지만 이런 경우 메소드 참조를 이용하면 람다식을 더욱 간략하게 표현이 가능하다.

     

     

     

    메서드 참조를 적용하면 첫번째 코드를 위와 같이 변경이 가능하다.

     

    람다식이 단 하나의 메소드만 호출할 경우에 해당 람다식에서 불필요한 매개변수를 없앤다.

     

    그리고 '클래스명::메서드명'의 형태로 써주면 람다식을 더욱 간략하게 메소드 참조로 바꿀 수 있다.

     

     

     

    위 코드처럼 매개변수가 두개인 경우도 당연히 메서드 참조로 표현이 가능하다.

     

     

     

    위 코드의 경우 String 클래스의 equals 메서드를 메서드 참조 형태로 불러온 것이다.

     

    참조변수를 선언할 때 지네릭스 타입을 메서드 타입에 잘 맞게 설정만해준다면

     

    그리고 해당 람다식이 하나의 메서드만 호출하는 경우에 위와 같이 편리하게 메소드 참조 사용이 가능하다.

     

     

     

    이전에 봤던 static메서드들은 '클래스명::메서드명'과 같은 형태로 메서드 참조를 했다.

     

    이는 특정 객체의 인스턴스 메서드에서도 사용이 가능하다.

     

    다만 위와 같이 이때는 클래스명이 아닌 '참조변수명::메서드'으로 메서드 참조가 가능하다.

     

    생성자와 메서드 참조

    이전에 말했듯이 메서드 참조는 람다식보다 더 간단하게 메서드를 정의하는 것을 말한다.

     

    '클래스명::메서드명' 혹은 '참조변수명::메서드명'의 형태로 불러오게 된다.

     

    그런데 이러한 메서드 참조는 생성자 메서드와도 함께 쓸 수 있다.

     

     

     

    예를 들어 MethodTest라는 클래스가 있다고 가정해보자.

     

     

     

    기존에는 MethodTest의 객체를 생성해서 이름을 입력하고 출력하려면

     

    new 명령어를 이용해 객체를 생성해 매번 참조변수에 저장해줘야 했다.

     

    그런데 이렇게 생성자를 호출하는 경우에도 메서드 참조가 가능하다.

     

     

     

    ft1은 기존에 람다식 형태로 생성자를 호출한 방식이고,

     

    ft2는 메서드 참조를 이용해 생성자를 호출한 것이다.

     

    ft2의 경우 f1과 결과는 동일하지만 생성자 참조를 활용해서 그 내용을 더 간략하게 표현한 것이다.

     

    그리고 위 코드는 생성자를 호출할 때 문자열을 필수적으로 넣어야하므로 Function의 참조변수를 썼다.

     

    만약 본인이 만든 코드가 별도의 매개변수가 필요없다면 Function대신 Supplier를 써도 상관없다.

     

    메소드 참조와 배열 생성

     

    메소드 참조를 사용하면 배열을 만들때도 편리하게 만드는 것이 가능하다.

     

    위 코드를 보면 쉽게 이해할 수 있을 것이다.

     

    intArr1 배열의 경우 우리가 일반적으로 만들어주는 방식을 통해 만든 배열이다

     

    intArr2 배열은 람다식을 이용한 Function의 참조변수 ft1을 이용해 만든 배열이다.

     

    intArr3 배열은 메서드 참조를 이용한 Function의 참조변수 ft2를 이용해 만든 배열이다.

     

    이처럼 람다식이 호출하는 메서드가 단 하나라면 일반 메서드 뿐 아니라 생성자, 배열 등도

     

    메서드 참조를 통해서 표현이 가능하다.

Designed by Tistory.