IT/책 30

[Clean Code] 11장, 시스템

Clean Code 11장, 시스템 복잡성은 죽음이다. 1. 소프트웨어 = 도시 - 도시를 세울 때, 혼자서 직접 관리하기는 어렵지만 각 분야를 관리하는 팀으로 나뉨 > 작은 사항에 집중 할 수 있음 > 추상화와 모듈화: '구성요소'가 효율적으로 돌아감 - 소프트웨어에서도 낮은 추상화 수준에서 관심사를 분리해야함 - 시스템 수준에서의 깨끗함 유지 2. 시스템 제작과 시스템 사용 분리 - 제작(Construction)과 사용(Use)은 다르다. > 소프트웨어 시스템(애플리케이션 객체를 제작하고 의존성을 서로 연결)은 준비과정과 런타임 로직을 분리해야 함 - 시작 단계: 관심사(Concern) 분리 Bad Code //초기화 지연(Lazy Initialization) == 계산 지연(Lazy Evaluati..

IT/책 2021.11.07

[Clean Code] 10장, 클래스

Clean Code 10장, 클래스 깨끗한 클래스란 1. 클래스 체계 - 클래스를 정의하는 표준 자바 관례: 추상화 단계로 순차적으로 내려감 정적(static), 공개(public) 상수 -> 정적 비공개(private) -> 비공개 인스턴스 변수 -> 공개 함수 -> 비공개 함수 캡슐화 변수와 유틸리티 함수는 가능한 숨기는 게 좋음 - protected: 변수나 유틸리티 함수에 테스트 코드가 접근 가능하도록 허용 why? 테스트가 매우 중요하기 때문 - 비공개 상태를 유지할 방법을 찾아야 함 2. 클래스는 작아야 함 - 클래스나 함수는 항상 '작게'가 기본 규칙이다. - 클래스의 크기는 '책임'으로 나눔 ex. SuperDashboard는 약 70개의 method로 이루어짐: 책임이 너무 많음 - 클래..

IT/책 2021.11.07

[Clean Code] 9장, 단위 테스트

Clean Code 9장, 단위 테스트(TDD: Test Driven Development) - 코드가 제대로 도는지 확인하여, 지속가능하게 사용 가능한 테스트 코드를 작성하는 것이 중요 > 테스트 케이스를 모두 구현하고 통과한 후, 다른 사람들에게 공개해야 함 - 애자일과 TDD로 단위 테스트를 자동화하고 제대로 된 테스트 케이스를 작성해야 함 1. TDD 법칙 세가지 1) 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않음 2) 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트 작성 3) 현재 실패하는 테스트를 통과할 정도로만 실제 코드 작성 - 개발과 테스트가 대략 30초 주기로 묶임 - 그러나 많은 테스트 코드는 심각한 관리 문제를 유발함 2. 깨끗한 테스트 코드 유지 ..

IT/책 2021.11.07

[Clean Code] 8장, 경계

Clean Code 8장, 경계 외부 코드를 우리 코드에 깔끔하게 통합하는 방법 1. 외부 코드 사용하기 - 인터페이스 제공자와 인터페이스 사용자 사이의 경계 > 인터페이스 제공자: 적용성을 최대한 넓힘 > 사용자: 요구에 집중하기를 원함 ex) java.util.Map: 제공하는 기능성과 유연성으로 인해 유용함 > 그러나 위험 ⬆ - Map을 사용하는 누구든 Map의 내용을 지울 수 있음 2. 경계 살피고 익히기 - 타사 라이브러리의 사용법이 분명하지 않을 때 > 문서를 읽어서 사용 ➡ 우리쪽 코드를 작성하여 라이브러리가 동작하는지 확인 - 학습 테스트: 간단한 테스트 케이스를 작성하여 외부 코드를 먼저 익히기 3. 아파치의 log4j - 문서를 읽기전 테스트 케이스 작성 4. 학습 테스트 - 학습 테..

IT/책 2021.11.07

[Clean Code] 7장, 오류 처리

