함수형 언어에서는 함수 자체가 일급 객체가 되겠지만 객체지향 언어에서는 클래스(또는 객체)가 일급 객체가 됩니다.
일급객체의 조건
- 변수나 데이터 구조를 안에 담을 수 있다.
- (하위 루틴의) 파라미터로 전달할 수 있다.
- (하위 루틴의) 반환 값으로 사용할 수 있다.
할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
예를 들면, 객체지향은 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있지만
함수형은 상태 값을 지니지 않는 함수 값들의 연속으로 생각할 수 있게 합니다.
자 이제 어느정도 함수형 프로그래밍에 대한 짧은 지식을 보았으니 람다에 대하여 언급하겠습니다~!
람다 표현식 정의
- 람다 표현식이란 간단히 말해 메소드를 하나의 식으로 표현한 것
- 단순한 람다 구문의 경우, 람다 구분에 중괄호가 없을 수도 있다.
- Return이 없을 수도 있다.
- 매개변수에는 타입을 명시하지 않아도 된다. (타입 추론)
- 람다식 문법을 컴파일러가 익명 클래스로 변환한다.
즉, 함수형 인터페이스를 컴파일러가 구현하도록 위임하는 형태라 볼 수 있다.
장점
- 반복문, 비교문등의 블록 크기를 간결하게 축소 가능.
- 객체를 생성 없이 기능을 정의 후 바로 사용가능 (1회용 메서드)
- 1회용이기에 메서드의 네이밍이 필요 없음
- 프로그래머의 의도가 분명하게 드러나기에 가독성 증가.Null 방어로직 ‘if(obj != Null)’ 을 벗어날 수 있다.
단점
- 람다식을 남용할 경우 디버그시 찾기 힘든 문제가 있다.
- 러닝커브가 있어서 자바 개발자들도 적용을 꺼리는 경우가 있다.