블로그 이미지
대갈장군

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

'STL'에 해당되는 글 1

  1. 2009.07.28 STL (Standard Template Library)
2009. 7. 28. 02:48 프로그래밍/C++
나는 늘 같은 경험을 한다. 모르는 어떤 것을 알기위해 이것 저것 읽어 보다보면 끊어진 이해의 연결 고리들이 어느순간 한번에 이어지면서 한순간에 전체적인 흐름을 파악한다.

그 흐름이 파악되면 세부적인 내용은 너무나도 쉽게 쉽게 이해가 된다. 아무리 어려운 문법이라도 '음, 이건 분명 이렇게 될 수 밖에 없지...'라는 마치 알고 있었다는 듯한 느낌마저 받는다.

STL도 처음 나에게는 '이거 뭐야?' 라는 놈이었지만 지금은 '음, 이놈 복잡한 놈...' 이라는 정도의 느낌만 줄뿐 아예 모르는 놈은 아니다.

STL을 알기위해서는 템플릿도 알아야 하고 포인터에 대한 이해 및 함수 포인터 그리고 배열 및 객체 지향에 대한 이해도 필요하다.

하지만 이것은 실제적인 사용을 위해 필요한 것이고 이보다 앞서 필요한 '이해'를 위해서는 아무것도 필요없다. 무엇인가 알려고 할때는 항상 전체적인 흐름을 파악하고 왜 이것을 알아야 하는가에 대해서 먼저 답을 해야 한다.

그것을 알지 못하고 무작정 세부적인 문법만 파고들면 금새 길을 잃어버린 아이처럼 이곳 저곳을 방황하다가 결국 지쳐 울고 만다.

그렇다면 왜 사람들이 STL, STL하는지 알아보자. 과연 무엇이 그리도 좋다는 말인가?

STL은 한마디로 라이브러리다. 라이브러리... 도서관... 즉, 필요한 모든 정보가 있는 곳이다. 사용자는 이 STL을 이용해 수많은 똑똑한 개발자들이 만들어 놓은 아주 편리한 함수들을 손쉽게 꺼내어 사용할 수 있다.

프로그램을 작성하기 위해 필요한 두가지 필수 요소는 바로 알고리즘자료구조이다. 프로그램은 항상 저장된 데이터를 불러와 어딘가에 저장해 놓고 (자료구조) 그 값들을 필요에 따라 정렬, 삭제하여 (알고리즘) 원하는 것을 하는 것이다.

바로 이 두 가지 필수 요소인 자료구조와 알고리즘을 모조리 묶어서 정리한 라이브러리가 바로 STL이다. 

하지만 여기서 그치지 않는다. STL은 이름에서 처럼 Standard (일반화) 특성을 가지고 있다. 즉, 어떠한 자료구조이던 간에 상관없이 동일한 형태의 알고리즘을 제공한다는 점이다. 

이로써 사용자가 각 자료구조에 대한 각각의 알고리즘 (정렬, 삭제, 추가, 대입등) 을 일일히 정의해 줄 필요가 없어진 것이다.

이 얼마나 고마운 일인가...

게다가 STL은 이름에 있듯이 Template를 이용해 사용자가 원하는 임의의 형태로 객체를 생성해 낸다. 즉, int를 원하면 int, float을 원하면 float, 클래스를 원하면 클래스... 말 그대로 지 맘대로 객체를 생성할 수 있다.

고마워서 눈물이 날 지경이다... 상상을 해보라. 프로그래머가 자신이 사용해야 할 자료구조 (스택, 리스트, 큐) 같은 것을 프로그램 짤때마다 만들어야 한다면? 게다가 알고리즘까지 다 만들어야 한다면??

이런 복잡한 일을 다 해주는 고마운 친구가 STL인것이다.

그럼 아마도 이런 생각이 들것이다. 그럼 왜 진작부터 이거 사용안하냐고... 

좋은 질문이다... STL은 이해하기는 쉽지만 사용하기 위해서는 C++과 C에 대한 전반적인 이해가 필수이며 몇몇 단점들이 존재하기 때문이다.

우선 실행파일이 거대해 진다. 원래 STL은 속도만을 중요시 하기때문에 컴파일 타임에 링크하는 방법을 쓰지 않는다. 고로 정적 링크를 항상 하게 되므로 생성하는 STL의 객체 수와 사용하는 STL 함수만큼 정적 링크의 갯수가 늘어간다.

하지만 크기의 이점을 잃어버리는 대신 '편리함'을 얻었으니 불평하기만 할 수는 없지.

다른 문제점은 '가독성'이 열라 떨어진다는 점이다. STL을 이중 삼중으로 사용하게 되면 작성한 놈조차 '이게 뭔 말이여?' 라는 소리를 하게 되어 있다.

즉, 템플릿의 문법 자체가 복잡한데다가 일반화 특성을 추가해버렸으니 더더욱 복잡해 보인다. 그래서 제대로 사용하기 위해서는 많은 연습이 필요하다는 점이다.

많은 사람이 STL을 꺼려하는 이유는 복잡하기 때문인데다가 이를 대체할 좋고 쉽게 이해할 수 있는 MFC가 존재하기 때문이다. 

하지만 내가 얻은 소스가 STL이라면 어쩌겠는가? 즉, 결국은 알아야 한다는 말이지... 에휴... 만약 템플릿이 무엇인지 모른다면 반드시 그것부터 이해해야 한다는 말은 꼭 하고 싶다...
posted by 대갈장군
prev 1 next