밤에 쓴 코드

Clean Code) 형식 맞추기 본문

Clean Code

Clean Code) 형식 맞추기

붱이🦉 2019. 6. 8. 20:53

형식맞추기


코드형식의사소통형식이다.

가독성 수준유지보수 용이성과 확장성에 밀접하게 영향을 준다.

코드는 일차적으로 구현을 생각하고 , 기능이 수행되는 것에 만족해왔었다.

그 이유중 하나는 왜 깨끗하게 코드를 짜야할까? 의문을 가져본 적이 없었고, 그 이유를 몰랐었다.

왜냐면 난 학생이었고, 언제나 혼자 소프트웨어를 개발해왔었으며, 한번 완성된 소프트웨어에 기능을 수정하고, 기능을 추가하는 등,

변경되는 요구사항에 대해서 소프트웨어를 지속적으로 수정해 본 적이 없었다.

깨끗한 코드 ? 좋다는 건 알겠다. 깨끗한 코드 그게 기능구현의 중요성에 비해 노력을 투자할 가치가 많이 있는가? 를 항상 의심해왔다.

우리가 사용하는 소프트웨어는 대부분 단 한명의 개발자가 완성하지 않고, 많은 유능한 개발자들이 함께 만들어간다.

또 지속적인 기능의 추가, 수정도 불가피하다.

같이 소프트웨어를 만들어가는 개발자들에게 자신의 코드를 보여줘야한다.

내가 만든 코드를 같이 협업하는 개발자에게 라이브러리형태로 배포한다고 생각을 하자.

또, 내가 한 직장에서 평생을 바치지 않는 한 , 내가 작성하는 코드는 다른 누군가가 유지보수해야 할 것이다.

그런 과정에서 , 코드를 명확하게 남들도 읽을 수 있게 작성해야한다.

그러기위해선 시간이 지난 후에도 읽기 좋고, 이해 할 수 있는 코드를 작성하는 데에 힘을 써야할 것이다.

그러기위해서 가장 좋은 방법은 규칙을 정하고 지키는 것이다.

적절한 행의 길이를 지키자.

파일은 길면 길수록 가독성을 해친다.

또 파일은 하나의 네임스페이스이다.

이 네임스페이스안에 존재하는 코드들은 이 네임스페이스와 밀접하게 연관이 있게 두어야한다.

그렇지 않다면 파일의 분리를 고려해보자.

신문기사처럼 작성하자.

신문기사 처럼 작성하라는 것은 위에는 핵심을 정리해서 요약한 코드를 작성하고

타고타고 내려가면서 더 구체적인 코드를 작성하라는 것이다.

Clean Code 함수 포스트에서의 동일한 추상화 수준을 유지하며, 한단계 한단계 추상화 수준을 낮추는 방법과 유사한 방식이다.

샌드위치를 주문하는 방법 🥙
 1. 빵을 고르자 🥖
 2. 치즈를 고르자 🧀
 3. 토핑을 고르자 🍳 🥓 🍗 
 4. 야채를 고르자 🥑 🥦 🥬 🥕 🌽
 5. 음료를 고르자 🥤 🍺 🥛
 6. 테이크아웃을 고르자 🙆‍♂️🙅‍♀️

이 처럼 첫 문장은 밑에 많은 문장들을 추상화하고, 요약해서 표현하고있다.

이것은 단순한 예이지만 더 많은 작은 절차들을 통해 수행되는 것을 표현할 때는 더 와 닿을 수 있을 것이다.

개행을 적절히 이용하자.

코드의 블럭은 하나의 문제이고, 하나의 생각이다.

그말은 즉 하나의 블럭으로 묶어두면 , 하나의 생각으로 인식될 것이라는 것이다.

 func 빵고르기 🥖()
 func 치즈고르기🧀()
 func 토핑고르기 🍳 🥓 🍗 ()

 func 야채고르기 🥑 🥦 🥬 🥕 🌽()
 func 음료고르기 🥤 🍺 🥛()
 func 테이크아웃고르기 🙆‍♂️🙅‍♀️()

여기 뜬금 없이 중간에 개행이 있었다.

어때보이는가? 위의 3가지 동작과 밑의 3가지 동작을 각각 덩어리로 묶은 것처럼 보여진다.

나는 왜 이 두덩어리로 나누었는지 너무 궁금하다. 왜냐면 의도가 숨어있을 테니까

저 3개의 메소드는 서로 연관이 밀접하게 있고, 밑에 3개도 서로 연관이 있을거니까

하지만 아무의도없는 개행이다.

의도하지않은 개행은 이 코드를 보는 사람에게 혼란을 줄 수 있다.

"개행이 가지는 의미를 생각해보자''

함수의 순서를 올바르게 작성하자

이번에는 계란후라이를 만들거다.

func 계란깨기(🔨)
func 플레이팅하기(🍽)
func 후라이팬달구기(🔥)
func 계란후라이만들기() -> 🍳 {
              후라이팬달구기(🔥)
               계란깨기(🔨)
                 계란넣기(🥚) 
              소금치기(🧂)
                플레이팅하기(🍽)
                return 🍳
}
func 소금치기(🧂)
func 계란넣기(🥚) 

순서가 뒤죽 박죽인 파일이다.

func 계란후라이만들기() -> 🍳 {
              후라이팬달구기(🔥)
               계란깨기(🔨)
                 계란넣기(🥚) 
              소금치기(🧂)
                플레이팅하기(🍽)
                return 🍳
}
func 후라이팬달구기(🔥)
func 계란깨기(🔨)
func 계란넣기(🥚) 
func 소금치기(🧂)
func 플레이팅하기(🍽)

뭐가 더 읽기 좋을 지는 뻔하다.

밑에 코드를 보면 신문기사처럼 밑에 동작들을 한마디로 표현하는 계란후라이만들기 로 요약해서 표현했고,

종속된 함수들을 아래로 순서대로 나열하였다.

  • 종속된 함수를 밑으로 순서대로 작성하자

공백을 적절히 사용하자.

공백의 유무는 얼마나 더 연관되어 있는 지 이다.

func◽️토핑넣기(first:🥑,◽️second:🍳,◽️third:🥓)◽️->◽️🥙

공백을 '◽️' 표현 하겠다.
여기서 공백을 보자 메소드이름메소드인수를 담는 괄호사이에는 공백이 존재하지 않는다.

왜냐면 둘은 밀접하게 연관이 있기 떄문이다.

또 각각의 매개변수1,2,3 에 대해서는 공백이 존재한다. 이들은 토핑넣기 메소드에 필요한 인수이지만 , 각각은 밀접하게 연관되어 있지않다.

이렇게 공백을 사용하는 데에 있어서 어떤 의도를 표현하기위해 사용할 것인지 확실한 의도를 표현하기 위해서 개행,공백을 적절히 사용해야 되곘다.

'Clean Code' 카테고리의 다른 글

Clean Code) 단위테스트  (0) 2019.07.10
Clean Code ) 객체와 자료구조  (0) 2019.06.23
Clean Code) 주석  (0) 2019.06.08
Clean Code) 함수  (0) 2019.05.02
Clean Code) 의미있는 이름  (0) 2019.04.21
Comments