
프로그램을 만들 때 (어디에 초점을 맞춰서) 어떠한 관점으로 바라보며 만들 것인가?
프로그래밍 패러다임의 다양한 종류 중 대표적인 2가지에 대해 이야기하려고 한다.
선언형 프로그램과 반대되는 개념컴퓨터가 수행할 행동들을 순서대로 써놓아 명령하는 것
(HOW)어떻게 할것인가? 빵위에 크림을 바르고, 과일을 올리고, 시럽펜으로 글씨를 써줘!
프로그래밍 전체가 유기적으로 연결 되도록 만든 프로그래밍 기법문제를 여러 개의 함수로 나누어 순차적으로 호출하여 처리하는 방식대표 언어: C언어
- 데이터 흐름을 기반으로 위에서 아래로 흐르는 Top-Down 방식의 순차적 처리 방식이다
- 컴퓨터 작업 처리 방식과 유사하여 다른 패러다임에 비해 더 빨리 처리 되어 시간적으로 유리하다 (전통적인 개발 방법)
- 프로그램을 함수 단위 (데이터를 처리하는 부분)로 나누어 구조화 했다(but 데이터를 구조화하진 못함)
- 실행 순서가 정해져 있어 (입력한 로직에 따라 순차적 진행) 코드의 순서가 바뀔 시 결과 값이 변경될 수 있다
- Procedure(프로시저)와 Procedure Call(함수 호출)을 통한 추상화와 재사용성(프로시저는 수행하는 절차 그 자체를 목적으로 하는 것이다)
❗️ 장점) 비교적 설계가 쉽고, 간단한 소규모 프로젝트에 용이❓ 단점) 오래된 방식이며 유지보수의 어려움이 있어 대형 프로젝트에 부적합
절차적 프로그래밍을 보완하기 위해 나온 프로그래밍 기법프로그램을 객체(특성과 행위를 가지고 있는 자체) 단위로 나누어 객체 각각이 독립성을 가지고 있다문제를 여러개의 객체단위로 나누어 처리하는 방식
- 작은 문제들을 해결하는 객체를 생성한 뒤, 이를 조합해 큰 문제를 해결함(Bottom-Up 방식)
- 변화할 수 있는것은 전부객체화 시킨다
- 각 객체들은 다른 객체들과 독립적으로 운용된다(독립성 ⬆️ 의존성 ⬇️)
- 객체 외부에서 접근 가능한 인터페이스를 제한하여 잘못 사용될 경우를 최소화 한다
- 유지 보수에 용이하여 관리 비용을 낮출수 있다(프로그램 버그시 문제 되는 객체만 수정하고 객체를 사용하는 코드는 수정하지 않아도 된다)
❗️ 장점) 많이 사용되는 설계방식이며, 보안성이 높고 대형 프로젝트에 적합함❓ 단점) 객체가 많아지면 용량이 커져 속도가 느려지며, 설계가 어렵다
명령형 프로그램과 반대되는 개념컴퓨터가 수행할 목표만 명시하는 것 (행동에는 관심이 없음)
(WHAT)무엇을 할것인가? 케이크 2개 만들어줘!
프로그래밍의 계산을 수학적 함수의 조합으로만 생각한다
- 함수를 순수함수로 구성한다
- 모든것이 객체이다
- 코드를 간결하게 구현할 로직에 집중한다
- 동시성을 안정하게 보장한다
함수형에서 더 나아가 비동기 데이터 흐름에 기반을 둔 프로그래밍 패러다임이다
- 다수의 비동기 이벤트를 효과적으로 처리할 수 있다
- 함수형 프로그래밍 패러다임의 도구들을 자유롭게 활용하여 데이터 흐름을 제어한다
- 데이터의 흐름을 관찰, 필터링, 데이터간의 병합이 가능하다
- 데이터를 일일히 추척해 컨퓨터의 성능을 저하시킨다