자바 8 에 들어오면서 자바도 람다식과 스트림을 통해 함수형 프로그래밍을 지원하게되었습니다.
함수형 프로그래밍은 프로그래밍 패러다임중 하나입니다, 동일한 입력에 대해서 항상 같은 출력을 반환해야 하며 외부 상태를 변경시키지 않아야 합니다.
함수형 프로그래밍에 대해 알기 전 알아야 할 부분.
1.
프로그래밍 언어가 함수를 1급 객체로 취급하는 경우를 1급 함수를 지원한다, 라고 합니다 대표적인 예로 Python과 Kotlin
Java는 1급 함수를 지원하지 않지만 함수형 인터페이스를 지원하면서 이 속성을 사용하면 Java의 함수를 일급함수,고차함수로 사용이 가능해지게되었습니다,
달라지는점 -> 함수를 변수에 저장이 가능해진다, 함수가 함수의 리턴값이 될 수 있다, 함수의 파라미터로 전달이 가능해진다.
자바에서는 함수와 비슷한 개념의 메소드라는 것이 존재합니다
메소드 : 클래스 또는 인터페이스 내에서 기능과 동작을 정의한 함수를 말하며
함수 : 기능과 동작을 정의한 명령의 모음이다.
여기에서 알아야 할 차이점은 메소드는 객체를 생성하고 생성한 객체에서 메소드를 호출해야 한다는 점입니다.
이것은 자바와 같은 객체 지향형 프로그래밍 방법에서의 함수 사용법에 따른 방식이기도 합니다.
그렇다면 어떤식으로 함수형 프로그래밍을 구현을 했는가 하면.
람다식입니다, 자바는 이미 있는 인터페이스의 문법을 활용하여 람다식을 표현했습니다, 단 하나의 추상 메서드만 포함하는 인터페이스를 바로 함수형 인터페이스라고 하며 이 함수형 인터페이스의 호출 및 기능을 구현하는 방법을
람다식이라고 하여 문법을 새로 정의했습니다.
Do it! 자바 완전 정복의 좋은 예제를 가져왔습니다.
//interface 다형성 부분 다시 한번 떠올리자, interface 가 "자동차" 라면 그걸 구현한 클래스는 "페라리"
//페라리는 자동차다 라고 할 수 있듯이, 자동차 a = new 페라리(); 가 가능한것이다.
interface A{
void abc();
}
class B implements A{
@Override
public void abc(){
System.out.println("메서드 내용 1");
}
}
//Object Oriented Programming vs Functional Programming
public class OOPvsFP{
public static void main(String[] args){
//1. 객체 지향 프로그래밍 문법 1
A a1 = new B();
a1.abc();
//2. 객체 지향 프로그래밍 문법2(익명 이너 클래스 사용)
A a2 = new A(){
@Override
public void abc(){
System.out.println("메서드 내용 2");
}
};
a2.abc();
//3. 함수형 프로그래밍 문법(람다식)
A a3 = () -> {System.out.println("메서드 내용 3");};
a3.abc();
}
}
람다식이 단 하나의 추상 메소드를 가진 인터페이스만으로 표현이 가능한 이유가 여기있습니다,
바로 포함한 추상 메소드가 2개 이상이라면 축약형으로 람다식을 작성할 때 어떤 메소드를 구현한 것인지 구분이 불가능하기때문입니다.
다음은 람다식에 대해 학습해보겠습니다.
'부트캠프 > TIL' 카테고리의 다른 글
[부트캠프] TIL - 리팩토링 (0) | 2024.08.06 |
---|---|
[부트캠프] TIL - 람다식, 익명 이너 클래스 (0) | 2024.08.05 |
[부트캠프] TIL - 팀프로젝트 2일차 회고 Git conflict (0) | 2024.08.03 |
[부트캠프] TIL - JOIN, UNION (0) | 2024.08.02 |
[부트캠프] TIL - 팀프로젝트 Init, MySQL - GROUP BY (0) | 2024.08.01 |