CodeGym /Java Blog /무작위의 /객체 지향 대 기능적 프로그래밍. 어떤게 더 좋아?
John Squirrels
레벨 41
San Francisco

객체 지향 대 기능적 프로그래밍. 어떤게 더 좋아?

무작위의 그룹에 게시되었습니다
첫 번째 코딩 언어로 Java를 배우기 시작하면 필연적으로 프로그래밍 및 소프트웨어 개발에 대한 여러 가지 기본 기본 사항을 배워야 합니다. 그중 하나는 프로그래밍 패러다임과 그 차이점입니다. 함수형 프로그래밍과 객체 지향 프로그래밍은 프로그래밍의 두 가지 패러다임 또는 스타일입니다. 오늘 살펴볼 내용은 이들이 무엇인지, 함수형 프로그래밍과 OOP가 어떻게 다른지 이해하려고 노력하는 것입니다. 프로그래밍 패러다임을 아는 것은 진지한 프로그래머, 특히 소프트웨어 개발 분야에서 장기적인 경력을 목표로 하는 경우에 필요한 기본적인 이론적 지식의 중요한 부분이 될 것입니다. 객체 지향 대 기능적 프로그래밍.  어떤게 더 좋아?  - 1

프로그래밍 패러다임이란 무엇입니까?

그러나 OOP와 함수형 프로그래밍(FP)의 차이점을 이해하려면 기본부터 시작하여 프로그래밍 패러다임이 실제로 무엇인지 명확히 해야 합니다. 프로그래밍 패러다임은 함께 결합되어 패러다임 또는 스타일, 컴퓨터 프로그래밍의 특정 방식을 형성하는 기능을 기반으로 코딩 언어를 분류하는 방법입니다. 개체, 제어 흐름, 모듈성, 인터럽트 또는 이벤트 등을 포함하여 많은 기능이 프로그래밍 패러다임을 결정합니다. 코딩 언어와 마찬가지로 모든 프로그래밍 패러다임에는 장단점, 장단점, 강점과 약점이 있습니다. 염두에 두고 있는 프로젝트의 언어를 선택할 때 고려해야 할 사항입니다.

OOP가 무엇인가요?

객체 지향 프로그래밍(OOP)은 객체를 키로 사용하는 개념적 프로그래밍 패러다임입니다. 이 모델에서 개체는 프로그래밍 중인 항목을 나타내는 데 사용됩니다. 또한 OOP는 추상화를 사용하여 실제 세계를 기반으로 모델을 생성한다고 말할 수 있습니다. Java, C++, Python 및 PHP를 포함하여 널리 사용되는 많은 프로그래밍 언어가 OOP를 지원합니다. 모듈성, 다형성, 캡슐화, 추상화 및 상속과 같은 이전에 확립된 다른 프로그래밍 패러다임의 많은 기술이 OOP의 일부입니다.

함수형 프로그래밍이란 무엇입니까?

함수형 프로그래밍은 함수를 평가하고 프로그램 코드의 구조를 개발하는 데 중점을 두어 궁극적으로 변경되는 상태와 변경 가능한 데이터를 피하는 프로그래밍 패러다임이기도 합니다. 함수형 프로그래밍은 함수에 대해 정확히 동일한 입력이 제공되는 경우 함수의 출력이 동일한지 확인하기 위해 식을 평가하는 것입니다. Common Lisp, Scheme, Clojure, Wolfram Language, Erlang, Haskell 등이 가장 인기 있고 널리 사용되는 기능적 언어가 많이 있습니다. 함수형 프로그래밍을 지원하거나 이 패러다임에서 일부 구현된 기능이 있는 언어도 많이 있습니다. C++, Python, Scala, PHP, Kotlin 및 Perl이 그 중 하나입니다. 함수형 프로그래밍은 통계의 R과 같은 일부 과학 및 기타 전문 언어에서도 매우 중요합니다.

OOP와 함수형 프로그래밍 비교

그 설명은 별로 도움이 되지 않았죠? 보다 근본적인 관점에서 이것을 보도록 노력합시다. 컴퓨터 프로그램의 주요 기본 구성 요소는 무엇입니까? 그것들은 데이터 (프로그램이 알 수 있는 것)와 프로그래밍된 동작 (이 데이터로 할 수 있는 것)입니다. OOP와 FP가 컴퓨터 프로그래밍에 접근하는 방식의 주요 차이점은 무엇입니까? 음, OOP가 사용하는 방식은 데이터와 해당 데이터와 관련된 동작을 "객체"라고 하는 한 위치로 결합하는 데 의존합니다. 객체를 사용하면 프로그래머가 프로그램 작동 방식을 단순화할 수 있습니다. 반면에 기능적 프로그래밍은 데이터와 동작이 서로 다른 두 가지로 유지되어야 하며 전반적인 명확성, 이해하기 쉬운 코드 및 더 높은 코드 재사용성을 위해 분리되어서는 안 된다고 말합니다.

OOP와 FP의 차이점

OOP와 FP의 차이점을 가능한 한 명확하게 하기 위해(비교적 짧은 기사에서) 이 두 패러다임 간의 주요 차이점을 하나씩 지정해 보겠습니다.

