ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 람다식(Lambda Expressions)
    개발 강의 정리/JAVA 2021. 7. 5. 11:32

    1. 람다식이란? 

    : 수학식을 프로그래밍 언어에 접목하여 익명함수(=메소드)를 만드는 코딩 기법이다. 

     

    함수란?

    :객체 없이 단독으로 존재하는 것. None OOP언어에서 나오는 코드의 묶음이다. 그러나 자바언어에서는 객체 없이 단독으로 두는 개념이 없기 때문에 객체 소속 없이 함수 단독으로 존재하지 않는다. 그의 대안으로 익명함수가 나왔다. 즉, 익명구현객체가 익명함수이다. 

     

    익명함수란? 자바 컴파일러가 대신 클래스를 만들어 이름을 "모르는"함수. 

     

    람다식의 목표

    : 익명함수를 만드는 것. 

     

    람다식을 사용하는 이유는?

    -코드가 간결해진다. 

    -컬렉션 요소(대용량 데이터)를 필터링 또는 매핑해 쉽게 집계한다. 

     

    자바는 람다식을 함수적 인터페이스의 익명 구현 객체로 취급한다. 

    람다식->매개변수를 가진 코드블럭->익명구현객체

     

    람다식을 언제 사용하는가? 

    간단하게 인터페이스를 구현할때 사용하므로 수십줄, 수백줄의 코드를 작성할때에는 람다식을 이용하면 안 된다! 

     

    *람다식에서 우선 알아야할 개념*

    1. 함수적 인터페이스(Functional Interface)란? 

      (1) 추상메서드를 오직 단 한개를 가진 인터페이스

      (2) 인터페이스에 올 수 있는 멤버 4가지중에, 추성 메서드를 제외한 나머지 멤버는 올 수 있다. 

      (3) @FunctionalIterface 어노테이션이 붙어있는 인터페이스.

          단, 이 어노테이션이 없다고 해서 추상 메서드가 오직 한개뿐이 인터페이스가 functional이 아닌것은 아니다. 

     

    2. 람다식이 구현할 함수적 인터페이스를 이 람다식의 "타겟타입"이라고 한다. 

    2. 기본 문법

    (타입 매개변수)->{실행문};

    ex)
    (int a)->{System.out.println(a);};

    -얼마든지 람다식의 실행 블록에서 라이브러리를 사용가능하다. 

    -람다식을 보고 이해하기 위해서는 람다식의 '타겟타입'의 추상메소드 시그니쳐를 반드시 확인하라! 

    -구현시에 타겟타입의 메소드를 끌고와서 보고 구현하라! 

     

    <생략조건>

     

     

    1. 매개타입은 런타임시에 대입값에 따라 자동인식 -> 매개변수 타입 생략가능. 

    	fi=(int x)->{
    			int result = x*5;
    			log.info(result);
    		};
    		
            
       //매개변수 타입 생략
       
       	fi=(x)->{
    			int result = x*5;
    			log.info(result);
    		};
    		

     

     

    2. 하나의 매개변수만 있을 경우 -> 소괄호()  생략가능

    fi=x->log.info(x*5);

     

     

    3. 중괄호 블록 안에서 수행할 문장이 오직 하나만 있으면 {} 중괄호 기호 생략

     

    fi = () -> {
    			String str = "method call1";
    
    			log.info(str);
    
    		};
            
            
    //람다식의 중괄호 블록안에서 수행할 문장이 오직 하나만 있으면 -->{} 기호 생략
    		
            fi =()->log.info("method call3");
    

     

     

    4. 람다식의 실행문장이 오직 하나이고 , 그 실행문장이 값을 반환하는 return 문장이라면 -> return키워드 생략. 

    fi=(x, y)->{	//매개변수의 타입 --> 생략가능! 
    			int result =x+y;
    			return result;
    		};//람다식-> 익명구현객체의 생성. 
    		
    		log.info(fi.method(2, 5));
    //----------------------------------------		
    		
     fi=(x,y)->{return x+y;};
     
     //-------------------------------------
    		
    //생략조건-4: 구현할 추상 메소드가 리턴타입이 있고, 람다식의 실행문장이 오직하나이고,
    //그 실행문장이 값을 반환하는 return 문장이라면 return키워드 조차 생략.
    		
            
     fi=(x,y)-> x+y;

     

    '개발 강의 정리 > JAVA' 카테고리의 다른 글

    [JAVA] 컬렉션 프레임워크  (0) 2021.07.08
    [JAVA] 람다식(Lambda Expression) -2  (0) 2021.07.06
    [JAVA] Generic-3  (0) 2021.07.02
    [JAVA] Generic-2  (0) 2021.07.01
    [JAVA] Generic  (0) 2021.06.30
Designed by Tistory.