모든 엔티티를 작게 유지한다. 이 규칙이 가지는 의미 이 말은 50줄 이상 되는 클래스와 10개 파일 이상 되는 패키지는 없어야 한다는 뜻이다. 이 규칙을 책에서는 위와 같이 설명했다. 이 말은 어느 정도 공감하지만 실제로 만들어지는 응용 소프트웨어에서도 가능한가?라고 했을 때의 답은 잘 모르겠다. 하다못해 어떤 객체에 기능이 5줄짜리인 메서드가 10개만 있어도 이 객체에는 더 이상 기능을 추가하기 어렵다. 말이 10개의 메서드이지 객체를 만들다 보면 10개의 기능은 금방 추가된다. 여기서 공감할 수 있는 부분은 객체가 가진 코드 줄의 수가 100줄만 이상만 돼도 그 객체가 무슨 행동을 하는지 파악하기가 어려운 것은 사실이다. 또한 패키지도 객체처럼 응집력이 있고 단일한 목표가 있어야 한다고 말한다. 이..
줄여쓰지 않는다. (축약 금지) 이 규칙이 가지는 의미 int numCnt = 4; for(int i = 0; i < list.size(); i++) { ... } String btnText = "hello world"; 프로그래밍을 하다 보면 자주 보게 되는 변수명들이 있는데 생각이 나는 대로 적어보면 다음과 같다. 코드를 작성하다 보면 클래스명이나 메서드명 아니면 변수 명의 이름을 줄여서 쓰고 싶은 욕구를 느끼게 된다. 그 이유는 주로 이곳저곳에서 값들을 가져와서 사용하다 보면 구분을 짓기 위해 접두사를 사용하게 되는데 그 접두사를 이어 붙이다 보면 이름의 길이가 길어져서 한글 자라도 줄이고자 count는 cnt, index는 i, button은 btn 같이 이름을 함축적으로 줄여 쓰게 된다. 또한 ..
Photo by Xiaofen P on Unsplash 한 줄에 점 하나만 찍는다. "한 줄에 한 점만 사용"이라는 규칙은 코드를 작성할 때 한 줄(Line)에 "." 하나만 사용하자는 이야기입니다. 단순하게 코드 한 라인에 "." 하나를 사용하는 규칙을 적용하면 코드의 가독성이 좋아집니다. 간단하게 예를 들면 자바에서 람다식을 무자비하게 사용한 코드들에 "한 줄에 한 점만 사용" 이 규칙을 적용하면 코드를 이해하기 쉬워집니다. 하지만 "한 줄에 한 점만 사용" 규칙은 디미터의 법칙이 말하는 "Don't talk to stranger"(낯선 사람과 대화하지 마라), 바꿔 말하면 친구 하고만 말을 하라는 의미도 가지고 있습니다. 일반적으로 한 줄에서 "."이 하나 이상인 경우에는 한 가지 이상의 일을 하고..
Photo by Viktor Forgacs on Unsplash 모든 원시값과 문자열을 포장(Wrap)한다. 이 규칙이 가지는 의미 "int 값 하나 자체는 그냥 아무 의미 없는 스칼라 값일 뿐이다" 책에서는 이 문장을 시작으로 규칙을 설명합니다. 일반적으로 프로그래밍에서 쓰이는 원시값들은 값(리터럴)의 정의만 가질 뿐 별 다른 의미를 지니지 못합니다. 값이 값 이상의 의미를 가진다는 것은 어쩌면 이상한 이야기 일지 모릅니다. 다만 원시적인 값을 포장(Wrap)을 통해 이름을 가질 수 있게 하면 어떨까요? 이름을 가진다는 것은 사소할지 모르지만 프로그래머에게는 의미를 전달합니다. 즉 프로그래밍에서 객체가 이름을 가진다는 것은 어떤 것을 표현하는지 왜 쓰이고 있는지에 대한 정보를 말한다고 이야기할 수 있습..
else 예약어(keyword)를 쓰지 않는다. 이 규칙이 가지는 의미 일반적으로 개발자라면 if/else 구문을 쉽게 이해할 수 있습니다. 구문 자체가 조건을 나타내는 동시에 간단하기 때문입니다. 그렇다 보니 개발자는 쉽게 Callback hell처럼 보이는 반복되는 중첩 조건문이나 무수히 많은 switch/case 구문을 마주하게 됩니다. 신규 기능이 추가되거나 수정사항이 발생하면 기존의 코드를 리팩터링 하기보다는 분기하는 조건문을 넣는 게 쉽기 때문입니다. 결국 if/else, switch/case와 같은 분기 구문은 안 좋은 코드를 양산하기 쉬워집니다. "else 예약어 금지" 규칙은 단순히 if/else 만 사용하지 않는 것이 아니라 switch/case 구문을 포함한 분기 구문을 사용하지 않게..
Photo by Nick Fewings on Unsplash 한 메서드에 오직 한 단계의 들여쓰기만 한다. 이 규칙이 가지는 의미 이 규칙은 언뜻 보기에는 들여쓰기(indent)에 초점을 두고 있는 것처럼 보입니다. 실제로 내용 자체도 "들여쓰기"의 단계를 제한한다고 정의하고 있습니다. 그렇지만 이 규칙을 적용하다 보면 자연스럽게 만나는 핵심은 "하나의 단락(block)이 한 가지의 일"을 하려고 노력했느냐입니다. 반대로 말하면 들여쓰기가 한번 이상 적용된 단락 즉 중첩된 제어 구조가 있다면 이 단락은 한 가지 이상의 일을 하고 있음을 증명하는 셈이 되어 버립니다. 그렇기 때문에 "메서드당 들여쓰기 한 번"이라는 규칙은 메서드가 가지는 구문 중 한 단락에서는 한 가지의 일만 수행하게 만듦으로써 메서드의 ..
객체지향 생활 체조 규칙 알아보기 소프트웍스 앤솔러지 책 내용 중에는 10장 내외로 짧은 내용이지만 따라 하다 보면 자연스럽게 객체지향적인 코드를 작성할 수 있는 좋은 규칙이 있습니다. 책에서는 이 내용을 "객체지향 생활 체조"라는 주제로 다루고 있는데 그 규칙은 총 9가지로 제안하고 있고 나열하면 다음과 같습니다. 한 메서드에 오직 한 단계의 들여 쓰기만 한다. else 예약어(keyword)를 쓰지 않는다. 모든 원시 값과 문자열을 포장(wrap)한다. 한 줄에 점을 하나만 찍는다. 줄여 쓰지 않는다(축약 금지). 모든 엔티티(entity)를 작게 유지한다. 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. 제일 클래스(first-class) 컬렉션을 쓴다. 게터getter/세터setter/프..