OOP와 함수형 프로그래밍 QA
Q: OOP 특징에 대한 설명이 가능한가?
A
OOP란 Object Oriented Programming으로 객체지향 프로그래밍이라고 하며, 4가지의 특징이 있습니다.
상속은 클래스 개념에서 부모 클래스로부터 자식 클래스가 유산을 물려받는것과 같이 부모의 메소드나 변수를 사용할 수 있는 것을 말하고, 다형성은 같은 함수가 있다고 가정하면 그 함수가 매개변수에 따라 다른 역할을 할 수 도 있는 것이고, 캡슐화는 보통 데이터를 은닉 시킨다고 표현하는데, 외부에서 쉽게 데이터를 접근할 수 없게 만들기도 하고, 데이터 구조와 데이터를 다루는 방법들을 한곳에 묶는 것을 말합니다.
추상화는 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것입니다. [ 예: a,b,c가 있다면 이것은 영어로 묶을 수 있습니다 ]
Q: 함수형 프로그래밍에 대해 설명이 가능한가?
A
함수형 프로그래밍은 같은 입력 값이라면 항상 같은 결과 값을 반환하며 side-effects를 가지지 않고, 공유되는 스코프안에 존재하는 모든 변수, 객체, 메모리 공간 또는 스코프 간에 전달되는 객체의 속성으로 공유 상태, 그리고 생성된 이후에도 변경 가능한 데이터와 side-effects를 피하려는 프로그래밍 입니다.
또한, 함수형 프로그래밍은 명령적이라기보단 선언적이며 어플리케이션의 상태의 흐름이 순수함수를 통해 흐릅니다.
Q: 함수형 프로그래밍 개념에서 순수함수가 무엇인가?
A
순수함수는 같은 입력이 주어지면, 같은 출력을 반환해야하고, side effect(부작용) 가 없어야 합니다.
결국, 함수형 프로그래밍은 순수함수를 통해 sideeffect를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이려는 노력의 한 방법입니다.
Q: OOP와 함수형 프로그래밍의 가장 큰 차이점은 무엇인가?
A
객체지향은 객체 안에 상태를 저장하고, 이 상태를 이용해서 메소드를 추가하고 상태변화를 설정하고 조정하기위해 다양한 기능을 사용하고 함수형 프로그래밍은 상태를 제어하는것보다 상태를 저장하지 않고 없애는데 더 주력합니다.
예를들면, 객체 지향은 상태를 저장하는 필드와 그 필드들을 이용해 기능을 제공하는 메소드를 만들고 클래스를 만드는 반면에 함수형은 몇몇 자료구조(list, map, set) 등을 이용해 최적화된 동작을 만들어냅니다.