[챗GPT로 코딩 공부] CreateRooms 함수, availableRoomList와 closedList 리뷰하기

내일배움캠프 수료생들은 챗GPT를 어떻게 개발 공부에 활용할까요?
Jun 26, 2024
[챗GPT로 코딩 공부] CreateRooms 함수, availableRoomList와 closedList 리뷰하기
✍🏼
챗GPT, 개발 공부에 있어서 든든한 친구 같은 존재이죠. 내일배움캠프의 수강생들도 혼자 공부할 때에는 챗GPT의 도움을 받고 있는데요. 오늘은 내일배움캠프 수료생들의 챗GPT 경험담을 보고, 여러분의 개발 공부에 적용해봅시다.
 
저는 어떤 목적이나 문제 해결을 위한 코드를 작성하는 것 자체를 ChatGPT에게 맡기기보다는, 스스로 코드를 설계하고 작성한 후 가독성과 성능을 고려하여 코드를 최대한 깔끔하게 정리하였고, 그 후 ChatGPT에게 해당 코드를 제공하여 제가 놓친 부분이 있는지, 가독성이나 성능면에서 개선할 부분이 있는지 등 여러 피드백을 통해 도움을 받았습니다. 또, 같은 역할을 하는 다른 코드들을 제공하여 어떤 코드가 더 성능적으로 좋은 코드인지 등을 ChatGPT를 통해 좀 더 쉽게 선택할 수 있었습니다. 또, 해당 코드에서 사용된 기술 등에 대한 피드백을 통해 그 기술의 장단점을 확실하게 알 수 있었습니다.
 

1. CreateRooms 함수

