오라클 코퍼레이션은 Java SE 8에서 몇 가지 기능적 구조를 소개했기 때문에 요즘에는 대부분의 인터뷰어들이 함수형 프로그래밍에 관한 몇 가지 질문을 하고 있습니다. Java/Groovy/Scala 개발자 또는 기타 함수형 프로그래밍 개발자로서 인터뷰를 통과하기 위해 다음 질문과 답변을 배워야 합니다:
- 함수형 프로그래밍이란 무엇인가요?
- 함수형 프로그래밍의 장단점은 무엇인가요?
- 함수형 프로그래밍과 명령형 프로그래밍의 차이점은 무엇인가요?
- 함수형 프로그래밍과 객체지향 프로그래밍의 차이점은 무엇인가요?
- 함수형 프로그래밍, 명령형 프로그래밍(IP), 객체지향 프로그래밍 간의 주요 차이점은 무엇인가요?
- 함수형 프로그래밍이 명령형 프로그래밍 또는 객체지향 프로그래밍보다 가지는 주요 장점은 무엇인가요?
- 함수형 프로그래밍을 사용해야 하는 시점은 언제인가요?
- 객체지향 프로그래밍을 사용해야 하는 시점은 언제인가요?
- OOP의 단점은 무엇인가요?
- OOP 상속의 단점은 무엇인가요?
… 그리고 더 많은 내용
이 게시물에서는 다음 세 가지 인기 있는 프로그래밍 패러다임에 대해 하나씩 논의하고 위의 질문에 답변할 것입니다:
- 함수형 프로그래밍 (FP)
- 명령형 프로그래밍 (IP)
- 객체지향 프로그래밍 (OOP)
함수형 프로그래밍이란 무엇인가요?
간단히 말하면, 함수형 프로그래밍 (FP)은 수학적 함수와 같이 계산을 수행하며 상태 변경과 데이터 변이 없이 작동하는 인기 있는 프로그래밍 패러다임 중 하나입니다. 함수형 프로그래밍에서는 함수가 일등 시민입니다. 우리는 일련의 함수와 불변 데이터를 정의하여 프로그램을 작성합니다. FP 언어의 예: Scala, Haskell, Erlang 등이 인기 있는 FP 언어입니다. Java SE 8에도 일부 함수형 구조가 포함되어 있습니다 (자세한 내용은 Java 8 포스트를 참조하세요)
FP의 특징은 무엇인가요?
Scala와 같은 함수형 프로그래밍 언어는 다음과 같은 특징을 가지고 있습니다.
- 상태는 존재하지 않습니다.
FP 프로그램에는 상태가 없습니다. 이는 모든 데이터가 불변 데이터이고 함수가 상태를 변경할 수 없다는 것을 의미합니다.실행 순서의 중요성이 낮음
FP 언어에서는 독립적인 함수 집합으로 프로그램을 작성합니다. 함수는 명령문 집합을 포함합니다. FP에서는 이러한 함수의 실행 순서가 중요하지 않습니다. 왜냐하면 상태가 없고 모든 함수가 독립적으로 작동하기 때문입니다. 실행 순서를 변경해도 여전히 동일한 결과를 생성합니다.상태가 없는 프로그래밍 모델
모든 FP 프로그램은 수정할 수 없는 데이터와 함수를 사용합니다. 이는 FP 언어가 상태가 없는 프로그래밍 모델을 지원한다는 것을 의미합니다.함수는 일급 시민입니다
FP 언어에서 함수는 일급 객체입니다. 함수는 독립적인 단위이며 어떤 순서로든 실행할 수 있습니다.주요 조작 단위
FP 언어에서 주요 조작 단위는 함수와 데이터 구조입니다. 모든 프로그램은 이러한 단위를 사용하여 작성됩니다.모듈식 프로그래밍
FP 언어에서는 상태가 없는 프로그래밍 모델을 지원하기 위해 순수 함수라는 작은 독립적인 단위를 작성해야 합니다. 이는 FP가 OOP보다 더 나은 모듈성을 지원한다는 것을 의미합니다.고차 함수와 지연 평가
함수형 프로그래밍 언어는 고차 함수와 지연 평가 기능을 지원해야 합니다.주요 흐름 제어
FP 언어는 For…Loop, Do…While Loop, While…Loop 등과 같은 흐름 제어를 사용하지 않으며 If…Else나 Switch 문과 같은 조건문도 사용하지 않습니다. 모든 FP 언어는 다음을 사용하여 프로그램을 작성합니다:
- 함수
- 기능 호출
- 재귀를 사용한 기능 호출
- 추상화, 캡슐화, 상속 및 다형성
OOP와 마찬가지로 FP 언어는 모든 4가지 개념을 지원합니다: 추상화, 캡슐화, 상속 및 다형성. FP 언어는 타입 클래스나 암시적으로 상속을 지원합니다. 그들은 제네릭을 통해 다형성을 지원합니다. 이것은 Parametric Polymorphism으로도 알려져 있습니다.
FP의 주요 초점은 무엇입니까?
OOP 언어와 달리, 모든 FP 언어 프로그램은 주로 “무엇을 하고 있는지” 또는 “무엇을 해야 하는지”에 중점을 둡니다. 그들은 주로 다음 사항에 중점을 둡니다:
- 입력으로 원하는 정보.
- 실제 로직으로 필요한 변환.
즉, FP는 주로 “무엇을 해야 하는지”에 초점을 둡니다. 그것은 “어떻게 해야 하는지”에 크게 중점을 두지 않습니다. 이것은 우리가 문제 도메인 설명과 같이 함수형 프로그래밍을 작성할 수 있다는 것을 의미합니다. 그래서 개발자뿐만 아니라 다른 사람들도 FP 코드를 매우 쉽게 이해할 수 있습니다. 이제 함수형 프로그래밍의 “장점 및 단점” (장단점)에 대해 논의하겠습니다.
함수형 프로그래밍의 장점?
함수형 프로그래밍 언어에는 다음과 같은 장점이 있습니다:
- 버그 없는 코드
FP 언어는 상태를 지원하지 않기 때문에 부수 효과를 발생시키지 않습니다. 이는 오류가 없는 코드 또는 버그가 없는 코드 또는 오류가 적은 코드를 작성할 수 있다는 것을 의미합니다. – 효율적인 병렬 프로그래밍
FP 언어는 가변 상태가 없기 때문에 상태 변경 문제를 발생시키지 않습니다. 즉, 불변 데이터만을 사용합니다. 이는 “함수”라는 독립된 단위를 사용하여 프로그램을 작성할 수 있음을 의미합니다. 우리는 상태를 변경하지 않고 독립적으로 실행되기 때문에 매우 효율적인 병렬 또는 동시 프로그래밍을 작성할 수 있습니다. – 더 나은 성능
FP 프로그램은 모든 독립적인 단위로 구성되어 있으므로 병렬 또는 동시에 실행할 수 있습니다. 이러한 이유로 FP 응용 프로그램은 더 나은 성능을 얻습니다. – 더 나은 캡슐화
OOP와 달리 FP는 순수 함수로 더 나은 캡슐화를 지원합니다. 순수 함수는 부수 효과가 없음을 의미합니다. – 중첩 함수 지원
중첩 함수는 문제를 해결하기 위해 다른 함수 내에서 함수를 구성하는 것을 의미합니다. FP는 중첩 함수를 지원합니다. – 재사용성 증가
FP 프로그램은 “함수”라는 독립적인 단위로 구성되어 있으므로 이를 매우 쉽게 재사용할 수 있습니다. – 더 나은 모듈러리티
FP 언어에서는 상태가 없는 프로그래밍 모델을 지원하기 위해 더 작고 독립적인 단위인 순수 함수를 작성해야 합니다. 즉, FP는 OOP보다 더 나은 모듈러리티를 지원합니다. – 쉬운 지연 평가
FP 언어에서는 지연 평가를 쉽게 작성할 수 있습니다. FP는 지연 리스트, 지연 맵 등과 같은 지연 함수 구조를 지원합니다. – 가독성 및 유지 관리성 증가
함수형 프로그래밍(FP)은 독립적으로 작동하며 상태를 변경하지 않기 때문에 가독성 및 유지 관리성도 향상됩니다. – 테스트 가능성 증가
FP 프로그램은 “함수”라는 독립적인 단위를 사용하여 작성되기 때문에 이를 단위 테스트하는 것이 매우 쉽습니다. – 동작에 대한 추상화 지원
OOP와 달리 FP는 “데이터에 대한 추상화”와 “동작에 대한 추상화”를 모두 지원합니다. 왜냐하면 실세계는 둘 다 포함하기 때문입니다. – BigData 지원
FP는 병렬 프로그래밍과 더 나은 성능을 지원하기 때문에 대용량 데이터 애플리케이션을 개발하는 데 매우 적합합니다. – 견고하고 신뢰할 수 있는 코드
FP는 불변 데이터를 사용하기 때문에 FP를 사용하여 견고하고 신뢰할 수 있는 코드를 쉽게 개발할 수 있습니다.
기능 프로그래밍의 단점?
위대한 혜택 외에도 기능 프로그래밍 언어는 매우 적거나 무시할 수 있는 단점이 있습니다. 다음과 같은 단점만 있습니다:
- 많은 메모리를 필요로 함
FP는 상태를 가지지 않습니다. 기존 객체를 수정하는 대신 항상 새로운 객체를 생성하여 작업을 수행합니다. 이로 인해 FP 응용 프로그램은 많은 메모리를 사용합니다. Liskov 대체에 집중하지 않음
기능 프로그래밍의 주요 개념은 무엇인가요?
다음 개념은 기능 프로그래밍의 주요하고 중요한 개념입니다.
- 일급 함수.
- 지연 평가.
- 고차 함수.
- 불변성(변경 불가능한 데이터).
- 모듈화.
- 부작용 없음.
- 지연 평가.
- 재귀적 함수 호출.
임퍼러티브 프로그래밍이란 무엇인가요?
임퍼러티브 프로그래밍(IP)은 일련의 단계/명령문을 어떤 순서로 실행하는 인기있는 프로그래밍 패러다임 중 하나입니다. IP 언어의 예시:- 자바, C, C++ 등
임퍼러티브 프로그래밍의 주요 특징은 무엇인가요?
임퍼러티브 프로그래밍(IP) 언어는 다음과 같은 특성을 포함할 수 있습니다:
- 명령문의 연속.
- 명령문의 실행 순서가 매우 중요합니다.
- 상태를 포함합니다.
- 불변 및 가변 데이터를 모두 사용합니다.
- 상태를 변경할 수 있습니다.
- 부작용이 있을 수 있습니다.
- 상태 지향 프로그래밍 모델.
- 프로그램의 상태를 직접 변경합니다.
- 데이터 필드로 상태를 나타냅니다.
객체 지향 프로그래밍이란 무엇인가요?
객체 지향 프로그래밍은 다른 종류의 프로그래밍 패러다임입니다. 모든 것을 객체로 나타냅니다. 각 객체에는 일부 데이터 필드와 메서드가 포함됩니다. 모든 객체 지향 프로그램은 상태를 포함합니다. 가변 데이터와 데이터 구조를 사용합니다. 함수형 프로그래밍과 마찬가지로 불변 데이터를 사용하여 완전한 프로그램을 작성할 수 있지만 이 규칙을 강제하지는 않습니다. 객체 지향 프로그래밍(OOP)은 명령형 프로그래밍의 슈퍼셋입니다. 일부 추가 기능을 포함하여 IP의 모든 특성을 따릅니다. 이러한 추가 기능은 다음과 같습니다:
- 모든 것이 객체입니다.
- 각 객체에는 일부 데이터 필드와 메서드가 포함됩니다.
- OOP 개념: 추상화, 캡슐화, 상속 및 다형성
함수형 프로그래밍 언어와 달리, OOP 언어는 주로 “어떻게 하는가”에 중점을 둡니다. 개발자로서, 우리는 “어떻게 하는가”에 집중합니다. 또한, OOP는 “무엇을 하는가”와 “어떻게 하는가”를 결합합니다. 그래서 우리는 간결하고 더 읽기 쉬운 코드를 작성할 수 없습니다. 오직 개발자만이 코드를 이해할 수 있으며, 다른 사람들은 응용 프로그램 코드를 이해하는 데 더 많은 혼란을 겪을 수 있습니다. 이해할 수 없습니다.
객체 지향 프로그래밍(OOP)의 단점은 무엇인가요?
실시간 문제를 해결하는 데 많은 도움이 되지만, 아직도 다음과 같은 단점이 있습니다(FP와 비교했을 때):
- 완전한 재사용성을 지원하지 않습니다.
- 그것은 완전한 모듈성이 아닙니다.
- 그것은 캡슐화 개념을 깨뜨립니다.
- 상속은 많은 단점이 있습니다.
상속의 주요 단점:
- 캡슐화 원칙을 깨뜨립니다.
- 상속 레벨이 증가함에 따라 유지 및 객체 생성이 매우 어렵습니다.
함수형 프로그래밍을 사용하는 시점은?
다음 시나리오에서 함수형 프로그래밍 (FP)을 선택해야 합니다:
- 데이터에 대해 많은 다양한 작업을 수행할 예정일 때.
- 다시 말해, 더 많은 작업을 수행하는 몇 가지 항목이 있는 경우.
객체 지향 프로그래밍을 사용하는 시점은?
다음 시나리오에서 객체 지향 프로그래밍 (OOP)을 선택해야 합니다:
- 다양한 변형에서 적은 작업을 수행할 예정일 때, 이러한 변형에는 공통된 동작이 있습니다.
- 다른 말로, 우리가 더 많은 것들을 적은 작업으로 처리할 때입니다.
참고:- 여기서 ‘것들’은 현실 세계의 객체이고 ‘작업들’은 현실 세계의 동작입니다. 예를 들어, 자바에서는 이러한 현실 세계의 ‘것들’을 “클래스”로, 현실 세계의 ‘작업들’을 메서드(동작)로 표현합니다.
FP와 OOP(IP)의 차이점?
Functional Programming | OOP |
---|---|
Does not exist State | Exists State |
Uses Immutable data | Uses Mutable data |
It follows Declarative Programming Model | It follows Imperative Programming Model |
Stateless Programming Model | Stateful Programming Model |
Main Fcous on: “What you are doing” | Main focus on “How you are doing” |
Good for Parallel (Concurrency) Programming | Poor for Parallel (Concurrency) Programming |
Good for BigData processing and analysis | NOT Good for BigData processing and analysis |
Supports pure Encaspulation | It breaks Encaspulation concept |
Functions with No-Side Effects | Methods with Side Effects |
Functions are first-class citizens | Objects are first-class citizens |
Primary Manipulation Unit is “Function” | Primary Manipulation Unit is Objects(Instances of Classes) |
Flow Controls: Function calls, Function Calls with Recursion | Flow Controls: Loops, Conditional Statements |
It uses “Recursion” concept to iterate Collection Data. | It uses “Loop” concept to iterate Collection Data. For example:-For-each loop in Java |
Order of execution is less importance. | Order of execution is must and very important. |
Supports both “Abstraction over Data” and “Abstraction over Behavior”. | Supports only “Abstraction over Data”. |
We use FP when we have few Things with more operations. | We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java. |
이것이 세 가지 인기 있는 프로그래밍 패러다임에 관한 모든 것입니다. 참고:- 저는 기본적으로 OOP에서 왔지만 작년에 FP에 대해 일을 시작했습니다. 따라서 함수형 프로그래밍 전문가들이이 게시물에서 오류를 발견한다면 소중한 피드백을 제공해주세요. 내 게시물이 마음에 들거나 의문이 있거나 제안 사항이 있는 경우 댓글을 남겨주세요.