[챗GPT로 코딩 공부] 프로젝트 코드·성능 개선

내일배움캠프 수료생들은 챗GPT를 어떻게 개발 공부에 활용할까요?
Jul 09, 2024
[챗GPT로 코딩 공부] 프로젝트 코드·성능 개선
✍🏼
챗GPT, 개발 공부에 있어서 든든한 친구 같은 존재이죠. 내일배움캠프의 수강생들도 혼자 공부할 때에는 챗GPT의 도움을 받고 있는데요. 오늘은 내일배움캠프 수료생들의 챗GPT 경험담을 보고, 여러분의 개발 공부에 적용해봅시다.
 

GPT를 이용한 프로젝트 코드·성능 개선

학습, 프로젝트 기획, 에러 해결뿐만 아니라, 프로젝트 코드/성능 개선에도 챗 GPT를 활용할 수 있다. 예를 들어, 필자는 프로젝트에 커스텀 캘린더를 띄우기 위해 특일 정보를 API 요청을 통해 받아와야 했다. 동작에 문제가 없는 코드 작성을 완료하였으나, 더 개선할 점이 있는지 챗 GPT에게 다음과 같이 물어보았다.
프롬프트: 코틀린으로 안드로이드 개발을 하고 있어. API 통신을 통해 특일 정보를 받아오는 코드야. 특일의 종류는 holiday, anniversary, solar term, etc 4종류야. usecase 클래스에서 API 요청으로 받아온 종류별 특일 정보를 하나의 flow로 변환하여 반환해. 이 코드를 더 개선할 수 있을까?
interface HolidayRepository { suspend fun getHoliday(year: Int, month: Int): Flow suspend fun getAnniversary(year: Int, month: Int): Flow suspend fun getSolarTerm(year: Int, month: Int): Flow suspend fun getEtc(year: Int, month: Int): Flow }
class GetHolidayUseCase @Inject constructor( private val holidayRepository: HolidayRepository ) { private val TAG = this@GetHolidayUseCase::class.java.simpleName suspend operator fun invoke(year: Int, month: Int): Flow = combine( holidayRepository.getHoliday(year, month), holidayRepository.getAnniversary(year, month), holidayRepository.getSolarTerm(year, month), holidayRepository.getEtc(year, month), ) { holiday, anniversary, solarTerm, etc -> mutableListOf().apply { if (holiday is EntityWrapper.Success) addAll(holiday.data) else Log.d(TAG, "failed holiday, ${(holiday as EntityWrapper.Fail).throwable}") if (anniversary is EntityWrapper.Success) addAll(anniversary.data) else Log.d(TAG, "failed anniversary, ${(anniversary as EntityWrapper.Fail).throwable}") if (solarTerm is EntityWrapper.Success) addAll(solarTerm.data) else Log.d(TAG, "failed solarTerm, ${(solarTerm as EntityWrapper.Fail).throwable}") if (etc is EntityWrapper.Success) addAll(etc.data) else Log.d(TAG, "failed etc, ${(etc as EntityWrapper.Fail).throwable}") } } }
 
다음과 같은 답변을 받을 수 있다.
이미 잘 구성된 코드이지만, 몇 가지 개선할 수 있는 방법이 있습니다. 코드의 가독성과 유지 보수성을 높이는 것이 주된 목적입니다. - 중복 코드 최소화: 현재 종류별로 if-else 로직이 반복되고 있습니다. 이를 더 간결하게 처리할 수 있는 방법을 모색할 수 있습니다. - 데이터 처리 로직 분리: 데이터 처리 로직을 별도의 함수로 분리하여, 종류별 데이터 처리를 한 곳에서 관리하게 할 수 있습니다. - 에러 로깅 개선: 현재는 실패 시 로그를 출력하고 있지만, 이를 더 효율적으로 관리할 수 있는 방법을 고민해 볼 수 있습니다. 아래는 개선된 코드 예시입니다:
class GetHolidayUseCase @Inject constructor( private val holidayRepository: HolidayRepository ) { private val TAG = this@GetHolidayUseCase::class.java.simpleName suspend operator fun invoke(year: Int, month: Int): Flow = combine( holidayRepository.getHoliday(year, month), holidayRepository.getAnniversary(year, month), holidayRepository.getSolarTerm(year, month), holidayRepository.getEtc(year, month), ) { results -> results.flatMap { result -> when (result) { is EntityWrapper.Success -> result.data is EntityWrapper.Fail -> { Log.d(TAG, "failed to fetch data, ${result.throwable}") emptyList() } } } } // Optional: 데이터 처리 로직을 별도의 함수로 분리 private fun handleResult(result: EntityWrapper): List { return when (result) { is EntityWrapper.Success -> result.data is EntityWrapper.Fail -> { Log.d(TAG, "failed to fetch data, ${result.throwable}") emptyList() } } } }
응답으로 받은 코드가 100% 정확하지 않을 수 있다. 이 때문에 무조건적으로 챗 GPT의 응답을 믿고 복사/붙여 넣기 하여 사용하면 안 된다. 하지만, 로직을 더 간결하게 할 수 있는 아이디어를 얻어, 중복되는 코드를 줄이고 가독성을 개선할 수 있다.
 

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

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