명령형 프로그래밍에 대해 검색하자 선언형 프로그래밍의 예시가 함께 나왔고 이 둘을 비교하며 보자 빠르게 이해되었다.
명령형 프로그래밍이란?
HOW 어떻게 할 것인가
선언형 프로그래밍이란?
WHAT 무엇을 할 것인가
예시를 들어보자.
이 글을 작성하는 지금은 비오는 새벽으로 부침개가 먹고 싶어졌다.
명령형: 나는 밀가루에 김치를 넣고 반죽을 팬에 부쳐 부침개를 만들어 먹을 것이다.
선언형: 나는 부침개를 먹을 것이다.
명령형 방식은 내가 '어떻게' 할지에 초점을 맞춰 이에 대한 단계를 나열해야 하고 반대로 선언형은 내가 '무엇을' 원하는지에 초점을 맞춘다.
이제 코드로 예시를 들어보자.
다음은 명령형 프로그래밍으로 작성한 예시이다.
function double (arr) {
let results = [];
for (let i = 0; i < arr.length; i++) {
result.push(arr[i] * 2);
}
return results;
}
배열을 파라미터로 받고 각 요소들에 2를 곱하는 코드이다.
"배열을 파라미터로 받고~ 조건문 안에서~ result 값을 계속 push하고~ "
배열을 반복하는 기능을 수행하는 방법에 대한 단계를 설명하고 있으며 results 값을 바꿔 상태를 변경하고 있다.
이걸 선언형 프로그래밍 방식으로 바꾸면 어떻게 될까?
function double (arr) {
return arr.map((item => item*2)
}
아까와 달리 어떻게 하는 단계가 아닌 무엇을 하는지에 대해 적은 코드이다.
이렇게 바꾸는 방법을 명령형 방식을 추상화 시켰다고 한다.
그렇다면 추상화는 뭘까?
추상화란?
복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려내는 것
마치 책에서 줄거리를 뽑아내듯이!
왜 추상화를 하지?
- 사용자가 낮은 수준의 코드를 작성하지 않기 위해
- 코드의 중복을 방지하고 재사용성을 향상시키기 위해
- 사용자에게 영향을 끼치지 않고 독립적으로 클래스의 내부 구현을 변경하기 위해
- 중요한 세부 정보만 사용자에게 제공해 보안을 향상시키기 위해
그럼 이제 함수지향과 객체지향에 대해 알아보자.