개발 중 외부 코드를 사용할 일이 흔하게 있다. 이번 장에선 외부 코드와 우리 코드 사이의 경계를 깔끔하게 처리하는 기법을 소개한다. 경계 인터페이스를 떠돌게 하지 마라외부 코드인 경계 인터페이스를 여기저기 떠돌게 하는 건 다음과 같은 위험 요소가 존재한다. 경계 인터페이스를 받은 도메인에서 우리의 의도와 다르게 해당 인터페이스를 사용할 수 있다. 따라서, 경계 인터페이스를 다른 클래스로 노출하지 않도록 주의해야 한다. 학습 테스트외부 라이브러리를 가져왔으나 사용법을 잘 모르는 경우가 많다. 우리는 외부 라이브러리를 사용하는데 초점을 맞추기 때문에, 저자는 학습 테스트라는 방법을 제시한다.비즈니스 로직을 바로 작성하는 것이 아니라, 간단한 테스트 케이스를 작성해 외부 코드를 익히는 것이다.프로그램에서..
clean code
오류 코드보다 예외를 사용하라오류 코드의 단점함수를 호출한 즉시 오류 확인을 해야 함 ➡️ 오류 처리를 놓치기 쉬움코드의 가독성 저하오류와 정상 결과값 구분이 모호함오류의 상세 정보 전달이 어려움예외의 장점비즈니스 로직과 오류 처리 코드를 명확히 분리 가능예외에 오류 메세지를 담을 수 있어 풍부한 오류 정보 제공코드의 가독성 증가Try-Catch-Finally 문부터 작성하라예외가 발생할 코드를 작성할 때, try-catch-finally 문으로 시작하면 좋다. ➡️ try 블록에서 무슨 일이 생기든지 호출자가 기대하는 상태를 정의하기 쉬어지기 때문이다. 단위 테스트단위 테스트를 진행할 때, 아래의 순서로 진행해 보자. 강제로 예외를 일으키는 테스트 케이스를 작성테스트를 통과하게 코드를 작성자연스럽게 ..
이 파트를 읽고 머리를 한 대 맞은 듯 싶었다. 모든 클래스에 getter, setter를 습관적으로 사용하는 개발자들이 읽었으면 좋겠다.객체 vs 자료 구조객체는 동작을 공개하고 자료를 숨긴다.자료 구조는 별다른 동작 없이 자료를 노출한다. getter, setter객체에서 getter, setter함수를 제공한다면 구현을 외부에 노출하는 걸까? 노출하지 않는 걸까?정답은 '노출한다'이다. 객체의 멤버 변수 자체에 접근 하는 것은 아니지만, 객체의 변수엔 무엇이 있는지를 외부로 노출한다. 따라서, 구현을 외부로 노출하는 셈이다. 무지성 getter, setter는 나쁘다. 💡 구현을 숨기려면, 추상 인터페이스를 제공해 사용자가 구현을 모른 채 변수의 핵심을 조작할 수 있어야 한다. ➡️ 추상적인 ..
가독성과 팀의 규칙을 중요시한 파트 ➡️ 코드의 형식은 유연하게 상황에 맞게 작성하라.적절한 행 길이를 유지하라500줄을 넘기지 않고 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다.'200줄 내외로 코드를 작성한다'를 바람직한 규칙으로 삼아라.신문 기사처럼 작성하라모듈의 이름만 보고 올바른 모듈인지 아닌지를 판단할 수 있을 정도로 작성하라. 모듈의 이름은 신문 기사의 표제다.소스 코드의 첫 부분은 높은 추상화 수준으로, 아래로 내려갈수록 낮은 추상화 수준으로 의도를 세세하게 묘사하자.개념은 빈 행으로 분리하라빈 행은 새로운 개념을 시작한다는 시각적 단서다.세로 밀집도세로 밀집도는 연관성을 의미한다. 여기서 연관성이란 한 개념을 이해하는 데 다른 개념이 중요한 정도이다.서로 밀접한 개념은..

함수는 프로그램의 가장 기본적인 단위이다.작게 만들어라모두가 함수를 작게 만들어야 한다고 말한다. 어떻게 함수를 작게 만들어야 할까? ✅ if, else 문/ while 문 등에 들어가는 블록은 한 줄이어야 한다. ➡️ 거기서 함수를 호출한 가지만 해라!함수가 한 가지 작업만 하는지 확인하려면 아래 조건을 확인해야 한다. 추상화 수준이 하나인 단계만 수행한다. 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 없다.추상화 수준이란 정확히 무슨 의미일까? 추상화 수준추상화 수준은 "코드가 '무엇'을 하는지와 '어떻게' 하는지를 구분하는 단계"라고 생각한다. 함수1, 함수2는 코드가 "무엇"을 하는지 나타내고, 함수1-1, 함수1-2, 함수1-3은 함수1이 "어떻게" 실행되는지를 나타낸다..
개발하며 어떤 코드가 좋은 코드일까? 내가 작성한 코드는 좋은 코드일까? 라는 물음을 갖게 되었다. 이 물음을 해결하기 위해 '클린 코드'를 공부하고 나름의 코딩 가이드라인을 세울 계획이다. 의미 있는 이름의도를 분명히 밝혀라. 작명에서 의도는 매우 매우 중요하다. 이 의도를 잘 담기 위해서해당 변수(혹은 함수나 클래스)의 존재 이유는?수행 기능은?사용 방법은?을 고려해보자. 💡 주의사항코드에 의미를 함축하지 말고, 코드와 맥락을 명시적으로 드러내자. 그릇된 정보를 피하라널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하지 마라.// 나쁜 예class Car // Capital Adequacy Ratio(금융 분야에서, 은행의 자기 자본 비율을 나타내는 용어) 클래스// 좋은 예class Car..