개발자의 입장에서 바라봤을 때, 어떤 방식으로 프로그램을 구현해야 할까?
이걸 프로그래밍 패러다임이라고 표현함.
사용하던 구현 방식의 단점을 극복, 보완하기 위한 순서임.
절차 지향 → 객체 지향 → 함수형 |
과정에 집중하느냐, 결과에 집중하느냐 따라서 두 분류로 나뉨.
1. 명령형 프로그래밍
- 절차지향 프로그래밍 : 절차의 연속
- 객체지향 프로그래밍 : 객체 + 객체
2. 선언형 프로그래밍
- 함수형 프로그래밍 : 순수함수 + 일급객체
비교를 하자면...
- 명령형 : 구현을 위한 알고리즘을 명시하되 목표는 명시하지 않음. (How)
- 명령형 : 프로그램은 명령의 수행이며, 어떻게 구현하는지 그것이 중요하다.
- 선언형 : 목표만 명시하고 알고리즘은 명시하지 않음. (What)
- 선언형 : 프로그램은 함수의 계산이며, 무엇을 구현하는지 그것이 중요하다.
객체 지향 vs 함수형
객체지향 : 코드의 재사용에 관심 있음. 온갖 내용은 모두 어떻게 하면 코드를 다시 쓸 수 있을까? 그 고민에 대한 나름의 해답에 불과함.
- 추상화(속성, 행위, 객체, 클래스)
- 캡슐화(은닉성, 응집도, 결합도)
- 상속(구체화, 일반화)
- 다형성(오버로딩, 오버라이딩)
함수형: 원하는 결과를 반드시 도출하는 순수 함수에 관심 있음. 예상치 못한 변경에 따른 오류를 피하고자 상태 변경을 최대한 회피하려는 게 목적임.
- 일급객체 (파라미터, 반환값, 값으로 활용. 변수, 데이터 구조 안에 담음. 동적 할당, 비교 연산 가능.)
- 고차함수 (파라미터, 반환값으로 사용할 수 있는 함수)
- 불변성 (데이터 변경을 최대한 막음)
- 순수함수 (동일한 입력에는 항상 같은 값을 반환해야 함, 부작용(SideEffect)가 없어야 함, 상태 변경을 해서는 안됨.)
- 합성함수 (여러 함수를 조합해 새로운 함수를 만듦)
'이야기 > 방법론' 카테고리의 다른 글
준용할 수 있는 변수명을 사용하기 (0) | 2022.12.30 |
---|---|
체계적인 코드 네이밍의 장단점과 요약 (0) | 2022.11.23 |
방법론이 뭐지? (0) | 2022.01.10 |