1. 개념 및 정의.

OOP는 개발자가 생성한 추상 데이터 유형으로서의 개체 개념을 기반으로 하며 여러 속성과 메서드를 포함할 수 있으며 다른 개체를 포함할 수도 있습니다. FP의 핵심 강조점은 기능 평가에 있으며 각 기능은 특정 작업을 수행합니다.

2. 기본 요소.

OOP의 기본 요소는 변경 가능한(생성된 후 수정 가능) 데이터가 사용된 개체 및 메서드입니다. FP에서 함수와 변수는 기본 요소인 반면 함수의 데이터는 항상 변경할 수 없습니다(생성된 후에는 수정할 수 없음).

3. 프로그래밍 모델.

OOP는 명령형 프로그래밍 모델을 따릅니다. FP는 선언적 프로그래밍 모델을 따릅니다.

4. 병렬 프로그래밍.

OOP는 병렬 프로그래밍을 지원하지 않습니다. FP는 병렬 프로그래밍을 지원합니다.

5. 명령문 실행 순서.

OOP에서 문은 실행하는 동안 지정된 접근 방식에 따라 순서를 따라야 합니다. FP에서 명령문은 성공적으로 실행되기 위해 특정 순서를 따를 필요가 없습니다.

6. 액세스 지정자.

OOP 언어에는 세 가지 액세스 지정자(클래스, 메서드 및 기타 멤버의 액세스 가능성을 설정하는 키워드)가 있습니다: Public, Private 및 Protected. FP 기반 언어에는 액세스 지정자가 없습니다.

7. 유연성 및 데이터/기능 추가.

유연성은 기존 프로그램에 새로운 데이터와 기능을 쉽게 추가할 수 있는 방법을 제공하므로 OOP 언어의 핵심 강점 중 하나입니다. FP 언어를 사용하면 프로그램에 새로운 것을 추가하는 것이 덜 편리하고 더 복잡합니다.

8. 데이터 숨기기 및 보안.

보안은 OOP 언어가 데이터 은닉을 지원하므로 궁극적으로 안전한 프로그램을 만들 수 있게 해주는 객체 지향 프로그래밍의 또 다른 장점입니다. 그나저나 별도의 기사에서 Java가 안전한 언어로 간주되는 이유(이것이 사실이라면)에 대해 이야기했습니다 . 함수형 프로그래밍에서는 데이터 숨김이 불가능하므로 FP 언어로 안전한 프로그램을 개발하려는 경우 큰 장애물이 됩니다.

OOP 대 FP. 어떤게 더 좋아?

그렇다면 OOP 프로그래밍 패러다임이 FP와 싸우게 된다면 어느 쪽이 이길까요? 이것은 분명히 농담 질문입니다. 그러나 그렇지 않다면 우리는 OOP가 FP의 엉덩이를 걷어차는 데 확실히 걸었을 것입니다(단지 Java가 OOP의 팀에 있기 때문에). 농담은 제쳐두고 이러한 각 스타일에는 다소 직접적인 장단점이 있습니다. 요즘에는 OOP가 더 일반적입니다. 이 스타일은 크고 복잡한 프로젝트에 훨씬 더 적합하기 때문입니다. 개체와 메서드는 일반적으로 쉽게 이해할 수 있으므로 완전한 초보자도 비교적 쉽게 OOP 프로그래밍을 마스터할 수 있습니다. 일반적으로 객체 지향 프로그래밍은 백엔드 개발에서 정말 잘 작동합니다. 왜냐하면 여러 다른 시스템과 플랫폼에서 작업할 때 OOP를 사용하면 모든 것을 (객체로) 압축하고 권한이 없는 당사자로부터 안전하게 유지할 수 있기 때문입니다. 낮은 코드 재사용성 및 OOP 코드가 가질 수 있는 프로세스에 대한 잠재적인 예기치 않은 부작용 및 영향은 OOP 모델의 주요 단점 중 하나입니다. 반면 함수형 프로그래밍은 복잡성이 억제되고 지정될 때 좋기 때문에 FP는 깔끔한 코드와 투명한 함수가 더 중요한 프런트 엔드 개발에서 종종 사용되어 예기치 않은 부작용 없이 안정적인 성능을 얻을 수 있습니다. . 잠재적으로 광범위한 확장이 필요한 복잡한 시스템의 개발과 관련하여 FP는 OOP에 비해 덜 효과적이며 적용 가능합니다. 따라서 FP는 깔끔한 코드와 투명한 기능이 더 중요한 프런트 엔드 개발에서 종종 사용되어 예기치 않은 부작용 없이 안정적인 성능을 얻을 수 있습니다. 잠재적으로 광범위한 확장이 필요한 복잡한 시스템의 개발과 관련하여 FP는 OOP에 비해 덜 효과적이며 적용 가능합니다. 따라서 FP는 깔끔한 코드와 투명한 기능이 더 중요한 프런트 엔드 개발에서 종종 사용되어 예기치 않은 부작용 없이 안정적인 성능을 얻을 수 있습니다. 잠재적으로 광범위한 확장이 필요한 복잡한 시스템의 개발과 관련하여 FP는 OOP에 비해 덜 효과적이며 적용 가능합니다.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION