[워밍업클럽] BE 1기 #과제3

[워밍업클럽] BE 1기 #과제3

우리는 JdbcTemplate을 사용하는 과정에서 익명 클래스와 람다식이라는 자바 문법을 사용했습니다. 익명 클래스는 자바의 초창기부터 있던 기능이고, 람다식은 자바 8에서 등장한 기능입니다. 다음 키워드를 사용해 몇 가지 블로그 글을 찾아보세요! 아래 질문을 생각하며 공부해보면 좋습니다! 😊

 

[키워드]

익명 클래스 / 람다 / 함수형 프로그래밍 / @FunctionalInterface / 스트림 API / 메소드 레퍼런스

 


[질문]

  • 자바의 람다식은 왜 등장했을까?

  • 람다식과 익명 클래스는 어떤 관계가 있을까? - 람다식의 문법은 어떻게 될까?

익명 클래스란? 클래스 선언과 객체 생성을 동시에 하며 단 한번만 사용되는 일회용 클래스이다.

클래스를 별도로 선언하지 않아도 되어 기존보다 간결하게 코드를 작성할 수 있게 되었지만, 그럼에도 작성해야할 부분이 많다는 불편함을 가지고 있다.

람다식을 사용하여 익명 클래스보다 더욱 간결한 코드 작성이 가능해졌다.

Collections.sort(words, new Comparator<String>() {
    public int compare(String s1, String s2) {
        return Integer.compare(s1.length(), s2.length());
    }
});
Collections.sort(words,
        (s1, s2) -> Integer.compare(s1.length(), s2.length()));

람다식이란? 메서드를 하나의 식으로 표현하는 것으로 메서드 이름과 반환값이 없으므로 익명 함수라고도 한다.

람다식의 도입으로 기존의 자바를 거의 변경하지 않고도 함수형 언어의 장점을 접목시킬 수 있게되었다.

함수형 프로그래밍이란? 선언형 프로그래밍의 일종으로 순수 함수를 조합하고 프로그래밍 패러다임이다. 순수 함수는 입력 파라미터에만 의존하며, 부수 효과를 일으키지 않는 함수를 뜻하며 정의된 API를 통해서만 외부 시스템과 상호작용하여 결과를 만들어내는데 이러한 부분이 객체지향 언어와는 다른 점이다.

함수형 프로그래밍 장점

  • 테스트와 디버깅에 용이함

  • 간결한 코드 작성

  • 개발 생산성

  • 코드 가독성에 좋음

  • 함수 단위 코드 재사용 쉬움

 

람다식과 익명 클래스 둘 다 함수 객체를 만들 때 사용한다. (함수 객체란 추상 메서드를 하나만 담은 인터페이스의 인스턴스를 말한다. ) 하지만 람다식과 익명 클래스가 같다고 할 수 없다. 람다는 다음 3가지 한계점을 가지고 있다.

  1. 추상클래스의 인스턴스를 만들 때는 람다 사용 불가능

  2. 추상메서드가 여러개인 인터페이스의 인스턴스로 람다 활용 불가능

  3. 람다는 자기자신을 참조하지못함

 
문법 >

(매개변수목록) -> {함수몸체}

1. 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략 가능

  1. 함수의 몸체가 하나의 명령문만으로 이루어진 경우에는 중괄호({})를 생략 가능 (이때 세미콜론(;)은 붙이지 않음)

  2. 매개변수가 하나인 경우에는 괄호(())를 생략 가능

    4. 함수의 몸체가 하나의 return 문으로만 이루어진 경우에는 중괄호({})를 생략 불가능

 

예시 >

int max(int a, int b) {
   return a > b ? a : b ;
}
(a,b) -> a > b ? a : b

 

int sumArr(int[] arr) {
   int sum = 0;
   for(int i : arr) sum += i;
   return sum;
}
(int[] arr) -> {
   int sum = 0;
   for(int i: arr) sum += i;
   return sum;
}

강의

- 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지], https://inf.run/XKQg

출처

자바의정석 14장 람다와 스트림

https://code-lab1.tistory.com/245

https://yozm.wishket.com/magazine/detail/2023/

https://limkydev.tistory.com/226

https://coder-in-war.tistory.com/entry/Java-24-%EC%9D%B5%EB%AA%85%ED%81%B4%EB%9E%98%EC%8A%A4%EB%B3%B4%EB%8B%A4%EB%8A%94-%EB%9E%8C%EB%8B%A4

 

댓글을 작성해보세요.