주니봉
  • [JAVA] 람다식 (Lambda)
    2021년 02월 24일 17시 25분 08초에 업로드 된 글입니다.
    작성자: 봉주니

    람다함수란?

     

    람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어입니다.

    현재 사용되고 있는 람다의 근간은 수학과 기초 컴퓨터과학 분야에서의 람다 대수이다. 람다 대수는 간단히 말하자면 수학에서 사용하는 함수를 보다 단순하게 표현하는 방법입니.

     

    람다의 특징

     

    람다 대수는 이름을 가질 필요가 없다. - 익명 함수 (Anonymous functions)

    두 개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화 될 수 있다. - 커링 (Curring)

     

    익명함수?

    익명함수란 말그대로 함수의 이름이 없는 함수입니다. 명함수들은 공통으로 일급객체(First Class citizen)라는 특징을 가지고 있습니다.

    이 일급 객체란 일반적으로 다를 객체들에 적용 가능한 연산을 모두 지원하는 개체를 가르킵니다. 함수를 값으로 사용 할 수도 있으며 파라메터로 전달 및 변수에 대입 하기와 같은 연산들이 가능합니다.

     

    람다의 장단점

     

    장점

    1. 코드의 간결성 - 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있습니다.

    2. 지연연산 수행 - 람다는 지연연상을 수행 함으로써 불필요한 연산을 최소화 할 수 있습니다.

    3. 병렬처리 가능 - 멀티쓰레디를 활용하여 병렬처리를 사용 할 수 있습니다.

     

    단점

    1. 람다식의 호출이 까다롭습니다

    2. 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어집니다.

    3. 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있습니다.

     

    람다의 표현식

     

    (매개변수, ...)는 오른쪽 중괄호 { } 블록을 실행하기 위해 필요한 값을 제공하는 역할을 합니다. 매개 변수의 이름은 개발자가 자유롭게 지정할 수 있으며 인자타입도 명시하지 않아도 됩니다. -> 기호는 매개 변수를 이용해서 중괄호 { } 바디를 실행한다는 뜻으로 해석하면 됩니다.

     

    (매개변수, ...) -> { 실행문 ... }

     

    예제

    @FunctionalInterface
    interface Say{
        int someting(int a,int b);
    }
    class Person{
        public void hi(Say line) {
    	int number = line.someting(3,4);
    	System.out.println("Number is "+number);
        }
    }

    예를들기 위해 Person이라는 Class와 Say라는 Functional Interface를 만들었습니다.

    ※ Functional Interface란 함수가 하나만 존재하는 Interface를 의미합니다.

     

    람다식 사용X

    Person rin = new Person();
    rin.hi(new Say() {
        public int someting(int a, int b) {
    	System.out.println("My Name is Coding-Factory");
    	System.out.println("Nice to meet you");
    	System.out.println("parameter number is "+a+","+b);
    	return 7;
        }
    });

    람다식 사용O

    Person rin = new Person();
    rin.hi((a,b) ->{
    	System.out.println("This is Coding-Factory!");
    	System.out.println("Tank you Lamda");
    	System.out.println("parameter number is "+a+","+b);
        return 7;
    });

     

    반응형

    'Java' 카테고리의 다른 글

    [JAVA] X-Frame-Options deny  (0) 2021.03.12
    [JAVA] Stream API  (0) 2021.02.24
    [JAVA] NIO 패키지  (0) 2021.02.24
    [JAVA] 자바7 자바8 차이  (0) 2021.02.24
    [JAVA] 컬렉션(Collection) 정리  (0) 2021.02.24
    댓글