본문 바로가기

개발/클린 코드

클린 코드 7장 - 오류 처리 오류 처리는 프로그램에 반드시 필요한 요소 중 하나일 뿐이다. 뭔가 잘못될 가능성은 늘 존재한다. 뭔가 잘못되면 바로 잡을 책임은 바로 우리 프로그래머에게 있다. 오류 처리는 중요하다. 하지만 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. 우아하고 고상하게 오류를 처리하는 기법과 고려 사항 몇 가지를 소개한다. 오류 코드보다 예외를 사용하라 예외를 지원하지 않는 언어는 오류를 처리하고 보고하는 방법이 제한적이었다. 오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 방법이 전부였다. 이러한 방법은 호출자 코드가 복잡해진다. 함수를 호출한 즉시 오류를 확인해야 하기 때문이다. 잊어버리기 쉽다. 그래서 오류가 발생하면 예외를 던지는 편이 낫다. 개념(로직)과.. 더보기
클린코드 6장 - 객체와 자료 구조 변수를 비공개(private)로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서다. 충동이든 변덕이든, 변수 타입이나 구현을 맘대로 바꾸고 싶어서다. 그렇다면 어째서 수많은 프로그래머가 조회(get) 함수와 설정(set) 함수를 당연하게 공개해 비공개 변수를 외부에 노출할까? 자료 추상화 목록 6-1과 목록 6-2에서 차이를 살펴보자. 두 클래스 모두 2차원 점을 표현한다. 그런데 한 클래스는 구현을 외부로 노출하고 다른 클래스는 구현을 완전히 숨긴다. public class Point { public double x; public double y; } public interface Point { double getX(); double getY(); void setCartesian(do.. 더보기
클린코드 5장 - 형식 맞추기 뚜껑을 열었을 때 독자들이 코드가 깔끔하고, 일관적이며, 꼼꼼하다고 감탄하면 좋겠다. 질서 정연하다고 탄복하면 좋겠다. 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. 형식을 맞추는 목적 코드 형식은 중요하다! 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다. 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 원래 코드는 사라질지라도 개발.. 더보기
클린코드 4장 - 주석 나쁜 코드에 주석을 달지 마라. 새로 짜라. - 브라이언 W. 커니핸, P.J. 플라우거 잘 달린 주석은 그 어떤 정보보다 유용하다. 경솔하고 근거 없는 주석은 코드를 이해하기 어렵게 만든다. 오래되고 조잡한 주석은 거짓과 잘못된 정보를 퍼뜨려 해악을 미친다. 주석은 '순수하게 선하지' 못하다. 기껏해야 필요악이다. 우리는 코드로 의도를 표현하지 못해, 실패를 만회하기 위해 주석을 사용한다. 때때로 주석 없이는 자신을 표현할 방법을 찾지 못해 할 수 없이 주석을 사용한다. 그러므로 주석이 필요한 상황에 처하면 곰곰이 생각하기 바란다. 상황을 역전해 코드로 의도를 표현할 방법은 없을까? 주석을 무시하는 이유는, 거짓말을 해서다. 항상도 아니고 고의도 아니지만 너무 자주 거짓말을 하니까. 주석은 오래될수록 .. 더보기
클린코드 3장 - 함수 이전의 프로그래밍에서는 시스템이 루틴, 하위루틴, 혹은 포트란과 PL/1 시절에는 프로그램, 하위 프로그램, 함수로 나눴다. 결국 지금은 함수만 살아남았다. 어떤 프로그램이든 가장 기본적인 단위가 함수가 되었다. 이 장은 함수를 만드는 법을 소개한다. 이 책에서 보여주고있는 목록3-1 코드는, 길이가 길고, 중복된 코드에, 괴상한 문자열에, 낯설고 모호한 자료 유형과 API로 이루어져 있다. 이러한 코드를 3-2에서는 리팩토링하여서 보여주고 있다. 이로써 목록 3-1에서는 파악하기 어려웠던 정보가 목록 3-2에서는 쉽게 드러난다. 그렇다면 목록 3-2 함수가 읽기 쉽고 이해하기 쉬운 이유는 무엇일까? 의도를 분명히 표현하는 함수를 어떻게 구현할 수 있을까? 함수에 어떤 속성을 부여해야 처음 읽는 사람이 .. 더보기
클린코드 2장 - 의미 있는 이름 들어가면서 이름을 잘 짓는 간단한 규칙을 몇 가지 소개한다 의도를 분명히 밝혀라 의도가 분명한 이름이 정말로 중요하다는 사실을 거듭 강조한다. 이름을 주의 깊게 살펴 더 나은 이름이 떠오르면 개선하기 바란다. 변수(혹은 함수나 클래스)의 존재 이유는? 수행 기능은? 사용 방법은? 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다. int d; // 경과 시간 (단위 : 날짜 ) 경과 시간이나 날짜라는 느낌이 안 든다. int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification; int fileAgeInDays; 위와 같이 의도가 드러나는 이름을 사용하면 코드 이해와 변경이 쉬워진다. public List getThem() .. 더보기
클린코드 1장 - 깨끗한 코드 코드가 존재하리라 코드는 사라지지 않는다. 코드를 자동으로 생성하는 시대가 오더라도, 고도로 추상화된 언어나 특정 응용 분야 언어로 기술하는 '명세' 역시 코드니까. 궁극적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심하자. 나쁜 코드 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다. 나중은 결코 오지 않는다 나쁜 코드로 치르는 대가 나쁜 코드는 개발 속도를 크게 떨어뜨린다. 초반에는 번개처럼 나가다가, 1-2년만에 굼뱅이처럼 기어가는 팀도 많다. 시간을 들여 깨끗한 .. 더보기
클린코드 정리를 시작하며.. 최근에, 회사에서 스터디를 시작했다. 더 좋은 개발자가 되기 위한 한 걸음. 우선 클린코드를 스터디하기로 하였다. 거의 개발자들의 필독서로 불리우는, 클린코드. 몇번 읽다가 중도하차했었는데, 이번에는 제대로 읽어보는 기회가 될 것 같다. 블로그에, 기록을 위하여 정리를 하려고한다. 남들처럼, 상세하게 정리를 하기보다, 날 것으로 느낀바를 그대로 적어가며 정리해보려한다. 블로그의 최우선의 독자는 스스로니까. 더보기