프로그래머라면 객체지향 프로그래밍, 함수형 프로그래밍 같은 용어들을 들어본 적이 있을 것이다.
이런 것들을 프로그래밍 패러다임이라 한다.
그런데 프로그래밍 패러다임이란게 정확히 뭘까?
명확히 정리를 해보고 싶었다.
프로그래밍 패러다임(Programming Paradigm)이란?
프로그래밍 패러다임 = 프로그래밍 + 패러다임 ...?
먼저 프로그래밍과 패러다임이 각각 의미하는 바를 알아보자.
프로그래밍
'프로그래밍'이란 프로그래밍 언어로 컴퓨터 프로그램을 작성하는 일, 코딩(cdoing)을 의미한다.
패러다임
'패러다임'이란 (세계를) 이해하는 방식, 즉 인식틀을 의미한다.
'패러다임'이라는 말은 여전히 좀 어렵고 와닿지 않는다.
이 말이 쓰이는 맥락을 보면 좀 이해가 되지 않을까?
"코페르니쿠스의 지동설은 우주를 보는 패러다임을 바꿨다." 라는 말이 있다.
이는 우주를 이해함에 있어 중세시대는 천동설(하늘이 지구를 중심으로 돈다)로 세계를 이해했으나,
지동설(지구가 태양계를 돈다)이 나온 후에는, 지구(인간)이 온 우주의 중심이라고 생각했던 인식틀이 바꼈다는 것이다.
창조론과 진화론 역시 인간의 기원과 신에 대해 이해하는 인식의 틀로서 일종의 패러다임이다.
인간의 본성에 대한 인식의 틀로써 기능하는 성선설과 성악설도 패러다임라고 볼 수 있겠다.
프로그래밍 패러다임
패러다임은 우주와 인간을 바라보는 방식뿐만 아니라 프로그래밍의 영역에도 적용된다.
'프로그래밍 패러다임'은 '프로그래밍을 어떤 관점으로 보고 이해하는가', 구체적으로는 '프로그래밍을 구성하는 요소들을 어떤 관점으로 보고 이해하는가'정도라 생각할 수 있다.
예를 들어, 객체지향 프로그래밍은 프로그램을 상호작용하는 객체들로 보는 반면, 함수형 프로그래밍은 프로그래밍을 자체 값을 가지지 않는 순수함수들의 연속으로 본다.
프로그래밍 패러다임에 따라 지향하는 프로그래밍의 원칙들도 달라진다.
인간을 바라보는 패러다임인 '성선설', '성악설'에 따라 사람을 대하는 원칙들이 달라지듯,
어떤 프로그래밍 패러다임이냐에 따라 '어떤 방식의 프로그래밍 방법이 좋은가?'와 같은 프로그래밍에 관한 구체적인 원칙(규범)들도 달라지며, 종종 서로 배치되기도 한다.
예를 들어, 함수형 프로그래밍에서는 않은 함수 외부의 영향(함수의 parmeter와 return으로 명시되지 않은 side effect나 side casue)을 금지하는 것을 원칙으로 하는 반면,
객체지향 프로그래밍에서는 객체 내부의 함수는 객체의 메서드로서 기능하며, 그 함수 외부의 상태인 객체의 속성을 사용할 수 있고 영향을 미칠 수 있다.
프로그래밍 패러다임의 종류
프로그래밍 패러다임의 종류는 다양하다.
아래는 내가 이해하고있는 프로그래밍 패러다임들을 정리한 것이다.
(다루지 않은 것들은 이해하는대로 계속 추가할 예정이다)
(각 패러다임에 대한 설명은 상세 링크를 통해 확인할 수 있다.)
-
명령형 프로그래밍
- 절차지향 프로그래밍
- 객체지향 프로그래밍
-
선언형 프로그래밍
- 함수형 프로그래밍
- 반응형 프로그래밍
마치며
우리가 누구나 세계관을 가지고 있듯이, 각각의 프로그래머 역시 좋아하거나 익숙한 프로그래밍 패러다임이 있다.
다양한 가치를 가진 사람들과 만나며 소통할때 세상을 보는 눈이 깊어지고 넓어지 듯이,
다양한 프로그래밍 패러다임을 이해하는 개발자도 개발에 대한 이해와 수준이 달라질 것이다.
다양한 패러다임의 프로그래밍 언어를 익혀보자.
기술로 사회문제를 해결하는 시빅해킹(Civic Hacking)에 관심이 많고,
이것저것 생각나는 것들을 글로 정리하는 것을 좋아합니다.