람다(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)
> 클래스(객체)에 속해 있는 함수
> 객체의 상태에 접근하거나, 객체가 제공해야 할 기능 구현
> 클래스 내부에 정의된 함수라고 보면 된다.
> 객체(인스턴스).메서드이름(매개변수) 형태로 호출됨
-> 함수와 메서드는 수행 역할은 같지만 소속과 호출 방식에서 차이가 난다.
'인프런 > 김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍' 카테고리의 다른 글
| [인프런] 김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍 / 7. 메서드 참조 (0) | 2025.05.28 |
|---|---|
| [인프런] 김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍 / 6. 람다 vs 익명 클래스 (0) | 2025.05.28 |
| [인프런] 김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍 / 5. 람다 활용 (0) | 2025.05.22 |
| [인프런] 김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍 / 4. 함수형 인터페이스 (0) | 2025.05.21 |
| [인프런] 김영한의 실전 자바 - 고급 3편, 람다, 스트림, 함수형 프로그래밍 / 3. 람다 (0) | 2025.05.12 |