STL - 10 (연결리스트 - 2)

Youngmin Choi·2021년 6월 19일
0

STL

목록 보기
12/34
post-thumbnail

1. STL list를 사용하면 좋은점

  • STL을 사용하지 않는다면, C/C++언어, 자료구조를 공부하고 필요한 자료구조를 직접 만들어 사용해야 한다. 즉 불필요한 시간을 소비하고, 잘못 구현하여 버그를 만들 위험이 있고, 개인마다 구현 방법이 다르므로 사용이나 유지보수 측면에서 불편하다.

  • STL list를 사용하면 연결리스트를 만들어야 하는 시간을 절약할 수 있고, 이미 검증되어 있으므로 안전하고 표준 라이브러리이므로 사용 방법이 언제나 같아서 사용 및 유지보수가 좋아진다.

  • 다만, list를 사용할때는 특성을 잘 파악하여 올바르게 사용해야 한다. 안그러면 성능의 하락 및 시스템 에러를 유발할 위험이 생긴다.

2. list를 사용해야 하는 경우

  • 저장할 데이터 개수가 가변적이다.
    배열은 데이터 개수를 설정하고, 만약 그 크기를 넘어가면 데이터가 넘쳐서 실행 도중 프로그램 오류가 발생하므로 코드를 수정 후 재컴파일 해야 한다. 그렇다고 '넉넉하게 잡아야지' 하고 큰 배열을 만들면 메모리 낭비가 발생한다. 그러나 list를 사용하면 저장 공간의 크기가 자동으로 변하므로 유연하게 사용할 수 있다.

  • 중간에 데이터 삽입이나 삭제가 자주 일어난다.
    MMORPG 게임에서 지도는 정말 크고 게임상에서 캐릭터의 행동에 대한 정보를 근처의 클라이언트에게만 통보하므로 지도를 작은 단위로(보통 사각형으로) 나눈 후 같은 단위에 포함 되어 있는 클라이언트와 그 단위 근처의 클라이언트에게만 통보한다. 지도를 작은 단위로 분할하여 해당 영역에 들어오는 유저는 저장하고 나가는 유저는 삭제해야 한다. 이와 같이 빈번하게 삽입, 삭제가 일어나는 곳에 list를 사용한다.

  • 저장할 데이터 개수가 많으면서 검색을 자주 한다면 다른 컨테이너 라이브러리를 사용해야 한다.

  1. 아주 많은 데이터를 저장하면서
  2. 특정 데이터를 자주 검색해야 할 때
    list를 사용하면 검색 속도가 많이 느려지므로 이런 경우에는 map이나 set, hash_map을 사용해야 한다.
  • 데이터를 랜덤하게 접근하는 경우가 많지 않다.
    배열은 랜덤 접근이 가능하나 list는 순차 접근만 가능하다.
    그래서 저장된 위치를 알더라도 반복자(Iterator)를 통해서 접근해야 한다. 온라인 게임에서는 아이템 사용시 아이템 정보에 빈번하게 접근하므로 성능을 위해 메모리 낭비를 감수하고 배열로 데이터를 저장해서 랜덤 접근을 사용하게 한다.
profile
Always, Continually, In all circumstance

0개의 댓글