일급 객체

일급 객체(First-class citizen)는 다른 요소들과 동등한 자격을 가지는 요소를 말합니다.

일급 객체의 조건

  1. 변수에 할당할 수 있다
  2. 함수의 인자로 전달할 수 있다
  3. 함수의 반환값으로 사용할 수 있다

예시: JavaScript의 함수

JavaScript에서 함수는 일급 객체입니다.

// 1. 변수에 할당
const greet = function(name) {
    return `Hello, ${name}`;
};

// 2. 함수의 인자로 전달
function execute(fn, value) {
    return fn(value);
}
execute(greet, "Alice");  // "Hello, Alice"

// 3. 함수의 반환값으로 사용
function createMultiplier(n) {
    return function(x) {
        return x * n;
    };
}
const double = createMultiplier(2);
double(5);  // 10

Java에서의 비교

// Java에서 메서드는 일급 객체가 아님
public int add(int a, int b) {
    return a + b;
}

// X 메서드를 변수에 직접 할당 불가
var fn = add;

// Java 8부터 람다로 유사하게 가능
Function<Integer, Integer> fn = x -> x * 2;

일급 컬렉션

일급 객체 개념을 컬렉션에 적용한 것입니다.

// 일급 컬렉션 아님
public class Order {
    private List<OrderItem> items;  // 컬렉션이 그냥 필드로 존재
    private String orderId;
    // ...
}

// 일급 컬렉션
public class OrderItems {  // 컬렉션을 감싼 별도 클래스
    private final List<OrderItem> items;

    public int getTotalPrice() {
        return items.stream()
                    .mapToInt(OrderItem::getPrice)
                    .sum();
    }

    public int count() {
        return items.size();
    }
}

일급 컬렉션의 장점

장점설명
비즈니스 로직 응집컬렉션 관련 로직이 한 곳에 모임
불변성 보장외부에서 컬렉션 직접 수정 방지
상태와 행위 결합데이터와 관련 메서드가 함께 존재
의미 부여List<OrderItem> → OrderItems로 명확한 이름

요약

일급 객체는 변수 할당, 인자 전달, 반환값 사용이 가능한 요소이며, 이 개념을 활용하면 더 유연하고 응집도 높은 코드를 작성할 수 있습니다.

CSLOG에서 보기