일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바object다형성
- maven jar 배포
- java object 클래스
- 스프링
- 외부 라이브러리 jar 배포
- maven 외부 라이브러리 배포
- 배포시 systempath
- 자바스크립트
- maven repository jar
- object tostring
- object 배열
- Spring
- Object
- object다형성
- 맥북 port kill
- map vs multivaluemap
- 자바
- map multivaluemap
- 졸프
- maver 외부 jar 배포
- java
- 도커 컨테이너에 mysql
- object배열
- JS
- niceid_v1.1.jar maven
- object 다형성
- java object 다형성
- nice_v1.1.jar
- maven systempath
- javascript
- Today
- Total
모래블로그
[JavaScript] 일급객체 본문
일급 객체(First Class Object)
다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.
보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다. (위키백과)
여기서 일급 은 사용할 때 다른 요소들과 아무런 차별이 없다는 것을 뜻한다.
일급 객체 조건
1. 변수나 데이터에 담을 수 있어야 한다.
2. 함수의 파라미터로 전달할 수 있어야 한다.
3. 함수의 리턴값으로 사용할 수 있어야 한다.
일급 객체는 어떤 특정 언어에만 국한되는 문법 단어가 아니고, 프로그래밍 언어론의 개념으로서 자바나 자바스크립트 외 다양한 언어가 일급 객체 개념을 가지고 있다.
Javascript, Python이 일급객체 언어이고, c, pascal, c++은 아니라고 보면 된다.(Java는 람다로 지원)
일급 객체의 조건 예시
1. 변수나 데이터에 담을 수 있어야 한다.
자바의 메소드를 변수에 할당할 수는 없다.
그러나 자바스크립트는 함수 표현식으로 자유롭게 대입이 가능하다.
// javascript
const case1 = function() {
console.log("case1");
}
// java
public class Main() {
public static void case1_java() {
System.out.println("case1 in java");
}
public static void main(String[] args) {
Object a = case1_java; // 메소드를 변수에 할당 불가능
}
}
2. 함수의 파라미터로 전달할 수 있어야 한다. => (다른 함수를 인자로 받을 수 있다는 것)
자바의 메소드를 메소드 입력 값으로 보내는 행위는 불가능하다.
반면, 자바스크립트는 콜백 함수 형태로 자유롭게 전달이 가능하다.
// javascript
const case2 = function() {
console.log("case2");
}
function print(func) {
func();
}
print(case2);
// java
public class Main {
public static void case2_java() {
System.out.println("case2 in java");
}
public static void print(Object func) {
func();
}
public static void main(String[] args) {
print((Object) case2_java) // static 메서드를 함수 매개변수로 전달 불가능
}
}
3. 함수의 리턴값으로 사용할 수 있어야 한다.
자바의 메소드의 리턴값으로 메소드 자체를 반환하는 것은 불가능하다.
반면 자바스크립트는 클로저(closure) 기법을 통해 구성할 수 있다.
// javascript
const case3 = function() {
console.log("case3");
return function() {
console.log("case3 in javascript");
}
}
const result = case3();
result();
자바 람다 함수의 일급 객체
위의 조건에서 일반 자바 메소드는 일급 객체 조건에 해당하지 않았지만, 자바의 람다식 혹은 익명 클래스는 변수나 매개변수에 할당 할 수 있으며, 리턴값으로도 사용할 수 있기 때문에 일급 객체 요건을 충족한다.
1. 변수나 데이터에 담을 수 있어야 한다.
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Consumer<String> c1 = (i) -> System.out.println(i); // 람다식을 인터페이스 타입 변수에 할당
c1.accept("case 1");
}
}
2. 함수의 파라미터로 전달할 수 있어야 한다.
import java.util.function.Consumer;
public class Main {
// 메소드 매개변수로 람다 함수를 전달
public static void case2(Consumer<String> c2, String str) {
c2.accept(str);
}
public static void main(String[] args) {
case2((i) -> System.out.println(i) ,"case2");
}
}
3. 함수의 리턴값으로 사용할 수 있어야 한다.
import java.util.function.Consumer;
public class Main {
public static Consumer<String> case3() {
// 람다 함수 자체를 리턴
return (i) -> {
System.out.println(i);
};
}
public static void main(String[] args) {
Consumer<String> c3 = hello();
c3.accept("case3");
}
}
참조🙇♀️
https://velog.io/@reveloper-1311/%EC%9D%BC%EA%B8%89-%EA%B0%9D%EC%B2%B4First-Class-Object%EB%9E%80
'Language > JavaScript' 카테고리의 다른 글
[JavaScript] 구조 분해 할당 (0) | 2024.02.14 |
---|---|
[JavaScript] Spread Operator(스프레드 연산자) (0) | 2024.02.14 |
[JavaScript] Arrow Function vs Function (0) | 2024.02.14 |
[JavaScript] 호이스팅이란 (0) | 2024.01.19 |
[JavaScript] 스코프(scope) (0) | 2024.01.19 |