코드의 가독성을 향상시키기 위한 팁을 한가지 소개하고자 한다.
나는 이를 코드의 레이어링(계층화)이라고 부르는데, 흔히 말하는 캡슐화(encapsulation)와도 유사한 개념이다. (다만, '코드의 레이어링'이란 말은 널리 쓰이는 말이 아니므로, 타인과 커뮤니케이션 시에는 '캡슐화' 또는 '모듈화'로 대체함이 옳다.)
다만, 클래스의 캡슐화가, 클래스의 불필요한 정보를 '다른 클래스'에 노출하지 않음으로써 의도하지 않은 사용을 막는 방법이라면, 코드의 레이어링은, '다른 개발자'에게 꼭 필요한 정보만을 노출하여, 코드를 간결하게 하고, 보다 설계를 쉽게 이해하게 함으로써 코드의 가독성을 높이는 방법을 이야기한다.
다시 말하면, 레이어링은, 캡슐화와는 달리, (설계 상의 이슈와는 무관하게) 코드의 가독성을 낮추는 부분을 의도적으로 감추기 위한 것임에 가장 큰 차이가 있다.
코드 레이어링의 예시
레이어링 적용 전의 코드
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
applicationComplete="applicationCompleteHandler(event)">
<mx:HTTPService id="service" url="http://blog.chanik.com/rss"
resultFormat="e4x" result="service_resultHandler(event)"/>
<mx:List width="100%" height="100%" dataProvider="{dataProvider}">
<mx:itemRenderer>
<mx:Component>
<mx:Text text="{data.title}" fontWeight="bold"/>
</mx:Component>
</mx:itemRenderer>
</mx:List>
<mx:Script>
<![CDATA[
import mx.collections.XMLListCollection;
import mx.events.FlexEvent;
import mx.rpc.events.ResultEvent;
[Bindable]
private var dataProvider:XMLListCollection;
protected function applicationCompleteHandler(event:FlexEvent):void
{
service.send();
}
protected function service_resultHandler(event:ResultEvent):void
{
dataProvider.source = event.result.channel.item as XMLList;
}
]]>
</mx:Script>
</mx:Application>
레이어링을 적용한 코드
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
xmlns:rss="com.woodt.service.rss.*"
xmlns:app="com.woodt.app.*">
<!-- Service -->
<rss:RSS id="rss" url="http://blog.chanik.com/rss"/>
<app:StartUpManager rss="{rss}"/>
<!-- View -->
<mx:List width="100%" height="100%"
itemRenderer="com.woodt.components.RSSDataRenderer"
dataProvider="{rss.data}"/>
</mx:Application>
이 외에도 매우 다양한 활용 방법이 있으나 자세한 구현은 나중에 시간이 되면 다시 게재하도록 하겠다.
왜 레이어링이 필요한가
위의 예에서 알 수 있듯, 레이어링은 코드를 보는 이가 한 번에 접하는 정보를 획기적으로 줄이고, 세부 구현보다는 먼저 어플리케이션의 설계와 작동 방식에 대한 정보를 준 후, 알고자 하는 부분의 세부 구현으로 유도한다.
물론 위 예시 만으로는 충분히 감이 안올 수도 있지만, 실무에서 다른 사람들이 짠 코드들을 보다보면, 메인 MXML 어플리케이션 파일만 1000 라인이 넘는 경우도 허다하다. 하지만, 레이어링을 진행하고 나서 보면, 길어도 50 줄 이내의 코드가 된다.
코드의 레이어링은, 주로 유지 보수의 용이성을 위하여 도입하며, 또한 자기 자신보다는 다른 사람이 유지 보수에 투입되는 경우에 더 도움이 된다. 예를 들어, 어플리케이션에 어떠한 문제가 발생하였을 때, 보통의 사람들은 이 빌어먹을(?) 어플리케이션이 도대체 어떻게 생겨 먹었는지를 알고 싶어하기보다는, 문제가 발생하는 부분만을 즉시 추적하여 살펴보고, 빠르게 해결하기를 원하기 때문이다.
또한, 위의 예시에서는 MXML의 레이어링만 보여주었지만, ActionScript 클래스 내의 레이어링도 이에 못지 않게 중요하다.
레이어링 진행 시 주의할 점
레이어링을 할 때 주의할 점 중 하나는, 또 너무 레이어링에 집착하다보면, 어플리케이션의 계층 구조가 불필요하게 복잡해질 수 있다는 점이다.1 코드를 작성하면서 적절한 레이어의 수의 유지에 신경써야, 코드의 가독성을 높임과 동시에, 불필요하게 복잡한 계층 구조를 피할 수 있다.
References
- 등록된 참고 자료가 없습니다.
옮기며 덧붙임
이 글은 예전 블로그에 포스팅하였던 글인데, 다시 보아도 그럭저럭 괜찮은 것 같아, 내용을 조금 다듬고, 예제를 추가하여 옮겼습니다.
- 복잡한 어플리케이션 계층 구조에 대한 글은 추후에 시간나는대로 정리하여 다시 링크하겠다. [본문으로]
'Software Engineering' 카테고리의 다른 글
| 출제자의 의도 파악 문제 (2) | 2008/05/30 |
|---|---|
| 깨끗한 코드 (2) | 2008/03/10 |
| 소프트웨어의 수명 정하기 (0) | 2008/02/22 |
| 성급한 퍼포먼스 튜닝 (6) | 2007/05/06 |
| 코드의 레이어링 (0) | 2007/03/11 |
| 테스트 케이스 (0) | 2007/03/07 |




댓글을 달아 주세요