본문 바로가기
인프런/김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍

[인프런] 김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍 / 2. 람다가 필요한 이유

by hxxyeoniii 2025. 5. 12.

람다(lambda)

자바에서 메서드의 매개변수에 인수로 전달할 수 있는 것은 크게 2가지

1) int, double과 같은 기본형 타입

2) Member와 같은 참조형 타입(인스턴스)

 

코드 조각을 전달하기 위해 클래스를 정의하고, 메서드를 만들고, 인스턴스를 생성하는 복잡한 과정을 거쳐야 했으나,

package lambda.lambda1;

import lambda.Procedure;

public class ProcedureMain1 {
    public static void main(String[] args) {
        Procedure procedure = new Procedure() {
            @Override
            public void run() {
                System.out.println("hello! lambda");
            }
        };
        procedure.run();
    }
}

 

람다 사용으로 다음과 같이 간단히 코드 블럭을 정의하고 전달할 수 있다.

package lambda.lambda1;

import lambda.Procedure;

public class ProcedureMain2 {
    public static void main(String[] args) {

        Procedure procedure = () -> {
                System.out.println("hello! lambda");
        };
        procedure.run();
    }
}

 

위 코드처럼 람다는 () -> {} 와 같이 표현한다.

() : 메서드의 매개변수

{} : 코드 조각이 들어가는 부분


함수 vs 메서드

객체지향 프로그래밍 관점에서 둘은 차이가 있다.

// 자바에서는 클래스 내부에 함수를 정의 -> 메서드
public class Calculator {
    // 인스턴스 메서드
    public int add(int x, int y) {
        return x + y;
    }
}

// 사용 예
Calculator cal = new Calculator();
int result = cal.add(2, 3); // 'add'는 메서드

 

1. 함수(Function)

   > 독립적으로 존재하며 클래스(객체)와 직접적 연관이 없음

   > C언어 등 절차적 언어에서는 모든 로직이 함수 단위로 구성

   > 객체지향 언어여도, Python이나 JS처럼 클래스 밖에서 정의할 수 있는 "함수" 개념을 지원하는 경우, 이를 함수라고 부른다.

   > 보통 이름(매개변수) 형태로 호출되며 클래스나 객체 특유 속성(인스턴스 변수)은 다루지 못함

  

2. 메서드(Method)

   > 클래스(객체)에 속해 있는 함수

   > 객체의 상태에 접근하거나, 객체가 제공해야 할 기능 구현

   > 클래스 내부에 정의된 함수라고 보면 된다.

   > 객체(인스턴스).메서드이름(매개변수) 형태로 호출됨

 

-> 함수와 메서드는 수행 역할은 같지만 소속과 호출 방식에서 차이가 난다.