Clean Code - 로버트 C. 마틴 7장, 오류 처리 - 잘못된 것을 바로 잡을 책임 1. 오류 코드보다 예외를 사용 - 오류 코드를 사용하면 함수를 호출한 즉시 오류를 확인해야 함 - 예외를 던지면 호출자의 코드가 깔끔해짐 2. Try-Catch-Finally 문부터 작성 - 예외 프로그램 안에 범위 정의 - try 블록에 들어가는 코드를 실행하면서 어느 시점에서든 실행이 중단된 후 catch 블록을 넘어갈 수 있음 - try-catch 블록은 프로그램 상태를 일관성 있게 유지해야 함 ▶️ try 블록에서 생기는 일들에 대해 호출자가 기대하는 상태를 정의하기 쉬움 - 단위 테스트를 구현할 때, 강제로 예외를 일으키는 테스트케이스를 작성하여 try-catch문 구현 진행 3. 미확인(unchechk..

IT/책 2021.11.07

[Clean Code] 6장, 객체와 자료 구조

Clean Code - 로버트 C.마틴 6장, 객체와 자료 구조 변수를 비공개(private)로 정의하는 이유: 변수에 의존하지 않게 만들기 위해 그렇다면 왜 get, set을 사용하여 공개(public)할까? 1. 자료 추상화 - 추상 인터페이스를 제공하여 사용자가 구현을 모른 채 자료의 핵심을 조작 할 수 있어야 함 - 자료를 세세하게 공개하기 보다 추상적인 개념으로 표현 Bad Code public class Point{ public double x; public double y; } > 구현을 외부로 노출하는 함수 ( private로 선언하더라도 get, set을 이용하면 외부에 노출하는 것과 마찬가지) Clean Code public interface Point{ double getX(); do..

IT/책 2021.11.05

[Clean Code] 5장, 형식 맞추기

Clean Code - 로버트 C.마틴 5장, 형식 맞추기 코드의 형식을 맞추기 위해 간단한 규칙을 정하고 따라야 함 1. 형식을 맞추는 목적 - 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 영향을 미침 - 원할한 소통 2. 적절한 행 길이 유지 - 자바 파일 크기 = 클래스 파일 크기 - 500줄을 넘지 않고 대부분 200줄 정도인 파일로 커다란 시스템을 구축 할 수 있음 ex. JUnit, FitNesse, Time and Money는 상대적으로 파일 크기가 작고, 200줄 미만임 1) 신문 기사처럼 작성 - 아래로 내려갈수록 세세한 사실이 보이도록 - 이름: 간단하고 설명이 가능하게 - 첫 부분에는 고차원 개념과 알고리즘 설명 - 아래로 내려갈수록 의도를 세세하게 묘사 2) 개념은 빈 행..

IT/책 2021.10.30

[Clean Code] 4장, 주석

Clean Code - 로버트 C. 마틴 4장, 주석 주석은 코드로 의도를 표현하지 못해서, 실패를 만회하기 위해서 사용함 🔴 주석은 필요 악 🔴 - 주석을 유지/보수하기 어려움 - 주석이 코드를 항상 따라가지 않음 - 주석이 부정확한 고아가 되는 사례가 많음 - 부정확한 주석은 없는 주석보다 훨씬 나쁨 1. 주석은 나쁜 코드를 보완하지 못함 - 주석을 추가하는 이유: 코드 품질이 나쁘기 때문 2. 코드로 의도를 표현 - 주석을 사용하지 않고 코드로 표현 3. 좋은 주석 1) 법적인 주석 ex. 저작권 정보 2) 정보를 제공하는 주석 ex. 정규표현식의 시간과 날짜 3) 의도를 설명하는 주석 4) 의미를 명료하게 밝히는 주석 ex. 모호한 인수나 반환 값 if(a.compareTo(a) == 0){} /..

IT/책 2021.10.30

[Clean Code] 3장, 함수

Clean Code - 로버트 C. 마틴 3장, 함수 함수를 처음 읽는 사람이 프로그램 내부를 직관적으로 파악 할 수 있어야 함 1. 작게 만들기 - 얼마나 작게 만들어야 할까? ➡ 모든 함수를 4줄 이내로 🚧 if / else/ while 문 등에 들어가는 블록은 한 줄이어야 함 Clean Code public static String renderPageWithSetupsAndTeardowns(PageData pageData, boolean isSuite) throws Exception{ if(isTestPage(pageData)){ includeSetupAndTeardownPages(pageData, isSuite); } return pageData.getHtml(); } ➡ if문 안에는 하나의 함..

IT/책 2021.10.28

[Clean Code] 2장, 의미 있는 이름

Clean Code - 로버트 C. 마틴 2장, 의미 있는 이름 소프트웨어에서 이름: 변수, 함수, 인수, 클래스, 패키지, 소스파일, 디렉터리, jar, war, ear 등 이름을 많이 사용 ➡ 이름을 잘 정하는 것이 중요하다. 1. 의도 밝히기 변수, 함수, 클래스 등 이름을 지을 때 이름에 의도를 담아야 함 🔗따로 주석이 필요하면 의도를 드러내지 못한 것 생각해봐야 할 질문 - 변수(or 함수 or 클래스)의 존재 이유는? - 수행 기능은? - 사용 방법은? ex) Bad Code public List getThem(){ List list1 = new ArrayLists(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; } ..

IT/책 2021.10.25