람다식

5BRack·2022년 7월 6일

자바란?

목록 보기
38/42

람다식이란?

  • 람다식은 함수형 프로그래밍 기법을 지원하는 자바의 문법 요소이다.
  • 함수 - 기능 또는 동작을 정의한 일련의 명령모음
  • 메서드 - 클래스 또는 인터페이스에 정의된 함수
  • 객체 지향 프로그래밍에서는 함수는 항상 클래스 내부에 메서드로 존재해야 하고 메서드를 사용하기 위해서는 클래스의 객체를 먼저 생성한 후 메서드를 호출해야 한다.
  • 이는 외부의 어떤 기능을 가진 함수를 정의하고, 이 함수를 호출함으로써 기능을 수행하는 본래의 함수형 프로그래밍과는 거리가 있다.
  • 단 하나의 추상 메서드만을 포함하는 인터페이스를 함수형 인터페이스라고 하고, 이 함수형 인터페이스의 호출 및 기능을 구현하는 방법을 새로게 정의한 문법이 바로 "람다식" 이다.
  • "람다식"은 익명 이너 클래스의 축약된 형태

람다식 구현

  • 구현된 추상 메서드를 람다식으로 표현할 때는 메서드명 이후의 소괄호와 중괄호만을 차례대로 포함하며, 이들 사이에는 람다식 기호인 화살표(->)가 들어간다.
  • 이름없이 호출하기 때문에 추상 메서드가 2개 이상이라면 어떤 메서드를 구현한 것인지 구분할 수없어 구현이 되지 않는다.
(입력매개변수)->{
	//메서드내용
}

람다식의 약식표현 규칙

  • 람다식은 익명 이너 클래스를 활용한 객체 생성 방법의 축약 형태이다.
  1. 중괄호안 실행문이 한개일시, 중괄호는 생략할 수 있다.
  2. 입력매개변수의 자료형은 생략할 수 있다.
  3. 메서드가 return 구문 하나만으로 이루어져 있을 때는 return을 생략할 수 있다.
  4. 입력변수가 한개일 때 입력변수 소괄호를 생략할 수 있다.
A a1 = (a) -> System.out.println(a);
A a2 = (a) -> a + b; 

람다식 활용

  • 람다식은 익명 이너 클래스 내부 구현 메서드의 약식 표현뿐만 아니라 메서드 참조와 생성자 참조에도 사용된다.
  • 여기서 참조의 의미는 함수형 인터페이스의 메서드를 구현하는 데 있어 직접 구현하는 대신, 이미 있는 기능을 가져다 쓰겠다. 라는 뜻이다.

구현 메서드의 약식표현

  • 함수형 인터페이스의 객체 생성 과정에서 익명 이너 클래스를 이용한 객체 생성 방식의 축약된 표현을 제공하는 것
  • 익명 이너 클래스의 내부 구현 메서드를 단순히 축약해 표현한 형태

메서드 참조

  • 추상 메서드를 직접 구현하는 대신, 이미 구현 완료된 메서드를 참조하는 것이다.
  • 메서드를 참조하는 방식은 인스턴스 메서드 참조정적 메서드 참조로 나누어 진다.

정의돼 있는 인스턴스 메서드 참조

  • 클래스 객체 :: 인스턴스 메서드명
A a = b::bcd //A 클래스 객체 a는 내부에서 B클래스 객체 b를 생성하여 bcd()메서드를 그대로 사용하겠다.

정의돼 있는 정적 메서드 참조

  • 클래스명 :: 정적 메서드명
A a = B::bcd //A 클래스 객체 a는 내부에서 B클래스의 bcd()정적메서드를 그대로 사용하겠다.

첫 번째 매개변수로 전달된 객체의 인스턴스 메서드 참조

  • 첫번째 매개변수로 인스턴스 메서드를 포함하고 있는 객체를 함께 전달하고, 이후 전달된 객체으 인스턴스 메서드를 참조할 때다.
  • 객체변수를 추가로 받아와 객체변수로 메서드를 실행하므로, 참조 메서드보다 매개변수가 항상 1개더 많다.
  • 클래스명 :: 인스턴스 메서드명
A a2 = String::length;  

생성자 참조

  • 생성자는 크게 배열 객체 생성자와 클래스 객체 생성자로 나뉜다.

배열 생성자 참조

  • 함수형 인터페이스에 포함된 추상 메서드가 배열의 크기를 입력매개변수로 하며, 특정 배열 타입을 리턴한다면 구현 메서드의 내부에 반드시 new 자료형[]이 포함될 것이다.
  • 이 때 인터페이스에 포함된 추상 메서드의 구현 메서드가 new 자료형[]과 같이 배열 객체의 생성 기능만을 수행할 때는 람다식의 배열 생성자 참조를 사용할 수 있다.
  • 배열 타입 :: new
A a = int[]::new // 배열을 생성하여 배열객체 리턴

클래스 생성자 참조

  • 인터페이스의 추상 메서드가 클래스 타입의 객체를 리턴할 때도 배열과 마찬가지로 생성자 참조를 사용할 수 있다.
  • 클래스명 :: new
A a = B::new // B객체의 생성자를 이용하여 객체 생성 후 객체 리턴

0개의 댓글