람다식

 

 

자바에서의 람다식은 자바 8에서 도입되었으며, 익명 함수를 간결하게 작성하기 위해 사용됩니다.

자바의 람다식은 주로 함수를 간단히 정의하고, 불필요한 코드 작성을 줄여 가독성을 높이며, 함수형 프로그래밍 스타일을 가능하게 합니다. 람다식은 인터페이스를 구현하는 익명 클래스를 단순화한 표현 방식이라고도 할 수 있습니다.

 

 

함수형 프로그래밍이란 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 방법을 말합니다.

데이터처리부는 제공된 함수의 입력값으로 데이터를 넣고 함수에 정의된 내용으로 데이터를 처리합니다. 

처리방법이 정해져 있지 않습니다.  외부에서 제공된 함수에 의존합니다.

 

함수형 프로그래밍의 특징으로 동일한 데이터라고 하여도 어떤 함수를 제공하느냐에 따라 처리결과가 달라진다.

(데이터 처리의 다형성)

 

<람다식의 형태>

람다식 : (매개변수) -> { 실행문 }

 

public interface Calculable{
	
   //추상메서드
   void calculate(int x, int y);
}

 

위와 같이 Calculable 인터페이스가 정의되있다

 

Calculable 인터페이스의 익명 구현 객체는 다음과 같이 생성할 수 있다.

 

new Calculable(){
	@Override
    public void calculate(int x, int y) { 
    	.....처리로직
    }
}

 

이것을 람다식으로 표현한다면 (x, y) -> { 처리로직 };     이렇게 변경된다.

 

public void action(Calculable calculable){
	
    int x = 5;
    int y = 4;
    
    
    calculable.calculate(x, y);
    
}

 

action메서드가 이렇게 정의되어있다고 가정할때  action메서드를 호출할때 아래와 같이 람다식을 제공할 수 있다.

 

action((x, y) -> {
	int result = x + y;
    System.out.println(result);
})

 

**** 인터페이스의 익명 구현 객체를 람다식으로 표현하려면 인터페이는 하나의 추상메서드만이 선언되어야 한다.

인터페이스가 단 하나의 추상 메서드를 가질때 함수형 인터페이스라고 한다.

 

 

 

<매개변수가 없는 람다식>

함수형 인터페이스의 추상 메소드에 매개변수가 없을 경우 람다식은 다음과 같이 작성이 가능하다.

() -> {

     실행문;

     실행문;

}

만약 실행문이 하나일 경우에는 

() -> 실행문     

 

이렇게도 생략이 가능하다. 중괄호 생략가능

 

@FunctionalInterface  //해당 인터페이스가 함수형 인터페이스임을 명시하고 추상메서드를 하나만 가지도록 제한한다.
public interface Runnable {
    void run();
}


public Class Main(){
	public static void main(String[] args){
    	Runnable runnable = () -> System.out.println("Hello,");
        
        runnable.run(); // 출력: Hello,
    }
}

 

 

<메소드 참조>

 

메서드를 참조하여서 매개변수의 정보 및 리턴타입을 생략하여 표현하는 것을 목적으로 한다.

 

예를들어 

(left, right) -> Math.max(left, rigth);

//위의 식을 아래와 같이 변환가능

Math::max;  //Math클래스의 max를 참조하여 이렇게 표현하겠다. 매개변수가 생략되었음

 

위에는 정적 메서드를 참조하는 형태이고 

 

아래는 인스턴스 메서드를 참조하는 형태는 아래와 같이 나타낸다.

 

@FunctionalInterface
public interface Calcuable{
	double calc(double x, double y);
}


public class Person {
	public void action(Calcuable calcuable){
    	double result = calcuable.calc(10, 4);
        System.out.println(result);
    }

}

public Class computer{

	public double instanceMethod(double x, double y){
    	return x + y;
    }
}


static void main(String[] args){
	Person person = new Person();
    
    Computer com = new Computer();
    
    //인스턴스 메서드를 람다식으로 표현
    person.action(com::instanceMethod);
    
}

 

'Java' 카테고리의 다른 글

[JAVA] JVM 역할 및 내부구조  (1) 2025.05.08
Thread 동기화와 안전 종료  (0) 2025.03.02
[JAVA] 포장 클래스  (0) 2024.10.20
[JAVA] final 클래스와 final 메서드  (3) 2024.10.18
[JAVA] 싱글톤 패턴  (0) 2024.10.18

+ Recent posts