What I Learned

함수형 프로그래밍

함수를 객체처럼 쓸 수 있다. (함수를 변수인 것처럼 타입으로 지정하거나, 인자값으로 넘기거나, 리턴값으로 받을 수 있다. => 함수리터럴)

함수형 프로그래밍의 특징

  1. 인풋과 아웃풋이 분명히 있다.
  2. 외부환경에 독립적이다.
  3. 1번과 2번의 결과로 항상 동일한 아웃풋을 반환한다. 이것을 순수함수라고도 한다.
  4. 여러 변수들(외부환경)이 변하게 되면 프로그램의 특정 상태가 변할 수 있는데 함수형 프로그래밍에서는 외부환경에 독립적이라 부수작용으로부터 독립적이다.

Lambda

함수/메소드를 간단한 식으로 표현하는 방법. 메소드를 람다식으로 표현하면 메소드의 이름과 반환값이 없어져서 익명함수라고도 부른다. (함수와 메소드는 근본적으로 동일한 것이지만 메소드는 클래스에 종속되는 반면 함수는 클래스에 독립적이다.)

함수형 인터페이스

함수형 프로그래밍에서는 함수를 변수처럼 쓸 수 있다고 하는데 함수를 어떤 변수타입에 넣어야 할까? 답은 인터페이스를 지정해주어야 한다.

@FuntionalInterface
interface Func {
	public abstract int add(int a, int b);
}

public static void main(String[] args) {
	
    Func f = new Func() {
    	public int add(int a, int b) {
        	return a + b;
        }
    } // 람다식을 쓰지 않고 풀어서 쓴 것
    
    Func f = (a, b) -> a + b; // 새로 생성한 Func f 객체에 람다식으로 오버라이딩.
    
}

Untitled