[챗GPT로 코딩 공부] 변수명, 함수명, 주석 작성하기

내일배움캠프 수료생들은 챗GPT를 어떻게 개발 공부에 활용할까요?
Jun 26, 2024
[챗GPT로 코딩 공부] 변수명, 함수명, 주석 작성하기
✍🏼
챗GPT, 개발 공부에 있어서 든든한 친구 같은 존재이죠. 내일배움캠프의 수강생들도 혼자 공부할 때에는 챗GPT의 도움을 받고 있는데요. 오늘은 내일배움캠프 수료생들의 챗GPT 경험담을 보고, 여러분의 개발 공부에 적용해봅시다.
 
프로그래밍을 할 때, 특히 협업과 같은 프로젝트에서 가장 중요한 점 중 하나는 변수와 함수의 이름이나 주석을 명확하고 간결하게 작성하는 것입니다. 코드의 가독성을 높여 다른 개발자가 코드를 쉽고 정확히 이해할 수 있어야 원활한 협업이 이루어집니다. 특정 변수나 함수가 어떤 역할을 하는 지 감으로 알고 있거나 문장으로 풀어서 설명할 수는 있어도, 이름은 최대한 간단명료한 명사형 또는 동사형 단어로 이루어지도록 해야 합니다. 변수나 함수의 역할에 따라 프로그래머들이 주로 사용하는 이름들이 있다면 되도록 이와 동일하게 사용하도록 해야 합니다. 또 이름은 영어로 짓는 것이 보통이나 일반적으로 사용하는 영어 표현 등을 찾기 힘들 때가 많습니다. 개발자가 시간을 가장 많이 할애하는 작업이 변수명 짓기라는 농담도 있을 만큼 중요한 부분이고 실제로도 고민을 많이 하기 때문에 이에 대한 도움을 받았습니다. 코드의 일부 또는 전문을 제공하고, 해당 변수나 함수가 가져야 할 이름을 추천받아 이름 짓기에 큰 도움이 되었습니다.
저의 경우는 '가장 좋은 주석은 간결하고 알아보기 쉬운 코드이다'라는 마인드를 가지고 있어 코드만 봐도 해당 함수나 클래스가 어떤 역할을 하는 지 충분히 알기 쉽게 정리하는 습관이 있습니다. 실제로 코드가 간결명료해지긴 하지만 어느 순간부터 주석을 생략하는 습관이 생겼고, 협업 시에는 다른 개발자도 코드를 쉽게 이해할 수 있어야 하기 때문에 간결하고 명확한 주석이 필요하다고 생각하였습니다. 따라서 주석을 작성하고, ChatGPT에게도 주석을 작성하도록 하여 두 주석을 비교한 후 더 나은 주석을 통해 깔끔한 코드를 작성할 수 있었습니다.
 

변수 이름 짓기

Q. (코드 제공 후) 변수 a의 이름을 바꾼다면, 어떤 이름이 좋을까?
A. 이 변수는 캐릭터의 위치를 의미하지만 이름만으로는 그 의미를 정확히 알기 어렵습니다. 따라서 변수의 이름을 position 또는 characterPos와 같이 바꾸면 더 명확합니다.
 

주석 작성하기

