차근차근/이것저것

Procedural Programming 절차적 프로그래밍

예쁜꽃이피었으면 2021. 12. 13. 14:39

https://namu.wiki/w/%EC%A0%88%EC%B0%A8%EC%A0%81%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

 

절차적 프로그래밍이란 단순히 순차적인 명령 수행이 아니라 루틴, 서브루틴, 메소드, 함수 등(이를 통틀어 프로시저라고 한다.)을 이용한 프로그래밍 패러다임을 뜻한다. 명령형 프로그래밍의 일종이다.

'절차적 프로그래밍'이라는 한국어 번역은 오해의 여지가 크다. Procedural Programming에서 Procedural를 '절차적'으로 번역해버려서 마치 절차적으로 실행하는 것이 중점이 되는 것처럼 보이기 때문이다. 그런데 절차적이지 않은 프로그래밍이란 건 애초에 존재하지 않는다. Procedural의 Procedure는 '절차'라는 의미가 아니라 '프로시저'[1]의 의미이다. 이 패러다임에서는 프로시저 콜, 즉 함수 호출을 통해서 추상화와 재사용성을 얻어내는 것이 본질이기 때문이다. 그러나 이미 교과서에 절차적 프로그래밍이라고 줄기차게 쓰여져 있어서 굳어져버렸기 때문에 어쩔 수 없이 이 번역명이 사용되고 있다.

현재 가장 오용되고 있는 표현이다. 절차적 프로그래밍의 오묘한 네이밍 때문에 순차적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍과의 관계를 오해하기 쉽다. 가령 순차적 프로그래밍과의 비교에서 순차적 프로그래밍은 순차를 중시하고 절차적 프로그래밍은 절차를 중시한다는 이상한 논리를 가져다 대는 경우가 있다. 이는 번역의 문제로 위의 문단을 읽었으면 코드를 단순히 실행 순서의 관점으로만 보는 순차적 프로그래밍과 프로시저 단위로 보는 절차적 프로그래밍과의 차이를 알 수 있다.

또 다른 문제로는 객체지향 프로그래밍과 비교해서 마치 절차적 프로그래밍이 객체지향의 반대이며 심지어 '절차지향'으로 알고 있는 사람들도 있다. 절차지향이라는 용어는 잘못된 표현이며 절차적 프로그래밍이 맞다. 절차지향으로 부르는 사람이 없는 것은 아니지만 대부분은 절차적 프로그래밍이라는 용어를 사용한다.

두번째로 객체지향이 절차적 프로그래밍의 반대 의미처럼 사용되는 것인다. 객체지향의 반대 개념은 절차적 프로그래밍이 아니다. 절차적 프로그래밍의 관점이 프로시저에서 객체로 확장된 것에 가깝기에 일치한다고 볼 수는 없어도 서로 공유하는 부분이 차이보다 더 많다. 애당초 둘다 명령형 프로그래밍의 하위개념이다. 그래서 보통 제대로 된 서적에서 객체지향과 비교할 때는 "객체지향과 일반적인 절차적 프로그래밍(쉽게말해서 객체를 사용하지 않는)"이라는 단서를 붙힌다.

현대 프로그래밍 언어에서의 프로시저와 함수의 구분은 없어진 것이나 다름없기에 함수형 프로그래밍과 절차적 프로그래밍이 동등한 것이냐는 이야기가 있다. 그러나 함수형 프로그래밍의 관점은 순수함수와 일등객체인 함수에 관심이 있는 것이고 절차적 프로그래밍은 함수(그리고 이를 관리하는 모듈)에 의한 재사용성에 초점을 둔 것이기에 두 개념은 차이가 있다.

반응형

'차근차근 > 이것저것' 카테고리의 다른 글

Facebook 픽셀  (0) 2021.12.16
Apache Log4j 2 보안 업데이트 권고  (0) 2021.12.15
"frameset","viewport","iphone" (2)  (0) 2017.09.27
"frameset","viewport","iphone" (1)  (0) 2017.09.27
홈페이지 점검 후 수정하기 1  (0) 2017.05.19