Wednesday, November 21, 2012

코드 분석 : 데이터의 표현법(자료구조), 알고리즘

코드 분석의 첫 번째 이야기를 해보려고 합니다.

우선 가장 기본은 자신이 생각하고 있는 것을 사용하는 프로그래밍 언어로 어떻게 데이터로 표현하고 그 데이터를 가공하기 위해 로직을 어떻게 작성해야 하는지만 알면 기본은 갖추어 졌다고 봅니다.

기본을 갖추고 나서 필요한 것은 지금까지 많은 선배 프로그래머들이 만들어 놓았던 자료구조, 알고리즘을 공부하는 것입니다. 결국 컴퓨터가 하는 것은 주어진 데이터를 조작하고 로직에 의해 변형하고 그 결과를 어떠한 형태로든 우리가 얻는 것입니다. 이때 데이터를 어떻게 표현하느냐, 알고리즘을 어떠한 것을 사용했느냐에 따라서 프로그램의 성능에 큰 차이를 만들게 됩니다.

데이터를 표현하는 방법 그리고 그 데이터를 효과적으로 사용하는 방법이 굉장히 많은데 이러한 방법들을 두루두루 알고 있을 때 다른 사람이 작성한 코드를 분석한다거나 큰 프로젝트에 임했을 때 많은 도움이 됩니다.

자료구조에서 특히 많이 사용되는 것은 배열, 리스트, 해쉬테이블, 스택입니다. 그 외에도 많은 것들이 있지만 4가지는 기본중의 기본입니다. 이러한 기본을 공부할 때 좋은 방법은 이러한 자료구조를 이용해서 실제 응용 프로그램에 적용하는 것입니다.

예를 들어 스택은 그림판의 Undo기능에 사용될 수 있습니다. (이 부분에 대한 자세한 내용은 제가 작성한 워드 문서가 따로 있습니다.) 가령 그림판에 A, B, C순으로 어떠한 도형을 그리고 Undo를 했을 때 최종적으로 그렸던 C는 사라지고 A, B만 화면에 나타나야 합니다. 그리고 이후 D, E를 그리고 다시 Undo를 하면 A, B, D만 화면에 나오게 됩니다. 이러한 것을 구현할 때 스택을 이용하면 됩니다.

그리는 동작(보통 command, action이라고 합니다.)을 스택에 넣어주고 Undo를 했을 때 해당 동작을 빼주기만 하면 됩니다. 중요한 것은 스택의 이러한 특성입니다. 스택의 구현법은 다양한데 그 특성은 변하지 않습니다. 그것만 기억한다면 다른 사람의 코드를 분석할 때 많은 도움이 됩니다. 가령 스택 자료구조를 사용한다면 해당 자료구조를 사용하는 로직들을 살펴 볼 때 많은 도움이 됩니다. 왜 배열, 리스트를 사용하지 않고 스택을 사용했는가? 라는 질문을 스스로 하면서 코드를 읽으면 더 이해가 쉽기 때문이죠.

나머지 리스트, 해쉬테이블, 배열 역시 마찬가지입니다. 각각의 자료구조 마다 특성이 있고 그것을 사용하는 로직을 분석할 때 그 특성을 인지하고 읽어 나가면 로직을 이해하기가 더 쉽습니다.

코드 분석이라 함은 로직의 이해입니다. 다른 사람이 어떠한 의도로 로직을 작성했는지 그리고 의도대로 돌아가는지는 증명하고 이해하는것이 코드 분석입니다.

그리고 이것을 잘하기 위해서는 기본적인 컴퓨터 자료구조, 알고리즘의 이해가 필요합니다.

No comments:

Post a Comment

Task in UnrealEngine

 https://www.youtube.com/watch?v=1lBadANnJaw