일급 객체란
•
일급 객체의 일급의 의미는 사용할 때 다른 요소들과 아무런 차이가 없다는 것을 뜻한다.
•
일반적으로 아래의 3가지 조건을 충족할 때 일급객체라 부른다.
◦
모든 일급 객체는 변수나 데이터를 담을 수 있어야 한다.
◦
모든 일급 객체는 함수의 파라미터로 전달 할 수 있어야 한다.
◦
모든 일급 객체는 함수의 반환값으로 사용할 수 있어야 한다.
•
많이 사용되는 언어 중 Python, JavaScript가 일급 객체 언어이고, c, c++, pascal은 아니다. Java는 일급 객체 언어는 아니지만, 람다를 통해 일급 객체를 지원한다.
•
일급 객체를 지원하고 안하고는 좋고 나쁘다는 개념이 아니고, 일급 객체 특성은 함수형 프로그래밍의 중요한 포인트가 된다.
자바에서의 일급 객체
1.
변수나 데이터에 담을 수 있어야 한다.
•
자바 메소드는 변수나 데이터에 할당할 수 없다.
•
자바 람다 표현식은 변수나 데이터에 할당할 수 있다.
public class Main {
public static void main(String[] args) {
Consumer<String> c = (t) -> System.out.println(t); // 람다식을 인터페이스 타입 변수에 할당
c.accept("Hello World");
}
}
Java
복사
2.
함수의 파라미터로 전달 할 수 있어야 한다.
•
자바 메소드는 매개변수로 할당할 수 없다.
•
자바 람다 표현식은 매개변수로 할당할 수 있다.
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");
}
}
Java
복사
3.
함수의 반환값으로 사용할 수 있어야 한다.
•
자바 메소드는 함수의 반환값으로 사용할 수 없다.
•
자바 람다 표현식은 함수의 반환값으로 사용할 수 있다.
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");
}
}
Java
복사