Q. 이 함수에 대해 설명해줄래?
private void CreateRoom() { // ... (생략) }
A. 이 CreateRooms 함수는 일련의 방을 생성하고 구성하는 데 사용됩니다. 이는 아마도 2D 또는 3D 게임에서 방 배치를 처리하는 데 사용되는 함수로 보입니다. 함수의 주요 단계와 구성 요소를 분석해보겠습니다.
 

STEP 1. 초기화 단계

  • ‘availableRoomList’: 생성될 수 있는 방의 좌표를 추적하는 ‘List<Vector2Int>’ 입니다.
  • ‘closedList’: 이미 처리되어 제외된 방의 좌표를 추적하는 리스트입니다.

STEP 2. 시작 방 생성

  • ‘rooms’는 2차원 배열로, 각 방의 위치를 나타냅니다.
  • 시작 방은 ‘rooms’의 중간에 생성되며, 그 위치는 배열의 크기를 기반으로 계산됩니다.

STEP 3. 지정된 수 만큼의 방 생성

  • ‘roomCount’만큼의 방을 생성합니다. 이는 시작 방에서 시작하여 주변 방향으로 생성을 확장합니다.
  • 매 반복마다 다음 생성 시 가능한 새 방의 위치를 결정합니다.
  • 이후 ‘availableRoomList’에서 무작위로 방을 선택하고 생성합니다.
 
 

2. availableRoomList와 closedList

Q. availableRoomList와 closedList는 어떤 역할이지?
A. ‘availableRoomList’와 ‘closedList’는 생성될 수 있는 방의 후보들과, 이미 고려되었거나 제외된 방을 추적하는 데 사용됩니다.
 

‘availableRoomList’ (가능한 방 목록)

  • 이 리스트는 생성될 수 있는 방의 좌표를 저장합니다.
  • 함수 내에서, 새 방을 만들 수 있는 잠재적 위치는 이 리스트에 추가됩니다.
  • 방 생성 과정에서, 이 리스트에서 무작위로 좌표를 선택하여 새 방을 생성합니다.
  • 새 방이 생성되면, 해당 좌표는 ‘availableRoomList’에서 제거됩니다.
 

‘closedList’ (제외된 방 목록)

  • 이 리스트는 이미 고려되었거나, 어떤 이유로 생성에서 제외된 방의 좌표를 추적합니다.
  • 만약 availableRoomList에 있는 좌표가 방 생성 과정에서 사용되거나 제외되면, 해당 좌표는 closedList에 추가됩니다. 이는 같은 위치가 여러 번 고려되는 것을 방지합니다.
 
간단히 말해 ‘availableRoomList’는 “아직 생성되지 않은 방 중에 생성할 수 있는 방들”의 목록이며, ‘closedList’는 “이미 고려되어 더 이상 고려하지 않을 방들”의 목록입니다. 이 두 리스트를 통해 함수는 방 생성 과정에서 어떤 위치가 이미 고려되었는지, 어떤 위치에 방을 생성할 수 있는지 효율적으로 관리할 수 있습니다. 이는 방 생성 알고리즘의 성능을 향상시키고, 중복된 위치에서 방이 생성되는 것을 방지합니다.
 
 

3. CreateRooms 함수의 효율성 분석 및 최적화 방안

Q. 이 함수가 충분히 효율적일까? 개선할 부분이 있다면 어떤 부분을 개선할 수 있을까?
A. 이 ‘CreateRooms’ 함수는 방을 생성하고 관리하는 데 기본적인 로직을 제공하지만, 효율성 측면에서 몇 가지 개선할 수 있는 부분이 있습니다.
  1. 중복 검사 개선: 현재, availableRoomList와 closedList를 사용하여 생성 가능한 방의 좌표를 관리하고 있습니다. 이는 중복 검사를 위해 매번 리스트를 순회하는 비효율적인 방법일 수 있습니다. 대신 HashSet<Vector2Int>를 사용하여 중복 검사를 더 빠르게 할 수 있습니다.
  1. 메모리 할당 최소화: 리스트에 대한 반복적인 추가 및 제거 작업은 메모리 할당과 가비지 컬렉션에 영향을 미칠 수 있습니다. 가능하면 리스트의 크기를 미리 할당하거나, 재사용 가능한 데이터 구조를 사용하는 것이 좋습니다.
  1. 알고리즘의 복잡성 개선: 방 생성 알고리즘 자체의 복잡성을 검토하여, 더 효율적인 방 생성 로직을 구현할 수 있습니다. 예를 들어, 가능한 방의 위치를 선택하는 로직을 더 효율적으로 만들거나, 불필요한 반복을 줄일 수 있습니다.
 
 
코드에 대한 도움을 받기 위해 다음과 같은 순서로 질문하였습니다.
  1. 코드 전문을 제공하고, 이 코드에 대한 개요를 작성하도록 함.
  1. 코드를 정확히 이해했고 정확한 도움을 줄 수 있는지 확인하기 위해, 코드의 일부분에 대한 질문을 하여 정확한 대답을 하고 있는지 확인함.
  1. 코드의 개선점을 찾도록 함.
 
특정 함수나 클래스의 전문 또는 일부분을 제공했을 때 대체적으로 해당 코드를 정확히 이해하고 그에 따른 도움을 주었습니다. 그러나 가끔 개발자의 의도와 다르게 해석하거나 틀린 값을 답변하는 등의 경우가 생기기도 합니다. 따라서 저는 코드에 대한 도움을 받을 때, 항상 그 코드에 대해 이해했는지 확인하기 위한 질문을 먼저 합니다. 보통 이런 경우는 제공한 코드만으로는 알 수 없는 부분들이 있어 생깁니다. 클래스나 함수의 일부분만 제공하였으나, 코드에 사용된 변수나 다른 함수가 제공된 코드에 포함되지 않을 때 ChatGPT는 ‘제공된 코드에 없기 때문에 알 수 없다’라는 답변을 하는 대신, 코드의 흐름과 함수, 변수의 이름으로 유추했을 때 이런 역할을 할 것이다 라고 가정을 하여 코드를 해석하기 때문입니다. 따라서 정확한 도움을 위해서는 필요한 정보를 전부 제공하거나 사전 검증 등을 통해 ChatGPT가 이해한 정보와 개발자의 의도가 일치하는지 먼저 확인하는 것이 중요하다고 생각합니다.
또, ChatGPT에게 코드의 리팩토링 등을 부탁할 경우, ChatGPT가 판단했을 때 최적의 방향으로 코드를 작성하거나 개선해줍니다. 하지만 가끔 전혀 다른 역할을 하는 함수로 만들거나 개발자의 의도와 다른 방향으로 답변할 때가 있는데요. 따라서 ChatGPT에게 받은 코드가 나의 의도와 일치하는지 판단하는 능력이 중요합니다.
 
 

내일배움캠프가 여러분의 러닝메이트가 되어드리겠습니다

내일배움캠프의 많은 수강생들이 부트캠프 생활을 수료하고 현업에서 개발자로 활약하고 있습니다. 내일배움캠프는 모든 운영진이 교육, 특강, 12시간 밀착 케어, 찐한 관리, 인재 채용까지 열과 성을 다해 수강생들의 꿈을 지원하고 있습니다. 수많은 장애물을 넘을 수 있도록 내일배움캠프가 든든한 러닝메이트가 되어드리겠습니다. 내일배움캠프과 함께 여러분의 개발자 여정을 시작하세요.
 
 
CREDIT
글 | 김세진 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
Share article
Subscribe to our newsletter
RSSPowered by inblog