[인프런 워밍업 클럽 BE 0기] 3일차 과제
[질문]
자바의 람다식은 왜 등장했을까?
람다식과 익명 클래스는 어떤 관계가 있을까? - 람다식의 문법은 어떻게 될까?
자바의 람다식은 왜 등장했을까?
절차지향과 객체지향 같은 명령형 프로그래밍은 개발하는 소프트웨어의 크기가 커짐에 따라, 스파게티 코드를 유지보수하기 매우 힘들단 것을 깨닫게 되었고, 이를 해결하기 위해 함수형 프로그래밍이라는 프로그래밍 패러다임에 관심을 갖게 되었다. 함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 방식으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.
람다식(Lambda expression)은 간단히 말해서 메서드를 하나의 식으로 표현한 것이다.
람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다.
메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로 람다식을 익명함수(Anonymous function)라고도 한다.
람다식은 이름과 반환타입을 제거하고 매개변수 선언부와 몸통에 {} 사이에 ->를 추가한다.
//반환타입 메서드이름(매개변수 선언) {
int max(int a, int b) {
return a>b? a:b;
}
//람다식
//(매개변수 선언) -> {
(int a, int b) -> {
return a>b? a:b;
}
람다식의 도입으로 불필요한 코드를 줄이고 가독성을 높이게 되면서, 자바는 객체지향언어인 동시에 함수형 언어가 되었다.
람다식과 익명 클래스는 어떤 관계가 있을까?
익명클래스: 일시적으로 한번만 사용되는 객체로 다시 사용하지 않는다.(확장성이 좋지않다)
단발성 이벤트를 처리할 때 한 번만 사용되는 객체이다
확장성을 활용하는 것이 유지보수에서 더 불리할 경우 사용한다.
람다: 람다식은 메소드를 하나의 식으로 표현한 것이다. 익명클래스와 비슷한 개념이지만 코드는 훨씬 간결하다.
익명 내부 클래스는 새로운 클래스를 생성하지만 람다는 새로운 메서드를 생성하여 포함한다.
람다는 static이나 객체 사용을 위한 non-static도 메서드로 생성되는 반면, 익명 내부 클래스는 새로운 클래스 파일이 생성된다.
익명 내부 클래스의 this는 새로 생성된 클래스를 람다의 this는 람다식을 포함하는 클래스를 말한다.
익명 내부 클래스에서의 this는 새로운 클래스를 만들기 때문에 해당 클래스를 가리키지만 람다는 그냥 메서드를 만들기 때문에 메서드 즉 람다가 있는 클래스를 말한다.
댓글을 작성해보세요.