본문 바로가기
웹개발지식

좋은코드란?

by flykimjiwon 2022. 7. 2.
반응형
https://www.securecoding.com/blog/good-code/

- 1.좋은코드란 무엇일까?

오늘아침에 눈뜨자마자 이 질문이 번뜩이면서 이생각부터 하면서 일어났다.

최근에 받은 질문이다. 뭔가 어디선가 얼핏 들어보기도 했고, 지나가는 얘기로더 들어본 문장이지만

내가 직접 스스로 고민을 하면서 생각해봄 경험은 없다. 그리고 솔직히 처음 들었을 때

와 좀 철학적이지 않나...? 정말 저런것까지 생각하면서 다들 코딩을하고 프로그래밍을 진행하는걸까?
(이 글을 쓰고나서 느끼는 거지만 지금은 무조건 생각해봐야 하는 주제라고 생각한다)

근데 질문하신분의 다음 설명이 조금 감명 깊었다. 잘기억은 안나지만 정말 코딩을 좋아해서, 즐겨서 하는지를 파악하시는

것 같기도 했고 혹은 협업을 위해 생각해본 경험이 있는지를 물어보는것 같았다.

저 질문을 받았을 때 잠시 고민을 해보았다. 비슷한 생각이라도 해본적이 있나?

생각해보니 프로젝트를 진행하면서 각자 자기 기능을 개발하기 바빴지 같이 협업을 진행할 때 도

"이거 내가 구현한거니까 그대로 가져다 써" 이런식으로만 서로 공유를 했던것 같다.

그러다가 지금까지 진행해본 4번의 프로젝트중 3,4번째에는 점점 모두가 볼 수 있을정도로 알아볼 수 있게

그리고 정형화 시켜서, 규칙을 지켜서 코드를 짰던 기억이있다.

깊이 생각해본적이 없지만 저런 부분 역시도 좋은 코드를 은연중에 생각해봤다고 할 수 있지 않을까?

- 2.좋은 코드란 무엇일까요?


나의 답은 이와같았다.

1) 다른 사람이 알아볼 수 있게 작성한코드, 변수이름의 규칙을 정하고 코드를 정리해주는 같은 툴을 정해
협업하기 좋게 만든 코드

2)주석을 달아가면서 유지보수 하기좋게 작성한코드

3)재사용성이 높은코드

그나마 이마저도 지금 가공해서 이정도지 아마 실제론 더 정갈하지 못하게 대답한거같다. 왜냐면 깊게 생각해보지 않았다.

그리고 저 대답도 딱 저 3가지를 고려하면서 팀원들과 협업했기 때문이다.

기능을 구현하면서 공통으로 쓰는기능, 혹은 내가 재사용하거나 유지보수를 반드시 할거같은 부분들은 이와같이

최대한 지켜가면서 코드를 짜려고 노력했다.

- 3.그럼 지금까지 내가 생각해온 좋은코드란?


1) 재사용성을 최대한 높게한다. 그리고 기능단위마다 함수로 작성하고 규칙에 맞춰 작성하는것은 당연하다.
-> 위에 3가지를 합쳐서 1개가 되었다.

2)유지보수를 고려해 작성한다.
-> 비슷한 맥락이지만 좀더 생각해보면 대부분의 코드는 프로젝트 완성까지 수십 수백번의 수정을 거쳐 완성되었다.
반드시 고려해야 하는 부분이다.
학습중이라면 나중에 참고하면서 나의 코드를 다시보기에도 좋고
현업에서라면 당연히 기능의 개선, 수정을 위해서도 중요하다.

- 4.좋은코드에 대한 글과 영상들을 찾아보았다.

- 1) 클린코드

