더북(TheBook)

icon_wait


자료 구조는 어떻게 결정해야 할까요?

배열은 데이터의 추가나 삭제보다 탐색이 잦을 때, 연결 리스트는 탐색보다는 데이터의 추가나 삭제가 빈번할 때 사용한다고 했습니다. 하지만 실제 프로그램을 개발할 때는 여러 가지 상황을 고려해 자료 구조를 결정해야 합니다. 실제 게임 개발에서 사용하는 예를 살펴보겠습니다.

비행기 게임을 만든다고 가정하겠습니다. 게임이 진행되면 특정 시점이나 상황(이벤트)일 때 적 비행기가 출현합니다. 이때 한 장면에서 나올 수 있는 적 비행기의 최대 개수는 100개를 넘길 수 없다고 하겠습니다. 한 장면에 출현한 적 비행기를 담을 자료 구조로 무엇을 선택하면 좋을까요?


271


적 비행기는 화면 아래로 이동하며 주인공 비행기에 미사일을 쏘고, 주인공 비행기가 쏜 미사일에 맞으면 터지면서 화면에서 사라집니다. 수시로 화면에 등장하고(추가) 수시로 사라지는(삭제) 적 비행기를 담는 데는 연결 리스트가 적당해 보입니다. 하지만 한 가지가 걱정입니다. 수시로 나타났다 사라지므로 매번 많은 객체를 생성하고 소멸시켜야 합니다. 객체를 만들었다 지우는 일은 리소스를 많이 쓰는 매우 부담스러운 작업입니다.

이런 문제점을 해결하기 위해 배열을 활용한 객체 풀 기법을 사용합니다. 우선 적 비행기가 최대 100개까지 나타날 수 있으므로 길이가 100인 배열을 준비하고 게임이 시작될 때 적 비행기 객체를 100개 생성해 배열에 담아 둡니다.

이후 특정 시점이나 상황(이벤트)이 발생하면 배열에 담아 둔 객체 중 일부를 화면에 등장시킵니다. 적 비행기가 주인공의 미사일에 맞으면 터지는 효과를 내고 화면에서만 사라지게 합니다. 실제로 객체가 소멸하는 것은 아닙니다. 객체 생성은 게임이 시작했을 때 일어나고, 소멸은 게임이 끝났을 때 일어납니다.

이처럼 여러 가지 상황을 고려해 가장 알맞은 자료 구조를 선택해야 프로그래밍 도중에 맞닥뜨리는 어려운 문제를 해결할 수 있고 결과적으로 성능 좋은 프로그램을 만들 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.