프로그래밍에는 "무엇을 해야 할지"만 말하는 방식과 "어떻게 해야 할지"까지 지시하는 방식이 있다. 바로 이 차이가 선언형(Declarative)과 명령형(Imperative) 프로그래밍의 차이이다.
선언형 프로그래밍이란?
'선언형 프로그래밍' 은 "무엇을 할 것인지(What)"에 집중하는 프로그래밍 방식이다. 즉, "어떻게 처리할지(How)"는 신경 쓰지 않고, 원하는 결과만을 기술한다.
개발자가 결과를 선언하면 구체적인 처리방법은 언어나 라이브러리가 내부적으로 처리한다.
예시 코드
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // [2, 4, 6]
무엇을 할지(짝수만 필터링)를 선언하였다. 그 로직은 내부적으로 반복을 처리한다.
함수형 프로그래밍
선언형 프로그래밍의 한 개념이 바로 함수형 프로그래밍(Functional Programming)이다. 함수형 프로그래밍은 "함수(Function)를 기반으로 프로그램을 구성하는 패러다임"이다.
대표적인 특징
- 순수 함수(Pure Function)
- 동일한 입력에 대해 항상 동일한 출력을 반환하고, 외부 상태를 변경하지 않는다.
- 불변성(Immutable Data)
- 데이터는 변경되지 않고, 변경이 필요한 경우 복사본을 만들어 새로 생성한다.
- 고차 함수(Higher-order Function)
- 함수를 인자로 전달하거나 반환값으로 사용할 수 있다.
- 일급 객체(First-class Function)
- 함수가 변수에 저장되거나 다른 함수에 전달될 수 있다.
- 선언형 스타일
- 연산의 ‘어떻게’보다는 ‘무엇’을 강조하며, 코드가 간결하고 명확해진다.
- 지연 평가(Lazy Evaluation)
- 필요할 때까지 계산을 미루는 방식으로 성능 최적화에 유리합니다.
명령형 프로그래밍이란?
"무엇을 할지"뿐만 아니라 "어떻게 할지"를 명확하게 순서대로 기술하는 프로그래밍 방식이다. 개발자가 직접 로직과 흐름을 제어하고 명령어와 변수의 상태 변화에 의존한다.
예시 코드
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
System.out.println(sum); // 출력: 15
반복문과 변수 상태 변경을 통해 명령형으로 문제를 해결한다.
대표 언어
- C, Java, Python (절차적 코드 작성 시), JavaScript 등 대부분의 범용 언어는 명령형 스타일을 지원한다.
명령형 프로그래밍과 선언형 프로그래밍의 차이
기준 | 명령형 | 선언형 |
코드 스타일 | for 루프와 조건문 중심 | stream(), filter() 같은 고수준 함수 사용 |
가독성 | 코드 길고 절차 중심 | 간결하고 의도 중심 |
유지보수 | 절차 변경 시 직접 수정 필요 | 구조 변경 없이 함수 체이닝으로 수정 가능 |
'Interview Question' 카테고리의 다른 글
[백엔드 면접 질문 준비] (7) RDB에서 페이징 쿼리의 필요성 (0) | 2025.04.15 |
---|---|
[백엔드 면접 질문 준비] (6) JVM이란 무엇인가? (0) | 2025.04.05 |
[백엔드 면접 질문 준비] (5) 프로세스와 스레드의 차이는 무엇인가요? (0) | 2025.04.04 |
[백엔드 면접 질문 준비] (4) CI/CD란? (0) | 2025.04.03 |
[백엔드 면접 질문 준비] (3) HTTP 상태 코드에 대해 말해보세요. (0) | 2025.04.02 |