📌 면접 답변
함수형 프로그래밍은 함수가 독립적이고 상태가 없음을 의미하고,
객체지향 프로그래밍은 객체가 독립적이고 상태와 행동을 가짐을 의미한다.
함수형 프로그래밍 특성
1. 함수를 1급 객체(First-Class Object)로 취급
- 여기서 일급 객체란 변수나 데이터 구조 안에 담을 수 있고, 파라미터로 넘기는 등의 작업이 가능
2. Side Effect이 없음
int count = 0;
public int next() {
return count++; // 외부 상태 변경 → side effect 발생
}
- 객체의 필드값 설정, 예외나 오류 발생, 파일 I/O 발생, 변수 값 변경 등
3. Lazy Evaluation
- 값을 지금 바로 계산하지 않고, 나중에 진짜 필요할 때 계산
4. Statelessness (무상태성)
int square(int x) {
return x * x;
}
- 함수 내부 상태를 갖지 않고, 동일한 입력이면 항상 동일한 출력을 낸다.
- 함수의 내부 상태를 저장하거나 변경하지 않음
- 입력이 같으면 출력도 항상 같음
5. Immutable data (불변성)
List<Integer> list1 = List.of(1, 2, 3); // Java의 불변 리스트
List<Integer> list2 = new ArrayList<>(list1);
list2.add(4); // list1은 그대로, list2만 변경됨
- 상태를 절대 바꾸지 않고, 새로운 값을 복사해서 만듬
- 값이 한번 만들어지면 바뀌지 않음
- 멀티스레드 환경에서 안정
6. 순수 함수
public class PureFunction {
public static int square(int x) {
return x * x;
}
public static void main(String[] args) {
System.out.println(square(5)); // 25
}
}
- Side Effect를 제외한 함수
함수형 프로그래밍만으로 코드를 작성 할 수 있을까 ?
- 현실에는 상태가 있기 때문에, 실무에서 함수형만 쓰는 것은 드물다.
- 유저 로그인 상태, 파일 읽기, DB 등은 부작용 없이 처리하기 어려움
- 함수형만으로 처리하면 복잡하게 처리된다.
그렇다면 함수형 프로그래밍은 언제 쓰는게 좋을까 ?
- 함수형은 상태가 없고 불변하니까 Race Condition, Deadlock 걱정이 적다
- 채팅 서버, 데이터 스트리밍 처리 등
- 데이터 흐름 중심의 계산
// 예: Java Stream API
List<String> result = names.stream()
.filter(n -> n.startsWith("A"))
.map(String::toUpperCase)
.collect(Collectors.toList());
- 프론트엔드 상태 관리
- 분산 시스템 / 메시지 기반 처리
- 분산 시스템은 상태 공유가 어려워 상태 없는 방식이 적합
- Kafka, RabbitMQ 같은 시스템에서 메시지를 받아 가공할 때
자바에서 함수형 프로그래밍
- 자바에서도 Stream API, Optional, Function 등의 함수형 인터페이스를 통해 함수형 프로그래밍 스타일 사용 가능
public class FunctionalExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
numbers.stream()
.filter(n -> n % 2 == 0) // 짝수만 필터링
.map(n -> n * n) // 제곱
.forEach(System.out::println); // 출력
}
}
함수형 프로그래밍과 객체 지향 프로그래밍은 각각 독특한 장점을 갖고 있다.
객체지향과 함수형 프로그래밍은 조화될 수 있음
두 패러다임의 장점을 결합하여 사용하는 것도 하나의 효과적인 접근 방식이다
📌 내 답변
함수형 프로그래밍 ...? 절차지향 프로그래밍을 의미하는건가 ?
절차지향 프로그래밍 (Procedure Programming)은 절차에 따라 프로그래밍을 하는 것을 의미한다.
좀 더 구체적으로 말하자면, 객체지향과는 객체들의 상호작용보다는, 함수 호출하는대로 진행된다.
Self Feedback
- 함수형 프로그래밍과 절차형 프로그래밍은 완전히 다르다.
- 자바에서도 함수형 프로그래밍을 사용한다.
- 함수형 프로그래밍의 대표적인 언어로는 Haskell, Scala 등의 언어가 있다.
[출처 및 참고 자료]
https://www.maeil-mail.kr/question/162
매일메일 - 기술 면접 질문 구독 서비스
기술 면접 질문을 매일매일 메일로 보내드릴게요!
www.maeil-mail.kr
https://mangkyu.tistory.com/111
[프로그래밍] 함수형 프로그래밍(Functional Programming) 이란?
1. 함수형 프로그래밍(Functional Programming)에 대한 이해 [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를
mangkyu.tistory.com
'😀 Jerry > 면접 질문' 카테고리의 다른 글
[1분 면접] URI, URL, URN의 차이점은 무엇인가요? (0) | 2025.04.17 |
---|---|
[1분 면접] 테스트 주도 개발이 무엇인가요 ? (0) | 2025.04.16 |
[1분 면접] 해시 충돌에 대해서 설명해주세요. (0) | 2025.04.15 |
[1분 면접] JVM에서 GC 대상 객체를 판단하는 기준 (+ JVM 구조) (2) | 2025.04.14 |
[1분 면접] CAP 정리에 대해서 설명해주세요. (0) | 2025.04.11 |