Q. (코드 제공 후) 코드가 길어서 함수를 한 눈에 알아보기 힘들어. 구간을 나누어 해당 구간의 동작을 주석으로 나타내려고 해. 어떻게 주석을 작성하면 좋을까?
A. 코드의 각 구간에 주석을 추가하여 함수의 동작을 명확히 나타내도록 하겠습니다.
private static void ParseData<T>() where T : Data { // 데이터 형식(type)과 리스트(list) 선언 Type type = typeof(T); List<T> list = new(); // CSV 파일 경로 설정 string csvPath = $"{Application.dataPath}/{Path.DATA_CSV}/{type.Name}.csv"; // 파일 존재 여부 확인 if (!File.Exists(csvPath)) { Debug.LogError($"[DataParser] ParseData<{type.Name}>(): The path was not found. ({csvPath})"); return; } // CSV 파일 읽기 및 줄 단위로 나누기 string[] lines = File.ReadAllText(csvPath).Split("\n"); if (lines.Length <= 0) return; // 첫 번째 줄에서 속성 이름들 추출 string[] propertyNames = lines[0].Replace("\r", "").Split(','); // 데이터 행 반복 처리 for (int y = 1; y < lines.Length; y++) { string[] row = lines[y].Replace("\r", "").Split(','); if (row.Length == 0 || string.IsNullOrEmpty(row[0])) continue; // 새로운 데이터 인스턴스 생성 T data = Activator.CreateInstance<T>(); // 각 속성에 값 설정 for (int i = 0; i < row.Length; i++) { PropertyInfo property = type.GetProperty(propertyNames[i]); if (property == null) { Debug.LogError($"[DataParser] ParseData<{type.Name}>(): Data parsing failed. Property '{propertyNames[i]}' not found."); return; } property.SetValue(data, ConvertValue(property.PropertyType, row[i])); } // 리스트에 데이터 추가 list.Add(data); } // JSON 파일 경로 설정 및 파일 작성 string jsonPath = $"{Application.dataPath}/{Path.DATA_JSON}/{type.Name}.json"; File.WriteAllText(jsonPath, JsonConvert.SerializeObject(list, Formatting.Indented)); // 로그 출력 및 에셋 데이터베이스 갱신 Debug.Log($"[DataParser] ParseData<{type.Name}>(): Parsed data: {jsonPath}"); AssetDatabase.Refresh(); }
 
수정한 최종 코드
private static void ParseData<T>() where T : Data { // #1. 파싱 준비. Type type = typeof(T); List<T> list = new(); // #2. 파일 읽기. string csvPath = $"{Application.dataPath}/{Path.DATA_CSV}/{type.Name}.csv"; if (!File.Exists(csvPath)) { Debug.LogError($"[DataParser] ParseData<{type.Name}>(): The path was not found. ({csvPath})"); return; } string[] lines = File.ReadAllText(csvPath).Split("\n"); if (lines.Length <= 0) return; // #3. 프로퍼티 이름 캐싱. string[] propertyNames = lines[0].Replace("\r", "").Split(','); // #4. 데이터 파싱. for (int y = 1; y < lines.Length; y++) { string[] row = lines[y].Replace("\r", "").Split(','); if (row.Length == 0 || string.IsNullOrEmpty(row[0])) continue; T data = Activator.CreateInstance<T>(); for (int i = 0; i < row.Length; i++) { PropertyInfo property = type.GetProperty(propertyNames[i]); if (property == null) { Debug.LogError($"[DataParser] ParseData<{type.Name}>(): Data parsing failed. Property '{propertyNames[i]}' not found."); return; } property.SetValue(data, ConvertValue(property.PropertyType, row[i])); } list.Add(data); } // #5. Json으로 저장. string jsonPath = $"{Application.dataPath}/{Path.DATA_JSON}/{type.Name}.json"; File.WriteAllText(jsonPath, JsonConvert.SerializeObject(list, Formatting.Indented)); Debug.Log($"[DataParser] ParseData<{type.Name}>(): Parsed data: {jsonPath}"); AssetDatabase.Refresh(); }
 
 
ChatGPT를 통해 이름 짓기나 주석 작성을 위한 시간을 아낄 수 있었고, 실제로 원래 생각한 것보다 더 나은 이름이나 주석들을 찾을 수 있었습니다. ChatGPT는 다양한 대안을 제시해 주었고, 그 중에서 가장 적합한 것을 선택하여 적용하였습니다. 이 때 강조하고 싶은 부분이나 지켜야 할 양식 등이 있다면 이를 구체적으로 제공하여 더 효과적인 피드백을 기대할 수 있습니다.
 
 
 

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

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