[CS] 명령형 프로그래밍, 선언형 프로그래밍

김명현·2024년 1월 10일
post-thumbnail

머릿말

오늘은 SwiftUI 공부를 하다가 선언형 프로그래밍이라는 단어를 보고 찾아서 공부를 하던 중 선언형 프로그래밍하면 명령형 프로그래밍과 비교하면서 설명하는 경우가 많아, 두가지 패러다임의 정의장단점 을 정리해보려한다.

프로그래밍 패러다임

본격적으로 명령형, 선언형 프로그래밍을 알아보기전에 이것이 뭔지를 알아야한다.
이 두가지는 프로그래밍 패러다임 중 일부이다.
그래서 프로그래밍 패러다임은 무엇이냐?

프로그래밍 패러다임은 프로그램을 작성하고 문제를 해결하는데 사용되는 기본적인 접근 방식 또는 스타일을 나타냅니다.

그리고 패러다임은 한가지만 채택해서 사용하는건 아니다.
우리가 공부중인 Swift라는 언어도 다중 패러다임 언어이다. 객체지향, 함수형, 프로토콜 3가지를 채택하고있다.
이제 본격적으로 선언형,명령형 프로그래밍을 알아보자.


SwiftUI의 선언형 프로그래밍


1. 무엇(What)에 대한 접근 방식

  • 필요한 것을 달성하는 과정 하나하나 기술하는 것보다 필요한 것이 어떤 것인지 기술하는 데 방점을 두고 애플리케이션의 구조를 세워 나가는 프로그래밍 구조이다.
  • "이걸 어떻게 해야하는가"보다 "우리가 무엇을 원하는가"에 집중한다.

2. 함수형 프로그래밍

  • 함수형 프로그래밍 언어들이 선언형 프로그래밍의 예시이다.

3. 장점

  • "무엇(What)"을 설명하므로 코드의 목적을 명확하게 표현하기 때문에 가독성과 유지보수성에서 좋다.
  • 명령형 프로그래밍에 비해 코드의 양을 줄일 수 있다.

4. 단점

  • 재귀나 불변성 등의 개념을 적극적으로 활용하기 때문에 메모리 사용 증가가 될 수 있다.
  • 추상화와 편리한 문법을 사용하여 코드를 작성하기 때문에, 명령형 프로그래밍에 비해 성능저하가 될 수 있다.


UIKit의 명령형 프로그래밍


1. 어떻게(how)에 대한 접근 방식

  • 필요한 것을 달성하는 과정 하나하나 기술하는 방점을 두고 애플리케이션의 구조를 세워 나가는 프로그래밍 구조이다
  • "이걸 어떻게 해야하는가"에 집중한다."

2. 절차적 프로그래밍

  • 절차적 프로그래밍 언어들이 명령형 프로그래밍의 예시이다.

3. 장점

  • 코드가 명령어의 순서로 작성되어 있어 프로그램의 동작 흐름을 파악하기 쉽다.
  • 실행 순서대로 작성되어 있어 디버깅과 코드수정이 비교적 용이하다.
  • 직접적으로 CPU와 메모리 등 하드웨어 자원을 조작할 수 있는 기능을 제공하기 때문에 성능을 높일 수 있다.

4. 단점

  • "어떻게 해야하는가"에 집중하기 때문에 코드가 길어지고 복잡해질 수 있다.
  • 상태 변화를 직접 다루기 때문에 상태 관리가 어렵다. 프로젝트가 커질수록 상태 추적,관리가 더 어려워진다.
  • 코드 간에 강한 결합도를 가지게 되어 독립성을 저하시킨다.



이해하기 쉬운 예시 및 요약


1. 남산타워 찾아가기

명령형

명동역 4호선 출발
4호선 명동역 승차 후 1개역 이동 뒤 충무로역 하차
충무로역 2번 출구에서 도보 191m
충무로역 2번출구 대한극장앞 02번 버스 승차 후 6개 정류장 이동
남산서울타워 하차 후 도보 284m
남산서울타워 도착
선언형

출발: 명동역 4호선
도착: 남산서울타워

2. 스테이크 요리법

명령형

필요한 재료를 가져온다.
후라이팬에 기름을 두르고 중불에서 고기를 5분동안 익힌다.
양파와 마늘을 넣고 볶아준다.
선언형

스테이크를 구워주세요

3. 요약

  • 선언형 WHAT 명령형 HOW
  • 선언형은 가독성, 유지보수 면에서 효율적이다. 명령형은 성능 면에서 효율적이다
  • 선언형 방식은 명령형 방식을 추상화 하는것이다.
profile
iOS개발자

0개의 댓글