brunch

You can make anything
by writing

C.S.Lewis

by 서일환 Apr 17. 2021

선언형 리더와 명령형 리더

선언형 프로그래밍과 명령형 프로그래밍

컴퓨터 프로그래밍은 사람이 기계에게 무엇을 해야 하는지를 알려주는 작업이라고 볼 수 있다. 이것이 또 묘하게 사람이 다른 사람과 함께 일하기 위해 무엇을 해야 하는지 의뢰하는 과정과 일맥상통하는 부분이 있다. 오늘은 컴퓨터 프로그래밍의 분류 중에 '선언형 프로그래밍'과 '명령형 프로그래밍'이라는 두 가지  기법을 가지고 조직에 비유하여 이야기해보고자 한다.


'선언형 프로그래밍'은 컴퓨터에게 어떻게 해야 하는지를 지시하기보다는 원하는 것이 무엇인지를 표현하는 식으로 작성하는 것을 말한다. '명령형 프로그래밍'은 컴퓨터가 어떤 동작을 해야 할지를 순서대로 작성해 나가는 것을 의미한다.


각각의 프로그래밍 방식에는 장단점이 있다. '선언형 프로그래밍'은 원하는 것만 기술하게 함으로써 전체 코드를 간결하게 만드는 장점이 있다. 하지만, 그 원하는 것에 대한 결과가 어떤 과정을 거쳐서 도출되었는지를 알기가 힘들다는 단점이 있다. 굳이 알 필요가 없는 부분과 사람이 집중해야 할 핵심적인 계층을 잘 분리할 수 있다면 선언형 프로그래밍 방식은 강점을 가질 수 있다. 반면에, 선언적 문법을 스스로 만들어내야 하는 경우가 많거나, 이미 정의된 선언 구문의 내부 동작 방식을 변경해야 하는 경우가 많을 때는 도리어 약점이 될 수 있다.


예를 들어, 파일 디렉터리에서 하위 디렉터리를 모두 순회하면서 확장자가 '. doc'로 끝나는 모든 파일을 찾는다고 가정해보자. 선언형 프로그래밍의 경우에는 아래와 같은 문법으로 코드를 작성하게 된다.


하위폴더를순회하며찾기("파일이름 필터조건");


'파일 이름 필터 조건'에 '*. doc'와 같은 파라미터를 넣어주면 간단히 원하는 결과를 얻을 수 있다. 하지만 저 기능을 하는 코드를 명령형으로 작성한다면 작성해야 하는 코드의 줄 수가 꽤 길어질 것이다. 


갑자기 요구사항이 바뀌었다. '. doc'로 끝나는 파일 중에 수정한 날짜가 3일 이내인 것을 찾으라는 요구가 추가되거나, 각 하위 폴더에서 제일 최근에 생성된 파일 하나만 찾으라는 식의 조건이 부가되면 해결하기가 어려워진다.


'명령형 프로그래밍'은 상태와 그 상태를 변경시키는 명령어들로 구성되어 있다. 원하는 것을 달성하기 위해 상당히 구체적이고 길게 작성해야 하기 때문에 코드가 장황해지고 관리가 어려워질 수 있다. 복잡도만 잘 제어할 수 있다면 행동을 수정하는 것에 대한 자유도가 높다는 장점이 있다. 명령형 프로그래밍은 컴퓨터처럼 사고하는 것을 용이하게 만들어준다.


조직을 이끄는 리더도 선언형 리더와 명령형 리더가 있다. 선언형 리더는 자신이 원하는 것을 선언하는 것을 좋아한다. 이런 리더들은 대게 꿈이 크고 이상적인 경향을 보인다. 자신의 이상을 하위 조직원들이 구체화시켜주기를 바라기 때문에 자칫하면 말뿐인 리더로 비칠 수 있다.


명령형 리더는 조직원들에게 세부적인 지시사항을 내리는 것을 좋아한다. 이런 리더들은 대게 자신이 뛰어난 선수였던 경우가 많다. 자신은 더 이상 선수가 아니라 코치의 역할인 것을 종종 잊어버리곤 한다. 때로는 조직원들이 '우리는 지금 어디로 가고 있는 거지?'라고 생각하게 만들어 그들을 지치게 한다.


선언과 명령은 조화롭게 이루어져야 한다. 선언만 하는 리더는 실현 능력이 없는 사람이다. 전문성이 떨어지고 무능한 리더일 가능성이 높다. 명령만 하는 리더는 조직원들을 움츠러들게 만들고 그들 스스로 동기 부여할 수 없도록 만드는 사람이다. 조직원들의 입을 다물게 해 전략의 다양성을 확보하지 못하게 만들 가능성이 높다. 리더가 상황에 맞게 적절한 업무지시를 할 수 있어야 조직은 성과를 낼 수 있다. 선언이 필요할 때는 선언을 하고, 방법론을 제시해야 할 때는 구체적인 방안을 제시해야 한다.


프로그래밍도 마찬가지다. 선언형 프로그래밍을 하느냐 명령형 프로그래밍을 하느냐가 중요한 것이 아니다. 둘 중에 어느 것도 절대적으로 좋은 것은 없다. 필요에 따라 적절하게 섞어서 활용할 수 있어야 하고 때로는 격리해서 사용할 수 있다면 컴퓨터에게 좋은 명령을 내릴 수 있는 훌륭한 프로그래머가 될 것이라고 생각한다.

매거진의 이전글 지양하고 싶은 외주 개발
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari