It's just like pok    version4


조건과 분기 vs 변환과 매칭

 | 

조건과 분기
"상태"의 값을 조건과 비교해서 적절히 "분기"하도록 제어한다. 상태를 통한 제어설계
변환과 매칭
제어구조는 단순히 선형적으로 흐르게하면서 기능설계에 집중할 수 있게 해준다.

어셈블리 수업시간에 ebook뷰어의 라인스크롤을 구현할때, 나는 조건과 분기만을 생각했다. 글의 내용은 메모리버퍼상에 올라가 있고 화면상에 글을 뿌려주는 코드는 책에 구현되어 있었다. 내가 사로잡혀있던 생각은 라인스크롤을 할 수있는 키를 누르면 메모리상에서 현재를 가르키는 파일 포인터를 구해 그 다음부터 읽고, 라인업을 하면 일정부분만큼 포인터를 위로 올려주겠다는 생각이었다. 그런데 실제로 구현해보니 파일포인터 방식이 내가 생각하는 것처럼 상태화하기 쉬운 방식이 아니라서 파일포인터 상태에 따른 수행은 구현하기 어려웠다.

이때 내 친구가 생각한 방식이 변환과 매칭을 통한 구현이다. 이 방식대로 구현하려면 처음 화면에 보여주는 상대 라인넘버와 파일 전체를 고려한 절대라인넘버로 구분을 한 후에 절대라인넘버를 통해 포인터의 위치를 알아내는 변환 프로시져를 만든후 이 절대넘버와 상대넘버를 매칭하도록 한 것이다. 사실 나는 이러한 방식을 생각하지 못했고 친구녀석이 대단해 보였으며 내가 초라해 보였다.

변환과 매칭은 제어를 단순하게 유지할 수 있게 해서 대규모 프로그래밍에서 관리가 가능하도록 해준다. 또한 단순한 제어와 이에따른 흐름은 프로그램을 쉽게 이해할 수 있게 해주고 구조화 해주며 작은 모듈 혹은 프로시져로 나눌수 있게 해준다. 한마디로 좋다.

그러나 변환/매칭은 1.변환하는 과정자체를 설계해야 하고 2. 메인루프(반복구문)에 쓰는이 상태(객체)와 구현에 쓰이는 상태(객체)를 구분해서 설계해주어야 한다.

다형성이라는것은 변환과정을 단순화 시키고자 하는 노력이었을 것이며(변환과정을 상속을 통해 제어한다) 메인루프를 잘 설계할 수 있도록 도와주는것이 디자인 패턴이다.


프로그래밍