Java의 Lambda Expression(람다식)

    함수형 프로그래밍(Functional Programming)


    • 함수형 프로그래밍은 함수를 구현하고, 매개변수만으로 함수 내부에서만 수행되는 프로그래밍 기법이다. 함수는 외부의 변수들을 사용하지 않아, 외부에 영향을 미치지 않는다. 즉, 외부 영향이 줄어들기 때문에 안정성이 좋다.
    • 함수형 프로그래밍은 매개변수를 기반으로만 수행되기 때문에 동시에 여러 함수를 사용할 수 있다. 즉, 병렬 처리가 가능하다는 이점이 있다.

     

    Lambda Expression(람다식)


    • 람다식은 익명 함수다.
    • 람다식은 매개 변수와 매개 변수를 이용한 실행문으로 작성이 가능하며, 코드는 간결해지나 가독성이 떨어진다.
    • 람다식은 람다식을 위한 인터페이스가 필요하며, 인터페이스 내에는 단 하나의 메서드만 존재해야한다. 람다식은 이름이 없기 때문에, 두 개 이상의 메서드가 있을 경우 어떤 메서드를 구현한 것인지 모르기 때문이다.
    • 람다식을 위한 인터페이스에는 @FunctionalInterface 애노테이션을 달아준다.
    //람다식 표현
    Add addL = (int x1, int x2) -> {return x1 + x2;}

    람다식의 표현은 위처럼 작성할 수 있다. 람다식을 위한 인터페이스의 자료형을 만든 후, 그 자료형에 람다식을 저장한다. 람다식을 저장한 후에, 람다식 인스턴스에 값을 대입하면 함수에 의한 결과를 얻을 수 있다. 아래는 람다식에 대한 예시이다.

     

     

     

    함수형 프로그래밍을 위한 람다식 1.


    @FunctionalInterface
    interface Add{
    	public int add(int x1, int x2);
    	//람다식 인터페이스에 두 개 이상의 메서드가 있으면 안됨.
    	//public int sub(int x1, int x2);
    }
    
    
    
    public class LambdaTest {
    
    	public static void main(String[] args) {
    
    		Add addL = (x1, x2) -> {return x1+x2;};
    		System.out.println(addL.add(2, 5));
    		
    		
    	}
    
    }

     

    람다식과 객체지향 비교


    package ch05;
    
    public class StringTest {
    
    	public static void main(String[] args) {
    
    		String s1 = "abc";
    		String s2 = "cdef"; 
    		
    		StringConcatFun str1 = new StringConcatFun();
    		System.out.println(str1.stringPlus(s1, s2));
    		
    		
    		StringConcat str2 = new StringConcat() {
    			
    			@Override
    			public void doing(String s1, String s2) {
    				System.out.println(s1 + " " + s2) ;
    			}
    		}; 
    
    		str2.doing(s1, s2);
    		
    		StringConcat str3 = (s,v) -> System.out.println(s + " " + v);
    		str3.doing(s1, s2);
    		
    		
    	}
    
    }

    객채지향은 필요한 클래스 내에 메서드를 구현해둔다. 그리고 그 메서드 사용을 위해 인스턴스를 만들고, 인스턴스에 매개변수를 전달해서 원하는 결과를 얻는다.

    함수형 프로그래밍을 위한 람다식은 Interface를 익명 내부 클래스가 만들어지고, 내부 클래스에 있는 Override 메서드에 람다식이 들어가게 되고, 그 익명 내부 클래스의 인스턴스에 의해 연산이 실행된다. 

     

    '프로그래밍 언어 > JAVA' 카테고리의 다른 글

    자바의 Object Class  (0) 2021.10.23
    Java의 여러 내부 클래스 정의, 유형  (0) 2021.10.23
    Java의 Reduce 정의  (0) 2021.10.22
    자바 기초 정리 : 상속, 인터페이스  (0) 2021.10.21
    자바 강의 듣고 정리  (0) 2021.10.19

    댓글

    Designed by JB FACTORY