😀 Jerry/면접 질문

[1분 면접] 함수형 프로그래밍에 대해 설명해주세요.

Jerry_K 2025. 4. 21. 11:31

📌 면접 답변

 


함수형 프로그래밍은 함수가 독립적이고 상태가 없음을 의미하고, 

객체지향 프로그래밍은 객체가 독립적이고 상태와 행동을 가짐을 의미한다. 

 

 

함수형 프로그래밍 특성

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