공부/알고리즘 공부

종만북 3단원 코딩과 디버깅 내용 정리

냥냥냥냥냥냥 2022. 6. 10. 02:05

안녕하세요 개발자 도도 입니다

종만북 1회독 해보기 세 번째 시간입니다 ㅎㅎ

 

이번 시간에는 3단원 내용을 정리해볼까 합니다 

시작해보겠습니다!

 

3단원의 내용도 마찬가지로 실질적인 알고리즘 해결이라기 보단 원론적에 가까운 내용이었습니다

 

 

 

좋은 코드를 짜기 위한 원칙


일반적으로 알고리즘 시험 혹은 대회들에서 사용 되는 코드들은 기존에 쓰던 여러 알고리즘 들의 복붙 형태 혹은 스파게티 코드라고 생각 할 수 있으나, 오히려 간결하고 숙련된 코드가 많다고 합니다

그런 스파게티 코드들이 결정적인 실수를 하게 만드는 요인이니 어쩌면 당연하다고도 할 수 있겠네요

현업에서도 마찬가지겠지만, 코딩 대회 혹은 시험을 대비한 상황에서도 좋은 코드를 짜는 건 필수 일 것입니다

 

 

 

 

1) 간결한 코드를 짜기

코드가 간결하면 할 수록 휴먼에러가 적은 건 사실 입니다. 물론 아닌 경우도 있겠지만 코드 숫자가 길 수록 예기치 않은 버그가 생길 수 있으니 되도록 간결하게 하는 것이 좋습니다

 

종만북에서 사용한 예시는 c언어 류에서 사용할 수 있는 매크로나, 전역 변수 사용 등을 제시했습니다

 

 

 

2) 코드를 적극적으로 재사용 하기

코드 부분이 재반복되는 부분이 많다면 모듈화를 하여 한 메서드에서 처리하도록 하는 것이 좋습니다

반복되는 부분을 복붙을 한다고 해도, 해당 로직을 수정을 해야하는 경우에는 그 반복되는 부분을 모두 수정을 해줘야하는 단점이 있을 수 있기 때문에 (꼭 이런 경우에 수정이 되어도 빠뜨리고 수정을 안해줘서 문제가 발생하더라고요) 모듈화는 필수 입니다. 대회는 시간이 생명이니 아주 촘촘하게 모듈화를 하진 못하겠지만 되도록이면 하는 것이 좋다고 합니다

 

 

 

 

3) 표준 라이브러리 공부하기

사실 이미 프레임워크 단 즉 라이브러리에 자료 구조들이 이미 구현 되어 있습니다 그 자료구조들은 이미 충분히 검증을 받았기 때문에 걱정을 안하고 쓸 수 있기 때문에 (물론 100% safe 한건 아니겠지만) 이미 구현된 라이브러리를 활용하는 것이 좋습니다. 연습 때에는 자료 구조를 직접 구현 해보는 게 원리 파악이나 공부에 도움이 되겠지만 실제 시험, 대회에서는 있는 것을 쓰는 것이 안전하고 특히 여러 명과 함께 대회를 준비 하거나 출전 하는 경우에는 라이브러리 사용은 필수 라고 합니다

 

 

 

4) 항상 같은 형태로 프로그램을 작성하기

연습은 많은 알고리즘, 다양한 자료구조 등을 사용하는 것이 당연히 좋겠지만 실제 실전에는 손에 익은 그리고 구현 방법의 통일이 필요합니다 그래야 문제가 생겼을 때 디버깅도 용이하고 또 내가 짠 코드를 분석을 해야하는 불상사를 줄이기 위해서겠죠

 

 

 

5) 일관적이고 명료한 명명법 사용하기

현업에서도 많이 느끼는 거지만, 메서드 변수의 네이밍은 정말 중요합니다

굳이 그 메서드를 까보지 않아도, 메서드 명, 변수명 만 봐도 이 메서드, 변수가 어떤 것을 의미하는 지 알 수 있도록 하는 것이 너무 좋은데 사실 저도 늘 네이밍 때문에 고민을 젤 많이 하는 것 같긴 합니다 ㅎㅎ

 

 

 

6) 모든 자료를 정규화 해서 저장하기

데이터를 저장할 때도 정규화를 하는 것이 중요합니다

종만북에서의 예시는 각도 (360도 이하로 표현 등), 유리수의 기약분수 표현 등을 예시로 들었습니다

자료구조에 저장하기 전에 정규화를 해놓고 저장을 해야 2/3 4/6이 사실 같은 값인데 다른 값이라고 인식하여 두 상수가 다르다라고 판단하지 않겠죠?

 

 

 

7) 코드와 데이터 분리하기

이 부분도 중요한 것 같은데 사실 코딩을 할 때도 코드와 데이터를 다 때려 넣은 하나의 큰 뭉치 메서드로 만들어 버리게 되면 디버깅도 힘들고 해당 메서드를 해석하는 시간도 꽤 걸립니다

따라서 그 두 부분을 분리해놓는 것이 필요합니다 (예를 들어 static 변수는 따로 list로 선언을 해둔다던가 하는 방식)

 

 

 

 

여기까지 일단 3단원의 좋은 코드를 짜기 위한 원칙을 한 번 쭉 정리해봤습니다

 감사합니다