본문 바로가기

javascript/Basic

TIL no.51 - 객체 지향 프로그래밍과 함수형 프로그래밍

객체 지향 프로그래밍보다 더 발전 되어 나온 것이 함수형 프로그래밍이라고 생각할 수 있으나 이는 맞지 않습니다.

객체 지향과 함수형 프로그래밍은 서로 다른 패러다임이라고 생각하시면 될 것 같습니다.

이 두가지의 차이점을 알아보고 이해하며 공부해보겠습니다.

 

객체 지향 프로그래밍 (Object Oriented Programming)

:객체 중심적인 프로그래밍으로 데이터를 추상화시켜 객체를 만들고 객체 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

캡슐화의 특징을 가진 코드들로 코드의 재사용성이 높아지고 이러한 객체로 작성된 코드는 정보 은닉성의 특징을 띄어 유지 보수가 쉬울 수 있습니다. 하지만 처리 속도가 상대적으로 느리고 객체가 많으면 용량이 커질 수 있다는 단점이 있습니다.

 

 

- 정보 은닉

객체 지향 프로그래밍은 정보 은닉의 특징을 가지고 있습니다.

객체에 정보를 숨기고 사용자에게 보여주고 싶은 부분만 접근하게 할 수 있습니다.

 

- 캡슐화

데이터를 처리하는 함수를 하나로 묶어서 관리할 수 있습니다. 이러한 객체들은 재사용이 가능하며 세부 내용은 정보 은닉의 특징으로 사용했기 때문에 외부 객체가 특정 객체에 직접 접근하지 않아서 오류가 적습니다. 이때문에 객체간의 결합도가 낮아집니다.

 

- 상속성

부모 클래스의 모든 속성을 자식 클래스가 물려받습니다.

부모의 값을 재사용할 수 있으며 새로운 속성과 값을 덧붙여서 사용가능합니다.

 

 

함수형 프로그래밍 (Function Programming)

: 함수형 프로그래밍은 순수 함수를 조합하고 공유 상태, 변경 가능한 데이터 및 부작용(Side Effect)을 피하여 소프트웨어를 만드는 프로세스입니다.

함수형 프로그래밍은 명령형이 아닌 선언형이며 애플리케이션의 상태는 순수 함수를 통해 전달됩니다.

 

함수 내부에서 인자로 받은 값을 별도로 저장하지 않고 순수 함수를 이용해 매핑하여 간결하게 처리하는데에 목적을 둡니다.

객체 지향 프로그래밍에 비해 코드 이해도와 가독성에 큰 장점을 가지고 있습니다.

 

*순수함수: 항상 같은 결과 값을 반환하는 함수.

 

 

- 불변성 

함수형 프로그래밍에서는 데이터가 변할 수 없습니다.

데이터 변경이 필요한 경우에 원본 데이터를 변경하지 않고 그 데이터의 복사본을 만들어 일부를 수정하여 사용합니다.

이러한 방식으로 불변성을 지키며 함수형 프로그래밍을 사용할 수 있습니다.

 

 

함수형 프로그래밍사용하는 이유와 사용하지 않는 이유

: 코드가 더 간결하고 가독성이 높다. 객체 지향 코드에 비해 더 예측 가능하다. 하지만 함수형 코드의 방식과 패턴들에 익숙해지지 않았을 때는 오히려 더 복잡해보이고 어렵게 다가온다. 그렇기 때문에 어떤 것이 더 낫다라고 표현하기 어려운 것이다.

함수형 프로그래밍을 이해하기도 전에 사용한다면 더 복잡하고 어려운 코드를 작성하게 될 지도 모른다. 그 경우에는 객체 지향 프로그래밍을 사용하는 것이 더 낫다고 말할 수도 있겠다. 이처럼 상황에 따라서 맞는 방식을 선택하면 될 것 같다.