직관적으로 판단한다.
"코드에서 나오는 나쁜 냄새를 맡는다"
뭔가 알거같다. 코드를 짜보면 누가봐도 안좋은코드는 한눈에 보인다. 그래서 내 프로젝트를 찾아봤더니...
누가봐도 안좋은 코드들이 한가득이었다.
한 파일안에 2000줄이 넘어가는코드, 컴포넌트화 하지도않고 억지로 함수를 늘려가며 내가 다시 수정하려고해도
파고파고 다시 파고들어가 내가한걸 다시 억지로 이해해가며 수정해야하는 그런 코드들이 한눈에도 안좋게 보였다.

클린코드라는 서적에서는 테스트, 리팩토링, 동시성 처리 그리고 전반적으로 잘 동작하는 코드와 유지보수가
용이한 코드까지 얘기한다고한다. 이 책은 올해안에 사서 정독 해봐야겠다.

또한 코드를 짜느것과 읽는것의 비중이 1:9 ? 즉 90%는 코드를 읽는것이 코딩업무에 대부분이라고 한다는데
정말 공감가는 항목이었다. 쉽게 가독성 이라고 단순해 보이지만 매우 중요한 부분이라고 생각한다.

그리고 주석에 관해선 나와 의견이 달랐다.
잘못된 코드는 빠르게 수정되지만, 잘못된 주석은 잘 수정하지 않는다..? 주석은 필요악이다 정말 공감이갔다.
생각을 정정해보자 주석은 자세한 설명보다는 기능의 제목 즉 요약정도로 적어야 할것같다.
프로그래머라면 제목안에 코드를 통해 기능을 알 수 있어야 한다고 생각한다. ( 이부분은 내 생각과 일치 했다.)

(간략한주석 + 좋은코드) > 좋은코드 > (장황한 주석 + 지저분한코드)

그리고 클린코드를 작성하기 위한 팁을 적어보면
1.검색이 가능한 이름을 쓴다. (나 뿐 아니라 팀원도)

2.동사로 이름짓기 (명사보다, action)
ex) userData (X) loadUserData(O)

3.함수는 무조건 단 한가지 기능만 수행하기

4.함수는 3개이하의 인수를 가지게 만들기 (추천)
->그 이상은 object로 보내기 (configuration Object)

5.Boolean값을 인수로 보내는것을 지양하자
이걸 보낸다는건 보통 if / else를 쓴다는건데 결국
함수 하나에 기능 하나 규칙을 위배하는것

6.축약어 쓰지말고 user 를 u 이런식으로
event 도 e로쓰는거 지양하기 email을 e로도

7.무엇보다 초기시점에 일단 만들더라도 꼭 마지막에
클린코드로 바꿔서 재작성하는 노력을 하도록하자

- 2) 지속 가능한 코드

1.주석 간결, 코드만으로 알 수 있게

2.사람이 이해할 수 있는 코드를 작성하자

3.단순성
함수나 메소드 클래스는 한 문장으로 설명할 수있도록
간결하게 작성하기

4.의존성이 적은코드 (과도한 의존성 경계)
-> 특정 모듈에 매우 의존하는것 지양 예를들어 특정 모듈을 잔뜩 사용해 만들다가 그 모듈이 잠시 오류가나거나
사라지게 된다면? 무너져 버리는 코드가 되어버린다.

- 5.마지막으로 모든것을 종합해 판단한 좋은 코드란?

여러 글과 영상을 살펴보고나니 공감이 가고 이해가 가는 부분이 많았다. 그래도 일부라도 내생각이 겹쳐서
막해오진 않았구나 하고 기쁘기도하고 안도감이든다.

정리해보자!

1.다시봐도 이해하기 좋은 코드
2.단순한 기능별로 구별해 만든 코드
3.명확한 의미를 지닌 변수와 함수명


내가 기존에 생각해온것과 알게된 것들을 종합해 최대한 함축시켜 보았다. 누군가가 나에게 좋은코드란 무엇이냐고
물어보면 아주 명료하게 저렇게 3가지를 말하고 자세히 말해줄 수 있을것같다.

- 참고한 자료들

반응형