ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

1급 시민(First-class citizen)

도입

어떤 대상을 ‘값(value)’처럼 다룰 수 있다는 의미입니다.

함수형 프로그래밍이나 자바 람다, 자바스크립트 콜백을 이야기할 때 반드시 등장하는 개념이 “함수는 1급 시민이다” 입니다. 그런데 이 말은 “함수가 중요하다” 같은 감성 표현이 아니라, 언어가 어떤 대상을 일반 값처럼 취급하게 해준다는 아주 구체적인 의미입니다.

핵심 메시지

“1급 시민 = 값처럼 이동 가능한 대상이다.
그래서 함수도 파라미터/반환값으로 다룰 수 있다.”

- FP/람다를 이해하는 관문 -

 

정의

대상을 변수에 담고, 인자로 전달하고, 반환값으로 돌려주고, 자료구조에 저장할 수 있다는 뜻입니다.

“1급 시민”은 문법이 아니라 언어의 능력(표현력)을 말합니다.

숫자/문자열이 1급 시민인 언어는 많지만, 함수가 1급 시민인 언어는 더 강력한 추상화를 만들 수 있습니다.

 

1급 시민의 조건

실무에서 “함수가 1급”이 되면, 설계 방식이 바뀝니다.
조건 설명
변수에 할당 값처럼 변수/상수에 저장 가능 (ex. f = (x) => x+1)
인자로 전달 함수를 다른 함수의 파라미터로 전달 (콜백/전략 패턴)
반환값 함수를 반환하는 함수 가능 (고차 함수, 팩토리)
자료구조 저장 리스트/맵에 저장해 동적으로 선택 (라우팅, 핸들러 레지스트리)

 

왜 중요한가

백엔드 설계에서 “정책/전략을 교체 가능하게” 만듭니다.

실무에서 바뀌는 건 구현 디테일뿐 아니라 “정책”입니다. 예를 들어 할인 정책, 인증 정책, 라우팅 규칙, 재시도 전략 같은 것들입니다. 함수가 1급 시민이면, 이런 정책을 if/switch로 분기하는 대신 함수(전략)를 주입하거나 레지스트리에 등록해 깔끔하게 교체할 수 있습니다.

GOOD

  • 정책을 함수/전략으로 분리 → 변경 범위 최소
  • 테스트에서 가짜 함수로 쉽게 치환
  • 핵심 로직이 if/switch로 오염되지 않음

BAD

  • 정책이 분기문으로 퍼져 유지보수 비용 증가
  • 새 케이스 추가 시 기존 로직을 계속 건드림
  • 테스트에서 특정 분기 타기 어려움

 

실전 예시

“할인 정책”을 함수로 바꾸면, if/switch 없이도 쉽게 교체할 수 있습니다.
// (개념 예시) 할인 정책을 "함수"로 주입한다 // - 언어/프레임워크에 따라 인터페이스/람다로 표현 가능 // discountFn: (price) -> discountAmount int checkout(int price, java.util.function.IntUnaryOperator discountFn) { int discount = discountFn.applyAsInt(price); return price - discount; } // 사용 // checkout(10000, p -> (int)(p * 0.1)); // 10% 할인 // checkout(10000, p -> 1000); // 1000원 할인

💡 TIP / “전략 패턴”을 더 가볍게

OOP에서는 Strategy 인터페이스를 만들고 클래스를 늘리는 방식이 흔합니다. 함수가 1급 시민이면, 이런 전략을 “객체” 대신 “함수”로 표현해 더 간단하게 유지할 수 있습니다.

 

1급 시민 vs 1급 함수

“1급 시민”은 일반 개념이고, “함수가 1급”은 그 중 가장 유명한 사례입니다.
구분 설명
1급 시민 값처럼 다룰 수 있는 모든 대상(변수/인자/반환/자료구조)
1급 함수 함수를 값처럼 다룰 수 있음 → 고차 함수/함수 합성/콜백 가능

 

정리

1급 시민 개념을 이해하면, FP/람다/콜백/전략 패턴을 “하나의 흐름”으로 이해할 수 있습니다.

✅ 핵심 요약

  • ✔️ 1급 시민은 대상을 “값처럼” 다룰 수 있다는 의미입니다.
  • ✔️ 조건: 변수 할당/인자 전달/반환/자료구조 저장이 가능해야 합니다.
  • ✔️ 함수가 1급이 되면 정책/전략을 함수로 주입해 설계를 단순화할 수 있습니다.
  • ✔️ 백엔드에서는 “정책 변경/테스트/확장”을 쉽게 만드는 도구로 활용됩니다.
728x90