글을 쉽게 쓰기 위한 전략적 방법

클래스로 설계도를 디자인해보자

by 공대생의 심야서재

프로그래밍 분야에서는 객체라는 단어를 자주 접하게 되는 편입니다. 프로그램을 짤 때 객체가 존재하지 않고서는 좀체 코드를 짤 수가 없을 만큼 객체는 아주 중요한 개념입니다. 그런데 객체를 정의하지 않고 프로그램을 짠다? 이것은 곧 스파게티 코드(지저분한 코드)를 양산한다는 것이나 계획성 없이 작업에 뛰어든다는 문장과 같은 뜻을 지닙니다.


사전에 검색해보니 객체는 언어적인 의미로서 '문장 내에서 동사의 행위가 미치는 대상'이라고 나옵니다. 객체는 추상적이면서 개념적입니다. 여러분, 객체를 생각하니 참 모호한 기분이 들지요? 그러니 객체는 관념적인 대상에서 실체를 가진 대상으로 형체를 반드시 바꾸어야만 합니다. 프로그래밍은 그러한 과정을 무수하게 반복하여 추상적인 것을 구체적인 프로그램 혹은 앱으로 바꾸는 일입니다.


개념이 구상화될 때(실세계에서 구현이 될 때, 즉 프로그램 하나가 만들어질 때) 그러니까 실세계에서 표현이 가능한 어떤 적확한 실체를 가질 때 우리는 그것을 '클래스'라고 표현합니다. 객체가 개념적이라면 클래스는 직관적이면서도 실체적인 형상을 갖게 되는 거죠. 클래스는 객체의 어떤 특징을 묘사하기 위한 코드의 '설계도'라고 볼 수도 있겠습니다. 자, 제가 설계도라는 단어를 언급했으니 왜 객체와 클래스를 언급했는지 슬슬 눈치를 챈 분들이 계실 것 같습니다.

그렇습니다. 글쓰기는 클래스와 연관성을 갖습니다. 위에서 언급했듯이 클래스는 코드를 잘 짜기 위한 설계도입니다. 또한 글쓰기 툴인 스크리브너의 아웃라이너 같은 개념이라고 비유할 수 있겠습니다.(스크리브너의 아웃라이너가 뭔지 궁금한 분들은 직접 구매를 하심이...) 글을 쓸 때도 설계도가 당연히 필요합니다. 하지만 우리는 설계도는 대체로 무시하고 그러니까 밑바탕을 스케치하기 전에 본론부터 시작하려는 경향이 있습니다. 물론, 본론부터 쓰는 것 자체가 잘못된 거라고는 생각하지 않습니다. 자기만의 스타일이 있으니까요. '나는 비교적 생각 정리를 잘하는 편이고, 생각을 글로 매끄럽게 표현하는데 무리가 없다'면 그렇게 설계도 없이 글을 쓰는 것도 좋다고 봅니다. 시간을 단축시켜줄 테니까요.


가령 여러분이 '글린이'라고 가정할 경우에는 상황이 달라집니다. 생각이 정리되기도 전에, 조급하게 글을 쓰겠다고 무작정 달려드는 경우 많이 있죠? 그럴 경우에 보통 수월하게 글이 써지는 편인 가요? 아마도 대부분이 절망하는 편이었을 겁니다. 이건 안 봐도 DVD(블루레이 혹은 4K 영상)입니다.


클래스와 글쓰기가 어떤 연관성을 갖는지 비교하면서 혹은 예를 들어가면서 설명해보도록 하겠습니다. 프로그래밍이라는 세계에서 클래스는 객체를 표현하기 위한 설계도라고 말씀드렸습니다. 그럼 클래스에는 어떤 정보가 담기는지 살펴볼까요?


클래스는 '변수와 메서드' 두 가지의 체계를 갖습니다. 클래스와 클래스 간의 연관성, 추상성, 다형성, 은닉, 상속 이런 학문적인 개념은 지양하고 오늘은 변수(Variable)와 메서드(Method) 두 가지 측면만 보겠습니다.


클래스는 글쓰기의 '주제'와 연결을 합니다. 예를 들어, '실수'라는 주제로 글을 쓴다고 가정해봅시다. 그렇다면 우리는 글을 쓰기 전에 '실수'라는 설계도 말하자면 클래스를 만들어야 합니다. 자, 이제 클래스의 이름은 '실수'가 됐습니다.

클래스는 변수와 메서드 두 가지를 가진다고 했습니다. '실수'라는 주제를 머릿속에 떠올려 봅시다. 어떤 생각이 떠오릅니까? 생각나는 단어를 일단 종이에 마구 써보는 것도 좋습니다. 일단 써봅시다.


실수를 구성하는 변수는 대체로 이런 게 떠오릅니다. 언제 벌인 실수인지(시간), 어떤 종류의 실수인지(종류), 실수의 심각성(정도), 누구에게 벌인 실수(대상)인지 이런 것들입니다. 다시 정리해볼까요?

대체로 생각나는 것들은 이렇습니다. 글을 쓰면서 연관되는 단어를 즉흥적으로 쓰다 보니 한계가 있을 수 있습니다. 의견이 있으시면 댓글로 남겨주셔도 좋습니다. 어쨌든 변수는 어떤 값을 담는 그릇이라고 여기시면 됩니다. 그릇에 담기는 유형은 주로 명사들입니다. 여기서 중요한 것은 실수라는 클래스와 연관된 명사여야 합니다. 여러 변수들이 모여서 실수라는 클래스를 이룬다고 보시면 되겠습니다.


