본문 바로가기
프로그래밍/프로그래밍 지식

[프로그래밍 지식] 프로그램이 가독성이 떨어지고 너무 길 때

by 김아잉 2023. 2. 19.
728x90

 가끔 의식의 흐름을 따라 코드를 짜다보면 코드가 점점  조건문들이 엉켜버려서 내가 짠 코드여도 이 코드가 어떤 동작을 하는지 알기가 힘들 때가 있다. 그래서 작성한 프로그램이 가독성이 떨어지고 너무 더러울 때 내가 이를 해결하기 위해 사용하는 방법을 포스팅해보고자 한다.

 

이런 코드처럼 처음 봤을 때에는 무슨 기능을 하는지 이해하기가 힘든 코드가 있다. 이런 코드는 오류가 나지않고 출력이 되더라도 정답이 아닌 경우에는 수정하기 매우 까다롭다. (가독성도 많이 떨어진다.)

 

이를 줄이기 위해서 할 수 있는 방법으로는 조건문마다 무슨 역할을 하는 조건문인지 주석을 추가하는 것이다. 아래 코드는 위의 코드에 주석을 추가한 것이다.

위의 코드에서 바뀐 것은 주석 외에는 없지만 확실히 각 if절들이 무슨 역할을 하는지에 대해서는 확실히 편하게 알 수 있다. 주석 하나만으로도 코드의 가독성을 높일 수 있다.

 

 

 

두번째로는 함수로 코드를 묶는 것이다. 함수 이름을 함수에 있는 코드가 실행하는 것으로 해두면 함수 호출에도 편리하고, 읽기에도 편하다.

오른쪽 코드는 왼쪽 코드에서 플로이드-워셜 알고리즘 부분을 함수로 묶은 것이다. main 부분의 코드가 왼쪽 코드에 비해서 깔끔하고 플로이드-워셜 알고리즘 부분은 floid 함수에서 확인할 수 있으므로 코드 길이가 길지만 코드를 읽기에는

오른쪽 코드가 좀 더 편하고, 코드를 다시 호출할 때도 편리하다.

 

 

세번째로는 해당 코드에서 사용하는 이론 적용하기,수학식 미리 계산해보기 또는 내장 함수 사용하기이다. 생각보다 BOJ에서 문제를 풀다보면 입력값의 범위가 10,000 정도인 소수 판별 종류의 문제에서 소수를 판별하는 과정에 조건을 주렁주렁 달아서 구현하는 경우가 있다. 이는 에라토스테네스의 체나 다른 여러 소수 판별법들로 간단하게 구현할 수 있기에 코드를 깔끔하고 짧게 만들어 줄 수 있다.

 

왼쪽 코드의 경우는 .을 기준으로 a를 나누고 이를 XXXX인경우 AAAA로 채우고 XX인 경우에는 BB로 채우는 식으로 되어있지만 오른쪽 코드의 경우는 replace함수를 이용해서 XXXX를 AAAA로 모두 바꾸고 XX는 BB로 모두 바꾼 후 X가 list에 남아있다면 -1 아니면 a를 출력한다. 둘 다 코드는 정답처리가 되지만, 왼쪽 코드보다는 오른쪽 코드가 훨씬 깔끔하고 보기좋다.

 

 

마지막으로 문제를 풀고나서 내가 깔끔하게 풀었다고 생각해도 다른 사람들이 제출한 코드를 읽어보기이다. BOJ의 경우에는 다수의 사람들이 소프트웨어 관련 직업 종사자이거나 전공이 컴공인 대학생들이 많다. 이런 사람들의 코드를 읽어보며 좀 더 효율적인 풀이를 찾거나 좀 더 깔끔한 코드를 찾을 수도 있다. 이는 나의 프로그래밍 실력이 느는데에도 많은 도움이 되고, 코드를 깔끔하게 짜는데 큰 도움이 된다.

728x90

댓글