(미완성)평범한 개발자의 C 프로그래밍 이야기

변하는 것과 변하지 않는 것을 구분하는 프로그래밍

C언어는 컴퓨터 역사의 초기에 개발된 언어입니다. 최신 언어들이 개발 편의를 위해 제공하는 기능들도 없고 문법도 사람보다는 기계에 더 친화적입니다. 그래서 개발자 스스로 철학을 가지고 사용해야하는 언어입니다. 제가 소개하는 디자인 방법들이 자신만의 개발 철학을 세우는데 도움이 되길 바랍니다.

제가 제일먼저 소개해드리고싶은 디자인은 "변하는 것과 변하지 않는 것을 구분하자" 입니다. 가장 먼저 소개하는 이유는 동양철학에서 말하는 음양오행에서 음양에 해당하는 개념이고, 대부분의 잘 만들어진 C 코드의 밑바탕에 이 개념이 깔려있기 때문입니다. 또한 음과 양이 모든 사상의 밑바탕을 이루듯이 언어나 개발 제품에 상관없이 적용할 수 있는 철학이라고 생각하기 때문입니다.

최신 언어들이 제공하는 기능들이나 프로그래밍 기법들을 보면 가장 밑바당에는 "변하는 것과 변하지 않는 것을 구분"하는 개념이 녹아들어있습니다. 객체지향 철학에서 객체가 가지는 속성은 변하는 것이고 속성을 변경하는 메소드는 변하지 않는 것입니다. 객체라는 틀은 변하지 않는 것이고 객체로 생성한 인스턴스는 변하는 것입니다. 함수형 언어들은 함수를 변하지 않는 것으로 생각하고 함수에 입력되는 데이터를 변하는 것으로 생각합니다. 디자인 패턴 기법들을 보면 변하지 않는 코드와 변하는 코드를 분리하는 것이 핵심 개념인 패턴들이 많습니다. 설계 원칙에도 Data driven design이라는 원칙이 있는데 이것또한 최대한 고정된 논리로 다양한 데이터를 처리한다는 원칙입니다. 바꿔 말하면 일정한 코드를 가지고 최대한 다양한 데이터를 처리하도록 하자는 것입니다.

이런 예들을 따져보면 형태가 변하지 않거나, 값이 변하지 않거나, 실제로 생성되는 것이 아니라 생성되는 것들이 공통적으로 가져야할 원칙이거나, 보이지 않게 밑바탕에서 일정하게 동작하는 것 등을 "변하지 않는 것", 혹은 음적인 부분이라고 부를 수 있습니다. 그와 반대로 형태가 변하거나 값이 변하거나, 실제로 생성되어 각자 고유한 값이나 속성을 가지는 개체, 겉으로 드러나 사용자가 조정할 수 있는 값이나 속성들이 양적인 부분, "변하는 것"이라고 부를 수 있습니다.

2가지 예제 코드를 보면서 C언어로 프로그래밍에서 음과 양을 어떻게 나눌 것인지를 고민해보겠습니다. 정답은 없습니다만 고민하는 것 자체로 많은 생각을 이끌어낼 수 있는 실마리가 될 것이라 믿습니다. 비록 간단한 예제를 작성하는 단계에서 "변하는 것과 변하지 않는 것을 구분"하는 일을 연습하지만 사실은 제품을 설계할때부터 코드를 작성할 때까지 계속 고민해야할 사항입니다.

댓글

댓글 본문
작성자
비밀번호
  1. 미지
    오랜기간 c프로그래밍해본 경험으로 글의 대부분 내용에 공감합니다. 음과 양으로 구분해 정적인것과 동적인것을 설명주신것도 좋고요, 특히 마감부분에서 '제품을 설계할때부터 코드를 작성할 때까지 계속 고민해야할 사항'으로 지적하신점은 정말이지 공감입니다.
버전 관리
gurugio
현재 버전
선택 버전
graphittie 자세히 보기