람다식 : 메소드와 비슷하게 동작을 구현하지만 익명클래스처럼 별도의 이름이 없는 간결한 형태의 코드 뭉치
람다식이란 "식별자없이 실행가능한 함수"
함수인데 함수를 따로 만들지 않고 코드한줄에 함수를 써서 그것을 호출하는 방식이라고 생각하시면 되겠습니다.
(전달값1, 전달값2, ... ) -> { 코드 }
(매개변수, ...)는 오른쪽 중괄호 { } 블록을 실행하기 위해 필요한 값을 제공하는 역할을 합니다. 매개 변수의 이름은 개발자가 자유롭게 지정할 수 있으며 인자타입도 명시하지 않아도 됩니다. -> 기호는 매개 변수를 이용해서 중괄호 { } 바디를 실행한다는 뜻으로 해석하면 됩니다.
위와 같이 문자열을 출력하는 메소드를 람다식으로 변환할 수 있다.
매개변수를 두개 이상 받는 경우에는 위와 같이 만들 수 있다.
위 예제들은 람다식의 문법을 이해하기 위해 작성한 것으로 실제 위와 같이 실행은 불가능하다.
아래에서 실제 람다식을 활용하는 예제를 학습해보자.
chap_10 패키지 내에 converter 패키지를 추가하였다.
converter 패키지 내에는 Convertible 인터페이스와 KRWConverter 클래스를 생성하였다.
위와 같이 달러를 원화 기준으로 환산하여 출력하는 메소드를 생성하였다.
위와 같이 converter.convert(2) 메소드를 실행하면 "2달러 = 2800원"이 출력된다.
혹은 위와 같이 convertUSD 메소드를 생성하여 호출하도록 할 수도 있다.
예제 코드를 람다식으로 정의하면 위와 같다.
위 코드를 아래와 같이 함수형 인터페이스로 정의할 수 있다.
참고로 함수는 메소드와 거의 동일하게 동작한다.
클래스 내에서 기능을하는 것이 메소드, 클래스 밖에서 기능을 정의하는것이 함수이다.
함수형인터페이스를 이용하기 위해서는 인터페이스는 추상 메소드가 하나만 존재해야한다는 조건이 있다.
겉으로 보기에 일반적인 인터페이스와 함수형 인터페이스에 차이가 없다.
그렇기 때문에 함수형 인터페이스를 구분하기 위한 용도로 @FunctionalInterface를 적용할 수 있다.
@FunctionalInterface을 적용하고 두개의 메소드를 생성하면 아래와 같이 오류가 발생된다.
↑ 전달값이 하나도 없는 함수형 인터페이스 사례
↑ 두줄 이상의 코드가 있는 경우 람다식 사례
↑ 전달값이 2개인 경우 람다식 사례
↑ 반환 값이 있는 경우 람다식 사례
'Spec UP - Backend > 나도코딩의 자바기본편' 카테고리의 다른 글
chap_11. 예외처리 (Try Catch) / 예외발생시키기(Throw) (0) | 2023.07.10 |
---|---|
chap_10. Stream (0) | 2023.07.06 |
chap_10. 익명클래스(AnonymousClass) (0) | 2023.07.04 |
chap_09. Iterator (0) | 2023.07.04 |
chap_09. HashMap (0) | 2023.06.29 |
댓글