Game Tech Blog

더 깔끔한 설계를 위해 읽게된 책, "코딩의 기술"을 읽은 후기 본문

경험 기록용 게시판/도서 리뷰

더 깔끔한 설계를 위해 읽게된 책, "코딩의 기술"을 읽은 후기

jonghow 2023. 2. 6. 01:55
반응형

- 제목 : C, C++ 게임 코드로 알아보는 코딩의 기술 

- 저자 / 옮긴이 : 오즈 모지하루 / 윤인성 

 

업무를 진행하다 보면, 더 효율적이고 가독성 좋은 코드를 작성하고 싶은 생각이 자주든다

좋은 도서를 찾다가 운좋게 회사 동료분께서 이 책을 가지고 있어서 잠시 빌릴 수 있었다

 

표지만 보면 되게 가벼운 내용을 다루게 생겼는데, 의외로 다 알지만 간과하고 있을만한 팁들을 알려주는 좋은 도서였다.

 

다음은 크게 읽으면서, 고민했던 부분이다. 몇몇은 아직도 왜 저렇게 해야하는가에 대한 의문이 있지만, 대부분 읽다보니 저자의 의도가 조금은 이해가 갔다. 

 

- 반복문 분할, 하나의 반복문엔 하나의 처리만 한다.

아직까지 이해가 가지 않는 부분 중, 하나이다. 반복문을 돌리면서 처리와 또 다른 연산이 필요할때, 처리를 할 수도 있다고 생각하는데, 하나의 처리만한다는게 시간 최적화 상 아무리 생각해도 비효율적인데, 이건 아직도 의문이다.

 

- 상태에 따른 분기는 다형성의 신호다.

이 부분에 대해서는 좋은 말이라고 생각한다. 상태에 따른 분기는 상속을 받거나, 추상 클래스로 이루어진 상태처리자 등을 만들어서 업데이트 수행하던가, 내부 수행을 하면 되는 부분이라 가독성이 좋게 짜기 힘든 if ,switch 같은 분기문을 읽기 편하게 만들 수 있다.

 

함수당, 하나의 기능만,

아주 좋은 말이라고 생각한다. 하나의 함수는 하나의 기능을 갖고 있는것이 맞고, 하나의 컨셉에 충실히 작동하는 것이 맞다. 연산을 하는 함수에서 변수에 대입까지 하거나, 하지 않도록 하는 것이 범용적으로 재사용하기 좋다.

 

- 작은 함수로 계속 분할하면서 작업할 시 함수 호출 오버헤드로 비효율성에 대한 의견

책을 읽으면서, 저자에 대한 생각을 해봤는데, 기능을  최소 단위로 분리하는 것을 좋아하고, 역할과 컨셉에 대해 클래스, 함수를 나누는 것에 극대화 되어있다는 생각을 했다. 

그러면서, 이 주제에 대한 논의를 했었을 것 같은데, 짧은 함수의 경우 그대로 컴파일러 단에서 인라인화로 함수를 최적화해서 넣어버린다는 내용을 학원다니면서 짧막하게 들었던 기억이 있다. 최적화 로직에 대해서 정확하게 알지는 못하지만, 이 내용에 대해서 인라인 화가 이루어진다면, 짧은 함수에 관한 함수 호출 이슈는 완전히 논파된다. 좋은 내용이라고 생각한다.

 

- 디자인 패턴의 남용을 주의 

요즘 업무를 하면서 상속, 패턴, 범용적 클래스등에 많이 신경쓰다보니까, 나 스스로도 아? 이거 이렇게 할바에 복잡하게 설계하면서 안짰지, 아, 이거 들인 시간과 나중에 사용하는 것에 비해 상당히 비효율적이다. 라는 생각이 들때가 있다.

위 내용에 대한 이점은 확실하다. 확장으로 인한 유지보수 이점이라는 크나큰 장점이 와닿지만, 만들때의 설계시간이나, 복잡성, 무분별한 클래스 생성 등이 뒤 따라오기때문에, 무조건 좋은 점은 아니라는것이다. 딱 필요할때 쓰고 아닐때 안쓰는 판단력이 중요하다고 생각한다.

 

[ 필요한 내용에 대한 정리 ]

- 함수화 패턴

함수화를 하는것에는 패턴이 있다고 한다.

1. 조건식 함수화 : if 같은 조건문이 존재시, 함수화하면 큰 고민 없이 잘 읽히는 이점이있다.

2, 계산식 함수화 : 일반적인 계산 함수를 의미.

3. 조건 분기의 내부 블록 함수화 : switch , if 와 같은 블록 내부부분을 함수화한다. 이 방법은 주로 내가 사용하는 방법이라 이해가 쉽다.

4. 반복문 함수화 : 1개의 반복문에 대해서 1개의 함수를 만든다.

5. 반복문의 블록 내부 함수화 : 3번과 같이 for, foreach 반복문에 내부 블록을 함수화한다. (가독성)

6. 데이터 변환 함수화 : enum -> 문자형 과 같이 캐스팅으로 바꾸는 부분을 함수화한다.

7. 데이터 확인 함수화 : 데이터가 어떤 데이터인지 체크하고 리턴하는 형태로 함수화한다.

8. 배열 접근 함수화 : 1,2차원 배열에 랜덤 접근하는 경우, 접근하는 함수를 따로만든다? 이해가 제대로 되지않는 부분.

9. 주석 부분 함수화 : 함수를 길게 쓰다보면 어느 부분은 '연산', '출력; 등의 주석을 쓸때가 있다. 이런 부분은 주석을 써도되나, 묶어서 함수화 하도록 하는게 가독성이 더 좋다.

 

책을 보면서, 아는 부분도 어느정도 있었고, 새롭게 알게된 부분도 다수 있었다. 함수화 패턴 전략이라던지, 클래스 설계 전략이라던지, 특히 3장의 코드 품질 측정에 있는 매트리스 측정하는 방식들에 대해 새롭게 알 수 있어서 도움되는 부분이 있었다. 책의 코드가 C++ 로 작성되어 있어, 지금은 C#을 주로 쓰는 나에게는 조금 힘겨운 부분들도 있기는 했지만, 목적에 대한 설명이 잘되어 있어 이해하는데 크게 어렵진 않았다. 다음책은 클린코드를 읽어볼텐데, 이 책에서 본 내용들이 어느정도 겹치는 부분이 있을것이라 예상된다. 이 책에서 읽은 내용이 많이 도움이 되었으면 하는 바람이 있다.

반응형
Comments