728x90
반응형
형식
소스를 보았을 때 코드가 깔끔하고 일관적이며 꼼꼼하며 질서정연하다고 생각되면 좋겠다.
술 취한 사람이 짜놓은 듯한 코드로 보인다면 코드를 보는 사람은 다른 부분도 그렇다고 생각 할 것이다.
개인적으로 스파게티처럼 작성된 소스는 유지보수할때 나도 스파게티를 만든는 경향이 있는데 비교적 잘 짜여졌다고 생각되는 부분을 고칠때는 나도 조심하여 일관성 있게 코드를 작성 할려고 하는 것 같다.
프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다.
팀마다 형식을 맞추고 규칙을 정하며 규칙을 따라야 한다.
필요하다면 형식을 적용하는 도구를 활용해도 된다.
jetbranin 제품을 사용한다면 코드 양식을 1명이 수정한 다음
config 파일 공유해도 괜찮지 않을까? 싶다.
#
형식을 맞추는 목적
누군가 "돌아가기만 하면 된다" 이런 말을 한다면 옥수수 수확해도 인정한다.
구현한 코드는 미래의 유지보수와 가독성에 거대한 영향을 미칠 것이다.
맨 처음 구현한 코드의 유지보수 용이성과 확장성이 엉망으로 짜있었고
여기에 더불어 리팩토링을 하지 않고 계속 유지보수를 추가 했다면 끔찍할 것이다.
리뉴얼 하지 않은 옛날 프로젝트가 이런식으로 짜여 있다...
힘들다...
#
적절한 라인수를 유지하라
Junit, FitNesse 프로젝트는 500줄을 넘어가는 파일이 없고
대다수가 200줄 미만이다. 라인수를 적게 가져간다고 프로젝트 개발을
못하는 것이 아니다.
반드시 지킬 엄격한 규칙은 아니지만 바람직한 규칙이다.
일반적으로 라인수가 많은 것보다는 적은 게 이해하기 쉬우니까 말이다.
#
밀집도
서로 밀접한 코드행은 세로로 가까이 놓게 하고
개념적으로 유사한 코드는 가까이 배치한다.
또한 종속 함수도 서로 가까이 배친한다.
일반적으로 세로 순서는 고차원 -> 저차원 순으로 하는게 이상적이다.
이를 통해 소스를 볼때 위부터 읽고 이는 첫번째 함수만 읽어도 무엇을 하는 기능인지 파악하기 쉬워진다.
변경 전
type Something struct {
some string
thing string
}
func NewSomething(some string, thing string) *Something {
s := Something{
some: some,
thing: thing,
}
return &s
}
func ThingThingThing(s *Something) {
for i := 0; i < 3; i++ {
fmt.Println(s.Thing())
}
}
func (s *Something) DoThing() {
fmt.Println("Do " + s.thing)
}
func (s *Something) Some() string {
return s.some
}
func (s *Something) Thing() string {
return s.thing
}
func (s *Something) DoAnyThing() {
fmt.Println("Do Any " + s.thing)
}
변경 후
get 은 위로 thing 메소드는 서로 가깝게 배치 하였고 종속함수 또한 그렇게 하였다.
type Something struct {
some string
thing string
}
func NewSomething(some string, thing string) *Something {
s := Something{
some: some,
thing: thing,
}
return &s
}
func (s *Something) Some() string {
return s.some
}
func (s *Something) Thing() string {
return s.thing
}
func (s *Something) DoThing() {
fmt.Println("Do " + s.thing)
}
func (s *Something) DoAnyThing() {
ThingThingThing(s)
}
func ThingThingThing(s *Something) {
for i := 0; i < 3; i++ {
fmt.Println(s.Thing())
}
}
728x90
반응형
'IT > Clean Code' 카테고리의 다른 글
[Clean Code] 6-2 객체지향 절차지향 2 (0) | 2021.09.06 |
---|---|
[Clean Code] 6-1 객체지향 절차지향 (0) | 2021.09.06 |
[Clean Code] 4-1 주석 (0) | 2021.09.06 |
[Clean Code] 3-2 Functions (0) | 2021.09.06 |
[Clean Code] 3-1 Parameter (0) | 2021.08.18 |