-
16. 간결하게 하기Technique/Programmer 2017. 3. 22. 22:48반응형
간결함이야말로 궁극의 정교함이다.
단순함은 의심할 여지없이 훌륭한 목표이며, 코드에서 이를 확실하게 추구해야 한다. 그 어떤 프로그래머도 과도하게 복잡한 코드로 일하고 싶어 하지 않는다. 간결한 코드는 투명하다 구조가 명확하고, 버그를 숨기지 않으며, 배우기 쉽고 작업하기도 쉽다.
간결한 코드는 설계하는 데 많은 노력이 필요하다. 다만 간결한 코드가 곧 과도하게 단순한 코드를 의미하지 않는다.
잘못되고 단세포적인 단순함이 아니라 가장 간결한 코드를 작성하기 위해 노력해야 한다 이는 생각 없이 어리석고 간결한 코드를 작성하는 것과는 완전히 다르다. 머리를 많이 써야 한다. 간결하게 만든다는 것은 엄청나게 어려운 작업이다.
간결한 설계.
1. 사용기 간편하다.
무의식 적 인지를 뜻한다. 처음에 배울 것이 별로 없는 만큼 쉽게 사용할 수 있다. 가장 간단한 방법으로 작업을 시작할 수 있고, 고도화 단계가 되면 잘 만들어진 이야기처럼 그 윤곽이 자연스럽게 드러난다.
2. 오용을 방지한다.
인터페이스를 깔끔하게 유지하고 코드 사용자에게 불필요한 부담을 가하지 않기 때문에, 코드 사용자들의 고생을 줄여준다. 간결함의 비결은 복잡한 부분을 적절한 곳에 위치시키는 것이다. 보통 간결한 API 뒤에 복잡한 부분이 숨겨져 있다.
3. 크기가 중요하다
간결한 코드는 설계에서 구성 요소의 수를 최소화 한다. 많은 가동부를 가진 큰 프로젝트는 당연히 많은 수의 구성 요소가 필요할 것이다. 하지만 많은 가동부를 가질 수 있으면서도 가능한 한 간결할 수 있다.
4. 짧은 코드 경로
간결한 설계는 우회를 줄여주고 기능과 데이터가 필요한 곳 근처에 있도록 만든다. 나아가 불필요한 상속이나 다형성, 동적 바인딩을 포함하지 않는 경우가 많다. 이러한 기술은 적절한 때에 사용된다면 모두 좋은 것이지만, 맹목적으로 적용할 경우 불필요한 복잡함을 초례한다.
5. 안전성
많은 양의 코드를 고쳐 쓰지 않고도 개선하고 확장할 수 있다는 점이다. 프로젝트가 발전하는 과정에서 끊임없이 코드의 이부를 다시 작성해야 한다면, 이는 바보 같은 단발성 요구사항이 있었거나 처음부터 설계가 간결하지 않았다는 것이다.
코드의 간결함
간결한 코드는 읽기 쉽고 이해하기 쉽다.
일관성 이야말로 간결한 코드로 이끄는 주역이다. 다양한 스타일, 명명 규칙, 설계 접근법, 그리고 파일 포맷으로 작성된 코드는 불필요한 혼란을 불러온다.
어떤 이유로든 쓸데 없이 애매한 코드를 작성하지 말자. 평범하지만 명백한 방식으로 납득할 만한 코드를 작성한다면, 코딩 스타일도 마찬가지 성격을 띠게 된다 그러면 유지 보수 하는 프로그래머들이 고마워 할 것이다.
어리석지 않게 간결하게 하자
문제를 해결해야 할 때엔 코드를 재작성하여, 오류는 수정하면서도 간결함을 유지하는 것이다. 올바른 오류 수정을 위해 몇 가지 논리를 리팩토링할 수도 있다. 심지어 코드에서 논리적으로 합당하지 않은 가정을 발견하여 심각한 재작업을 할 수도 있다. 많은 노력을 요구하지만 결국 장기적으로 코드를 가장 간결한 형태로 이끈다.
가설은 간결함을 낮출 수 있다.
가설은 은연중에 코드를 이해하기 위한 추가 정보를 요구하여 간결함을 오히려 축소시킬 수 있다
가설을 통해 간결함을 높이기 위해 확실한 방법은 정확히 어떤 가설을 세우고 있는지 명확하게 하는 것이다 코드 작성 시 고려된 제약 조건과 문맥 등이 그에 포함된다.
너무 이른 최적화를 피하자
지나치게 조급한 최적화는 프로그래밍에서 모든 악의 근원이다.
우선 명확한 코드를 작성하고 그 외에 복잡한 것은 나중에 필요하면 만들면 된다.
더 기발하게 만들 필요가 있다고 판달될 때 까지는 간결하고 표준적인 것을 사용하자 알고리즘의 가장 확실한 구현체를 작성하고, 더 빠르게 만들 필요가 있는지 성능을 측정해보자.
충분하게 간결하기
가장 간결한 방법으로 작업하고 가장 간결한 코드를 작성해야 한다. 다만 지나치게 단순하면 실제 문제를 해결 하지 못한다. 간결한 해결책은 요구사항을 충족 시켜야 하며, 그렇지 않으면 해결책이라 할 수 없다.
문제를 해결하기 위해 딱 필요한 양의 코드를 작성하자. 유용할 것이라 생각되는 대량의 코드를 작성하지 말자. 사용되지 않는 코드는 그저 짐일 뿐이다.
지나치게 복잡한 해결책을 내놓지 말자. 당장 처리해야 하는 이슈만 해결하고 요구사항을 만족시키는 정도만 작업하자.
정리
우리는 아름답고 간결한 코드가 불필요한 정도로 복잡한 코드보다 낫다는 것을 알고 있다.
슬프게도 간결함을 추구한다는 것은 꽤 힘든 작업이다. 높은 응집도와 낮은 결합도에 대한 선호는 설계에서의 간결함을 다루고 있다. 유명한 개발자들이 남긴 말들을 기억하자
YANGI( You Aren’t Going To Need It ) : 필요하지 않을 것이다.
DRY ( Don’t Repeat Yourself ) : 반복하지 말라.
사실 나쁘고 못생기고, 복잡한 코드를 일부러 작성하는 사람은 많지 않다. 복잡함으로 가는 길은 보통 급히 수정하고 표준을 빠뜨리는 과정에서 비롯된다. 그저 하나의 느슨한 변화, 하나의 반창고 수정, 하나의 코드 리뷰 생략, 하나의 어쩔 수 없는 상황들이 전개되고 난 후에 코드는 무서운 혼란에 빠지고 온전하게 복구하는 방법을 찾기 어려워진다.
절대 무서워 하지 말고 작은 것들이라도 하나씩 실천해 나가려 노력해야 한다.
반응형'Technique > Programmer' 카테고리의 다른 글
18. 변하지 않는 것은 없다. (0) 2017.03.26 17. 머리 쓰기 (0) 2017.03.26 15. 규칙 가지고 놀기 (0) 2017.03.21 13. 소프트웨어 설계에 대한 이야기 (0) 2017.03.19 기술 부채 (0) 2017.03.19