그다음엔 '메서드'입니다. 메서드는 주로 행위, 행동 그러니까 움직임을 나타냅니다. 글에서 행위를 나타내는 것은 무엇입니까? 바로 동사죠? 메서드는 동적인 편입니다. 실수를 생각하면 어떤 동사가 떠오르시나요? 저는, 저지르다. 반복하다. 탓하다, 이런 동사를 적어보겠습니다. 여기서 주의해야 할 것은 비슷한 의미를 가진 동사를 제거하는 일입니다. 저지르다, 범하다, 하다, 이런 동사는 저지르다가 모두를 포괄할 수 있으니까요.


마지막으로 메서드는 내부에 파라미터를 가집니다. 하지만 반드시 그래야 하는 건 아닙니다. 옵션이라고 보면 되겠습니다. 가질 수도 혹은 아닐 수도 있겠습니다. 고등학교(어쩌면 중학교) 수학 시간에 f(x) 이런 함수를 배우신 기억이 납니까? f는 메서드 이름이고 괄호 안에 들어가는 것을 파라미터라고 프로그래밍에서는 부릅니다. 파라미터는 변수와 비슷한 개념이지만 메서드 f 내에서만 사용되는 한정된 변수라고 보시면 됩니다. 위의 저지르다, 라는 메서드가 만약 파라미터를 가진다면 이런 형태가 되겠습니다.

메서드는 이런 파라미터를 갖게 됩니다. 깊이 나아가 본다면 이런 형태를 객체지향 프로그램에서는 다형성이라고 부릅니다. 하나의 메서드, 즉 이름이 같은 메서드이지만 다른 형태의 파라미터를 갖게 되는 것을 그렇게 부르지요. 하지만 여기서 다형성까지 배울 필요는 없으니까 자세한 것은 생략하기로 합니다.


그러면 여기까지 전개한 클래스 '실수'를 정리해볼까요?

자, 이렇게 실수는 클래스로 정리했습니다. 그렇다면 대체 왜 실수를 이렇게 클래스라는 형태로 정리한 걸까요? 글쓰기에도 그 나름의 정리하는 방식이 있지 않습니까? 서론-본론-결론, 기-승-전-결, 두괄식 구조처럼 나름의 설계도를 꾸미는 방식이 존재합니다. 이런 거 다 필요 없고 노트에 생각나는 단어들을 무작위로 늘어놓는 방법도 있습니다. 주제와 연상되는 단어를 모두 나열해놓고 그 단어들의 연관성을 정리하는 방법이 바로 마인드맵 같은 기법입니다.


하지만 마인드맵처럼 거창한 툴이나 개념적인 방법을 쓰는 것보다 이렇게 '구조적으로 정리하는 방식'이 글쓰기에 더 보탬이 됩니다. 프로그래밍의 논리적 사고는 정해진 규칙에서 자연스럽게 전개되도록 만드는 그러니까 일정한 체계, 혹은 틀을 가지고 있습니다. 선배들이 오래도록 경험해온 실무적인 기법이 구체적으로 객체지향 프로그래밍이라는 기법을 탄생시켰습니다. 즉 객체와 클래스를 연관시키는 작업은 프로그래머들에게 이미 오래도록 경험으로 녹아있습니다. 그래서 프로그래머들이 글을 잘 쓸지도 모르겠습니다. 이런 논리적, 구조적 사고방식이 몸에 배어 있기 때문이니까요. 따라서 우리는 선배들이 닦아놓은 이러한 현명한 기법을 적용하면 되는 겁니다. 프로그래밍은 사실 글쓰기와 유사한 부분이 꽤 많습니다. 그 부분은 앞으로 글을 쓰면서 자주 소개해드리겠습니다.


주제를 정하는 것은 글쓰기에서 가장 첫 번째 단계에서 하는 일입니다. 주제가 정리가 잘되지 않나요? 그럴 때는 설계도를 미리 그려보세요. 설계도는 어떻게 그린다고요? 클래스를 하나 디자인하는 겁니다. 클래스에는 변수와 메서드, 두 가지가 존재한다고 말씀드렸고요. 변수는 정체성, 성격 이런 명사적 특성을 가졌고 메서드는 동적인 특징, 즉 행동하는 뜻의 동사적 성잘을 가졌다고 말씀드렸습니다. 이런 방식으로 먼저 설계도를 그려 보세요. 설계도가 완벽하게 구성이 되면 그 탄탄한 틀에 따라 글을 쓰면 됩니다. 살만 붙여나가면 되는 것이지요. 얼마나 간단한 일입니까. 클래스와 객체지향 프로그래밍이 궁금한 분들은 서점에서 관련 분야의 책을 깊이 공부하시는 것도 좋겠습니다만, 프로그래머가 되는 일 그러니까 진로를 바꾸는 게 아니라면 그다지 추천하지는 않습니다.


자, 메서드 연기하듯이 주제에 완전히 몰입하여, 말하자면 내가 주제가 된 것처럼 상상해가며 글을 써봅시다.










keyword
매거진의 이전글보물을 찾아 멀리 먼 곳으로 떠나자고