003. 재사용의 함의

객체지향의 긍극적인 목적은 코드 재사용에 있다고 합니다. 이 말이 틀린것은 아니지만 고작 코드 몇 줄 아끼기 위해 그 어려운 코딩을 하는가라는 비판의 빌미가 되기도 하고 객체지향 회의론이 생기는 지점이기도 합니다. 하지만 이 비판은 재사용의 함의를 모르고 있다는 방증이기도 합니다. 객체지향 재사용의 핵심은 코드 고도화에 있으며 이는 구조지향 방식으로는 불가능한 영역입니다. 결론적으로 객체지향 코드가 위임이나 느슨한 결합처럼 사람이 이해하기 어려운 문장과 구조로 작성되는것은 고도화를 위한 고리를 미리 만들어두기 위함이지 겨우 코드 몇줄 줄여보자는 절약정신의 발로가 아니라는 것입니다.

객체지향은 어플리케이션을 잘게 쪼개진 코드 조각의 결합을 통해 구현합니다. 그리고 이 결합은 실행환경의 조건에 따라 동적인 조합도 발생합니다. 이런식의 역동적 기능 결합이 가능하기 위해서는 가져다 사용할 수 있는 코드 조각이 미리 만들어져 있어야 합니다. 이렇게 미리 만들어진 조각을 집어다 사용하는 행위를 객체지향적 재사용이라 하는것입니다. 따라서 이 글의 서두에서 예를 든 비판이 재사용의 함의를 모른다고 한것은 이러한 객체지향적 재사용을 이해하지 못한다는 뜻이며 여전히 대부분의 개발자 역시 재사용의 의미를 모른다는데 제 손목아지는 아니고......그냥 500원 겁니다.

아무튼 재사용은 고도화를 위한 수단정도로 이해할 수 있는데요 객체지향에서 재사용이 고도화로 이어지는 일련의 프로세스는 추후에 기회가 되면 포스팅을 하기로 하구요 지금은 제가 무슨 근거로 구조지향은 코드 고도화가 불가능하다고 했는지를 설명하고 이번글을 마치겠습니다.

먼저 고도화의 의미부터 되짚어봅시다. 우선 고도화는 기능면과 코드 이 두 가지를 생각할 수 있습니다. 물론 디자인, 리소스, 배포 등 고도화에도 여러대상이 존재하나 소프트웨어의 핵심은 결국 기능과 코드 두 가지 입니다. 이중 사용자 입장에서 중요한 기능 고도화는 프로그램 기능확장과 편리성 제고입니다. 계산기 프로그램을 예로 들어볼까요? 최초 계산기는 사칙연산만 가능했으나 업그레이드를 통해 삼각함수를 지원하면 사용자는 기능이 좋아졌다고 생각합니다. 마찬가지로 코드 고도화 역시 코드가 제공하는 기능 확장과 사용 편리성 제고가 그것입니다. 그런데 코드가 코드지 무슨 기능이 있고 사용 편리성이 있냐구요? 그 코드라는것이 정확하게는 코드조각 즉 컴포넌트이기 때문에 기능이 있고 사용 편리성이 존재하는 것입니다. 즉 코드 고도화란 컴포넌트의 고도화를 의미하며 코드가 구축되는 과정이 구조지향적이라면 재사용 가능한 컴포넌트가 만들어지지 않기 때문에 처음부터 코드 고도화가 적용될 근거 자체가 없는것입니다. 더 나아가 구조지향 코드의 문제는 재사용의 가치를 곡해하고 개발과정의 시행착오와 경험 심지어 코드까지도 남기지 않는다는데 있습니다. 물론 화면 사이사이에 들어앉은 코드가 있기는 하겠지만 이것은 한번도 볼일없는 개발문서나 마찬가지입니다. 아무나, 누구라도 그런 코드는 만들 수 있고 아무도 또는 누구도 그런 코드를 기반으로 발전적인 코딩을 해나가지 않기 때문이죠.

재사용이 함의하는 고도화는 진보를 의미합니다. 소프트웨어의 진보. 그것은 객체지향을 통해 코드가 구축될때 비로소 가능해지는것입니다.

사족 : 철저하게 구조지향으로 작성된 코드를 고도화한다는 프로젝트를 몇번 본적이 있습니다. 실체도 없는 코드를 어떻게 고도화했을까요? 결과가 궁금합니다.

댓글 없음:

댓글 쓰기