컴퓨터공학 💻 도서관📚

Part2. 6-2 함수형 프로그래밍과 람다식 문법(Lambda expression) 본문

✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습

Part2. 6-2 함수형 프로그래밍과 람다식 문법(Lambda expression)

들판속초록풀 2025. 7. 6. 11:52

함수형 프로그래밍과 람다식

  • 자바는 객체 지향 프로그래밍 : 기능을 수행하긴 위해서는 객체를 만들고 그 객체 내부에 멤버 변수를 선언하고 기능을 수행하는 메서드를 구현
  • 함수형 프로그래밍을 자바에서 제공한 게 람다식이고 Java8부터 이를 지원하고 있다.
  • 함수의 구현과 호출만으로 프로그래밍이 수행되는 방식
  • 함수형 프로그래밍(Functional Programming: FP)
    함수를 기반으로 하는 프로그래밍이고 입력받는 매개변수 이외에 외부 자료를 사용하지 않아 여려 자료가 동시에 수행되는 병렬처리가 가능하다. 함수형 프로그래밍은 함수의 기능이 자료에 독립적임을 보장한다. 이는 동일한 자료에 대해 동일한 결과를 보장하고, 다양한 자료에 대해 같은 기능을 수행할 수 있다.
  • 함수형 프로그래밍은 순수함수(pure function)를 구현하고 호출함으로써 외부 자료에 부수적인 영향(side effect)를 주지 않도록 구현하는 방식이다. 순수 함수란 매개변수만을 사용하여 만드는 함수이다.
    즉, 함수 내부에서 함수 외부에 있는 변수를 사용하지 않아 함수가 수행되더라도 외부에는 영향을 주지 않는다.

 

 

함수형 프로그래밍은 함수를 구현을 하고 그 함수를 호출하는데
호출할 때 입력받은 매개변수를 기반으로 이 함수가 수행이 된다.
이때 중요한 건 이 함수가 외부에 있는 변수들을 사용하지 않는다

만약 함수가 외부에 있는 변수들을 막 사용하면 이 함수가 수행이 되면서 외부에 영향을 미치게 된다.
이것을 우리가 프로그램에서 내가 의도하지 않은 어떤 사이드 이펙트를 일으킨다라고 말한다
이 사이드 이펙트가 버그를 발생할 수도 있고  프로그램적인 오류나 내가 예상치 않은 어떤 실행 결과를 만들 수가 있는데

함수형 프로그래밍 같은 경우에는 매개변수를 받고 그 매개변수를 기반으로 내부에서만 수행이 되기 때문에 외부에 사이드 이펙트가 발생하지 않는다
어떻게 보면 굉장히 안정적인 프로그래밍 방식이다.
자바스크립트 기반으로 많이 수행이 되고 있고 그 외에 함수형 프로그래밍만 제공하는 그런 언어들도 있다.
근데 이게 좋은게 뭐냐면 그렇게 되다보니 동시에 여러 함수가 호출이 돼도 문제가 발생하지 않는다.
매개변수를 기반으로 내부적으로만 돌기 때문에 병렬처리가 가능하다. (존나 효율적이다.  병렬처리? 약간 GPU를 보는 듯한)
함수형 프로그래밍은 다양한 매개변수에 대해서 동일한 기능을 제공해주기 때문에 안정적이다
단점은 가독성이 좀 떨어진다.

 


람다식 문법

  • 익명 함수 만들기  (함수의 이름이 없다.)
  • (1)매개 변수(2)매개변수를 이용한 실행문   (매개변수) -> {실행문;}
//  두 수를 입력 받아 더하는 add() 함수 예

int add(int x, int y){

    return x+y;
}
// 위의 add함수를 람다식으로 표현

(int x, int y) -> {return x+y;}

매개변수가 하나인 경우 자료형과 괄호 생략가능

str->{System.out.println(str);}   // 그냥 str 만 씀 : 괄호 생략, 자료형 생략

매개변수가 두 개이상인 경우 괄호를 생략할 수 없음  (오류)

x, y -> {System.out.println(x+y);}    //오류

*  실행문이 한 문장인 경우 중괄호 생략 가능

str-> System.out.println(str);

실행문이 한 문장이라도 return문(반환문)은 중괄호를 생략할 수 없음  (오류)

str-> return str.length();    //오류

실행문이 한 문장의 반환문인 경우엔 return과 중괄호를 모두 생략

(x, y) -> x+y;   // x+y 값 반환
str -> str.length;  // str.length 값 반환

 


 

자바에서는 클래스 없이 메서드만 호출될 수 없다. (C언어가 아님)
그래서 자바에서 람다식을 쓸 때는 일단 클래스를 만들어야 한다
람다식용으로 함수를 선언을 해야 하기에  인터페이스에다가 메서드를 선언한다.
이걸  Functional Interface 라고 한다.

public interface Add {      // 인터페이스 선언
	public int add(Int x, int y);
}
public class AddTest {
	public statoic void main(Stringp[] args) {
    
        Add addL = (x, y)-> x+y;         // 람다식 사용
        
        System.out.println(addL.add(2,3));
      }
}
Comments