728x90
일급객체란
3가지 조건을 충족한 객체
- 모든 일급 객체는 변수나 데이터에 담을 수 있어야 한다.
- 모든 일급 객체는 함수의 파라미터로 전달 할 수 있어야 한다.
- 모든 일급 객체는 함수의 리턴값으로 사용 할수 있어야 한다.
JAVA METHOD와 비교
자바 메소드 말고
자바의 람다식, 익명 클래스로 변수나 매개변수 할당이 가능하고, 리턴값으로도 사용할 수 있어 일급객체의 요건이 충족된다
같이 비교하자면
1. 변수할당
java method는 변수 할당이 불가능
public class Main {
public static void hello(){
System.out.println("Hello World");
}
public static void main(String[] args) {
Object a = hello; // !! 메서드를 변수에 할당 불가능
}
}
java lamda 식은 가능
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Consumer<String> c = (t) -> System.out.println(t); // 람다식을 인터페이스 타입 변수에 할당
c.accept("Hello World");
}
}
javascript 는 가능하다
const hello = function() {
console.log("Hello World");
}
2. 파라미터로 전달
java method는 메소드 입력값으로 보낼 수 없음
public class Main {
public static void hello(){
System.out.println("Hello World");
}
public static void print(Object func) {
func();
}
public static void main(String[] args) {
print((Object) hello) // !! static 메서드를 함수 매개변수로 전달 불가능
}
}
java lamda식
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 World");
}
}
javascript는 콜백함수 형태로 전달 가능함
const hello = function() {
console.log("Hello World");
}
function print(func) {
func();
}
print(hello);
3. 리턴값으로 메소드 자체 반환 가능 여부
java 메소드는 자체 반환 안됨.
java lamda식 가능
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 World");
}
}
javascript 는 Closure 기법으로 가능
const hello = function() {
console.log("Hello World");
return function() {
console.log("Hello World 22");
}
}
const hello2 = hello();
hello2();
728x90
'Web > JavaScript' 카테고리의 다른 글
[event handler] (1) | 2023.10.30 |
---|---|
[mozilla javascript] MutationObserver (1) | 2023.10.29 |
[property attribute] (0) | 2023.10.28 |
[기본] block level scope (const, let) (0) | 2023.10.27 |
[기본] garbage collection (0) | 2023.10.26 |