HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
✍🏻
Learnary (learn - diary)
/
1️⃣
일급객체
1️⃣

일급객체

progress
Done
Tags
SW_Architecture
Build Up람다식WhatJAVA와 javascript 비교JAVA의 Lamda는 일급객체를 충족한다. REFER

Build Up


람다식

  • 자바언어에서 함수형 프로그래밍 기법을 지원하는 문법 요소
  • 익명 클래스(함수형 인터페이스) 이용해야 한다.
함수형 인터페이스
단하나의 추상메소드만을 갖는 인터페이스
  • supplier
  • consume
  • predicate
  • 등이 있음
 
장점
  • 코드 가독성 증가
  • 메서드 만드는 과정 없이 바로 처리 가능
 
단점
  • 익명함수,클래스로 재사용 안됨
  • 디버깅 어렵다.
 

What


일급객체란
다른 객체들에 일반적으로 적용가능한 연산을 지원하는 객체
 
특히나 JAVA는 Lamda로 지원한다.
 
일급객체의 조건
  • 변수나 데이터에 담을 수 있어야 한다.
  • 함수의 파라미터로 전달할 수 있어야 한다.
  • 함수의 리턴값으로 사용할 수 있어야 한다.
 
결론적으로 JAVA 는 위 조건을 모두 충족시키지 못한다.
 
 

JAVA와 javascript 비교

변수나 데이터에 담을 수 있어야 한다. (js는 함수를 객체로 취급)
  • JAVA 메소드는 변수의 할당할 수 없는 반면 javascript 가능하다.
    • 하지만 java17의 switch문은 가능하다.
// JAVA public class Main { public static void hello(){ System.out.println("Hello World"); } public static void main(String[] args) { Object a = hello(); // !! 메서드를 변수에 할당 불가능 } } // javascript const hello = function() { console.log("Hello World"); }
 
함수의 파라미터로 전달할 수 있어야 한다. (call back)
  • JAVA 메소드는 입력값으로 보내는 행위가 불가능하지만 자바스크립트는 콜백 함수 형태로 자유롭게 전달이 가능하다.
// JAVA 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 메서드를 함수 매개변수로 전달 불가능 } } //javascript const hello = function() { console.log("Hello World"); } function print(func) { func(); } print(hello);
 
함수의 리턴값으로 사용할 수 있어야 한다. [js-closure]
  • JAVA의 메소드의 리턴값을 메소드 자체를 반한행위는 불가능하다. [1번문항] 하지만 javascript는 클로저 기법을 통해 구성할 수 있다.
const hello = function() { console.log("Hello World"); return function() { console.log("Hello World 22"); } } const hello2 = hello(); hello2();
 
 

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"); } }
함수의 파라미터로 전달할 수 있어야 한다.
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"); } }
 
함수의 리턴값으로 사용할 . 수있어야 한다.
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"); } }

 REFER


[Java] 자바 람다식과 함수형 인터페이스 (Lambda Expression & Functional Interface)
람다식이란? (Lambda Expression) 람다식은 함수형 프로그래밍 기법을 지원하는 자바의 문법 요소이다. 람다 계산법이 프로그래밍 언어에 도입하면서 사용되기 시작했다. 람다식은 메서드를 하나의 식(Expression)으로 표현한 것으로, 코드를 간결하면서 명확하게 표현할 수 있는 장점이 있다. 자바는 JDK 1.8 이후 람다식을 도입하여 객체지향 프로그래밍과 함수형 프로그래밍을 혼합하여 사용할 수 있게 되었다. 람다식의 장단점 장점 코드를 간결하고 가독성 있게 작성할 수 있다. 메서드를 만드는 과정 없이 한 번에 처리가 가능하다. 병렬 처리가 용이하다. 단점 익명 함수의 재사용이 불가능하다. 재귀함수의 구현이 어렵다. 재사용이 불가능하므로 비슷한 함수 구현이 잦을 수 있다. 디버깅이 어렵다. 즉..
[Java] 자바 람다식과 함수형 인터페이스 (Lambda Expression & Functional Interface)
https://ittrue.tistory.com/161
[Java] 자바 람다식과 함수형 인터페이스 (Lambda Expression & Functional Interface)
[CS] 일급 객체란?
안녕하세요 Foma 입니다! 클로져에 대해서 정확히 공부하려고 알아보던 와중에 "클로져는 일급객체이다" 라는 말에서 일급객체에 대해서 명확하게 설명할 수가 없어서 구체적으로 알아보고 정리해보겠습니다. 바로 시작할게요! First-Class-Object(일급 객체) 일급 객체란 무엇일까?🧐 위키백과에는 다음과 같이 정의되어있습니다. "일급 객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다." 즉, 함수를 값으로도 저장할 수 있고 파라미터로 넣어줄 수도 있고 리턴값으로도 쓰일 수가 있는 것이 일급 객체입니다. 1960년대, 영국의 컴퓨터 과학자 크리스토퍼 스트래치가 처음 ..
[CS] 일급 객체란?
https://fomaios.tistory.com/entry/CS-면접질문-일급-객체란
[CS] 일급 객체란?