일급 객체
일급객체란??
- 보통 자바의 람다 표현식을 배우다 보면 ‘일급 객체’라는 단어를 접하게 된다.
- 일급 객체는 사용할 때 다른 요소들과 아무런 차별없다는 것을 뜻한다
- 일급 객체의 3가지 조건
- 모든 일급 객체는 변수나 데이터에 담을 수 있어야 한다
- 모든 일급 객체는 함수의 파라미터로 전달할 수 있어야 한다
- 모든 일급 객체는 함수의 리턴값으로 사용할 수 있어야 한다
- 일급 객체는 특정 언어에 국한되는 문법 단어가 아니다
- 일급 객체 언어 : JS, Python + Java Lambda
자바의 메소드와 자바스크립트 함수의 일급 객체
1.. 변수나 데이터에 담을 수 있어야 한다
1
2
3
4
5
6
7
8
9
10
| public class Main{
public static void hello(){
System.out.println("Hello");
}
public static void main(String[] args){
Object a = hello; // 메서드를 변수에 할당 불가능
}
}
|
1
2
3
| const hello = function(){
console.log("Hello");
}
|
2.. 함수의 파라미터로 전달할 수 있어야 한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| public class Main{
public static void hello(){
System.out.println("Hello");
}
public static print(Object func){
func();
}
public static void main(String[] args){
print((Object) hello); // static 메서드를 함수 매개변수로 전달 불가능하다
}
}
|
1
2
3
4
5
6
7
8
9
| const hello = function(){
console.log("Hello");
}
function print(func){
func();
}
print(hello);
|
3.. 함수의 리턴값으로 사용할 수 있어야 한다
1
2
3
4
5
6
7
8
9
| const hello = function(){
console.log("Hello");
return function(){
console.log("Hello 2");
}
}
const hello2 = hello();
hello2();
|
자바의 람다 함수의 일급 객체
- 이러한 관점에서 자바의 람다식 혹은 익명 클래스는 변수나 매개변수에 할당할 수 있고, 리턴값으로도 사용할 수 있기 때문에 일급 객체의 요건을 충족한다
1.. 변수나 데이터에 담을 수 있어야 한다
1
2
3
4
5
6
7
8
9
| import java.util.function.Consumer;
public class Main{
public static void main(String[] args){
// 람다식을 인터페이스 타입 변수인 c 에 할당하였다.
Consumer<String> c = (t) -> System.out.println(t);
c.accept("Hello");
}
}
|
2.. 함수의 파라미터로 전달할 수 있어야 한다
1
2
3
4
5
6
7
8
9
10
11
12
13
| import java.util.function.Consumer;
public class Main{
// 메소드의 매개변수로 람다 함수를 받겠다.
public static void print(Consumer<String> c, String str){
c.accept(str);
}
public static void main(String[] args){
print((t) -> System.out.println(t), "Hello");
}
}
|
3.. 함수의 리턴값으로 사용할 수 있어야 한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| import java.util.function.Consumer;
public class Main{
public static Consumer<String> hello(){
// 람다 함수 자체를 리턴함
return (t) -> {
System.out.println(t);
}
}
public static void main(String[] args){
Consumer<String> c = hello();
c.accept("Hello");
}
}
|
참고 사이트
인파-일급 객체(first-class object) 란?