일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 의도
- Swfit
- 협업
- 클린소프트웨어
- 개발자
- iOS프로그래밍
- IOS
- 함수형패러다임
- 고차함수
- 의존성
- protocol
- 네이밍
- 아이폰프로그래밍
- 부스트코스
- POP
- Solid
- 개발
- OOP
- interface
- CleanCode
- 문법
- fp
- 함수형프로그래밍
- 디자인패턴
- DesignPattern
- SWIFT
- 객체지향프로그래밍
- 인터페이스
- 클린코드
- 이름
- Today
- Total
밤에 쓴 코드
Clean Code) 형식 맞추기 본문
형식맞추기
코드형식은 의사소통형식이다.
가독성 수준은 유지보수 용이성과 확장성에 밀접하게 영향을 준다.
코드는 일차적으로 구현을 생각하고 , 기능이 수행되는 것에 만족해왔었다.
그 이유중 하나는 왜 깨끗하게 코드를 짜야할까? 의문을 가져본 적이 없었고, 그 이유를 몰랐었다.
왜냐면 난 학생이었고, 언제나 혼자 소프트웨어를 개발해왔었으며, 한번 완성된 소프트웨어에 기능을 수정하고, 기능을 추가하는 등,
변경되는 요구사항에 대해서 소프트웨어를 지속적으로 수정해 본 적이 없었다.
깨끗한 코드 ? 좋다는 건 알겠다. 깨끗한 코드 그게 기능구현의 중요성에 비해 노력을 투자할 가치가 많이 있는가? 를 항상 의심해왔다.
우리가 사용하는 소프트웨어는 대부분 단 한명의 개발자가 완성하지 않고, 많은 유능한 개발자들이 함께 만들어간다.
또 지속적인 기능의 추가, 수정도 불가피하다.
같이 소프트웨어를 만들어가는 개발자들에게 자신의 코드를 보여줘야한다.
내가 만든 코드를 같이 협업하는 개발자에게 라이브러리형태로 배포한다고 생각을 하자.
또, 내가 한 직장에서 평생을 바치지 않는 한 , 내가 작성하는 코드는 다른 누군가가 유지보수해야 할 것이다.
그런 과정에서 , 코드를 명확하게 남들도 읽을 수 있게 작성해야한다.
그러기위해선 시간이 지난 후에도 읽기 좋고, 이해 할 수 있는 코드를 작성하는 데에 힘을 써야할 것이다.
그러기위해서 가장 좋은 방법은 규칙을 정하고 지키는 것이다.
적절한 행의 길이를 지키자.
파일은 길면 길수록 가독성을 해친다.
또 파일은 하나의 네임스페이스이다.
이 네임스페이스안에 존재하는 코드들은 이 네임스페이스와 밀접하게 연관이 있게 두어야한다.
그렇지 않다면 파일의 분리를 고려해보자.
신문기사처럼 작성하자.
신문기사 처럼 작성하라는 것은 위에는 핵심을 정리해서 요약한 코드를 작성하고
타고타고 내려가면서 더 구체적인 코드를 작성하라는 것이다.
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 |