프로그래밍 패러다임은 프로그래밍할 때 관점을 제공해주고, 설계를 결정하도록 돕는 패러다임이다.
절차지향, 객체지향, 함수지향 이 있다.
class를 사용하지 않고 함수 위주로 작성하며 함수를 순차적으로 호출해서 실행한다. 재사용 가능한 코드를 함수로 분리하고 함수 간의 호출로 하고자 하는 일을 수행한다. 프로세스 로직과 데이터가 별도의 위치에 분리되어 있고 TOP -> DOWN식으로 구성된다.
절차지향은 이해하기 쉽고 직관적이며 유지보수에도 용이하다.
전체 로직이 매우 복잡하거나 동적으로 로직을 바꿔야 하는 등의 기능 확장이 필요할 때 유지 보수하기가 어려워진다.
함수가 많아질수록 데이터의 변경 사항을 추적하기도 어려워진다.
객체단위에 책임을 명확히 하고 서로 협력하도록 프로그래밍을 하는 패러다임이다. 객체지향은 데이터와 역할을 하는 함수가 함께 하나의 책임을 수행하게 된다. 이 객체들이 모이면 여러가지 일을 수행하게 되며 데이터와 함수(메서드)를 갖고 있다. 퍼블릭한 데이터와 메서드, 프라이빗한 데이터와 메서드를 구분지어 객체가 협력하게 된다.
객체지향에서 가장 중요한것은 책임과 협력이다. 하나의 객체는 하나의 책임만 가지도록 설계하는 것이 일반적으로 좋다고 알려져있다.
높은 응집도와 낮은 결합도를 유지할 수 있기 때문 객체를 설계할때 가장먼저 책임이 무엇인지를 먼저 설계해야한다. 책임이 곧 정체성이된다.
객체지향은 높은 응집도 낮은 결합도가 좋다.
먼저 응집도는 메서드와 속성이 잘 고루고루 섞여 있는것을 의미하는데 불필요한 속성을 하나로 묶어서 , 속성을 줄인다.
결합도는 객체간에 의존하는 정도를 의미한다. 서로의 속성과 메서드를 알고 있는데 하나의 코드를 바꾸면 다른 코드까지 영향을 받는다.
그러므로 결합도를 낮게 설계하는것이 좋다.
기존의 객체지향에서 가지는 문제점 (함수의 비일관성, 객체간 의존성 문제, 객체 내 상태 제어의 어려움)을 보완하고자 함수형 프로그램이 나왔다. 함수형 프로그램은 외부 상태를 갖지 않는 함수들의 연속으로 프로그래밍을 하는 패러다임이다. 한번 초기화한 변수는 변하지 않는데 이런특성을 불변성이라고 하고 이 불변성을 통해 안정성을 갖는다. 외부상태가 있으면 함수형이 아니다. 외부 상태를 의존하지 않는것이 함수형프로그래밍이다. 외부 데이터를 사용하면 예측하지 못한 side effect이 발생 할 수 도 있다. 함수형 프로그래밍은 side effec가 없기 때문에 안정적이다. 동시성을 가지는 프로그램에 사용하기 적합하다. 함수지향, 객체지향 장단점이 있기 때문에 상황에 맞게 사용해야한다.
강의를 통해 느낀점은 코드를 짜기전에 미리 어떻게 설계를 할지 계획할 필요가 있다는것이다. 내가 짠 코드는 결합도가 높아서 추후에 무언가를 수정하려고 하니 다른곳이 에러가 나서 다른 시도를 하기가 두려운 코드인데, 응집도는 높고 결합도는 낮은 코드를 작성을 하여 서로간의 의존성이 없어 확장성에도 좋은 코드를 작성해보고싶다.
앨런 케이