본문 바로가기

728x90

클린한 코드

(7)
[클린 코드] 10장. 클래스 1. 클래스는 작아야 한다! 클래스가 맡은 책임이 적어야 한다. 클래스 이름은 해당 클래스 책임을 기술해야 한다. 클래스 이름을 짓기 어렵다면, 클래스 책임이 너무 많아서일 것이다. 1-1. 단일 책임 원칙 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다. 작은 클래스는 각자 맡은 책임이 하나이고, 변경할 이유가 하나며, 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다. 1-2. 응집도 클래스는 인스턴스 변수의 수가 작아야 하고, 메서드는 인스턴스 변수를 하나 이상 사용해야 한다. 메서드가 변수를 많이 사용할수록 클래스의 응집도는 높다. 응집도를 유지하면 작은 클래스가 여러 개 나온다. 몇몇 메서드만이 인스턴스 변수를 많이 사용하는 경우가 발생한다면, 클래스를 쪼개야 하는 신호이다! 1-3. ..
[클린 코드] 9장. 단위 테스트 1. TDD 법칙 세 가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서, 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 위 규칙을 따르면 실제 코드를 사실상 전부 테스트하는 테스트 케이스가 나온다. 2. 깨끗한 테스트 코드 유지하기 깨끗한 테스트 코드란? 가독성, 가독성, 가독성!! 테스트 코드는 실제 코드 못지않게 중요하다. 실제 코드 못지않게 깨끗하게 짜야한다. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트이다. 테스트 케이스가 있으면 변경이 두렵지 않다. 테스트 코드가 지저분하면 코드를 변경하는 능력이 떨어지며 코드 구조를 개선하는 능력도 떨어진다. 2-1..
[클린 코드] 7장. 오류처리 1. 오류 코드보다 예외를 사용하라 오류가 발생하면 예외를 던지는 것이 코드를 깔끔하게 해준다. (비즈니스 로직이 오류 처리 코드와 뒤섞이지 않는다.) 2. try-catch-finally 문부터 작성하라 예외에서 범위를 정의함으로써 try 블록에 들어가는 코드의 본질을 유지하기가 쉽다. 3. 미확인 (unchecked) 예외를 사용하라 확인된 (checked) 예외는 OCP(Open Closed Principle)을 위반한다. 하위 메소드에서 checked 예외를 던진다면, 상위 메소드들이 그 예외를 처리하기 위해 1) catch 블록을 추가하거나 2) 선언부에 throw 절을 추가해야 한다. 즉, 모든 함수가 최하위 함수에서 던지는 예외를 알아야 하므로 캡슐화가 깨진다. 4. 예외에 의미를 제공하라 ..
[클린 코드] 5장. 형식 맞추기 1. 적절한 행 길이를 유지하라 일반적으로 작은 파일이 큰 파일보다 이해하기 쉽다. 신문 기사처럼 작성하라 이름은 간단하면서도 설명이 가능하도록 짓자. 소스 파일 첫 부분은 고차원 개념과 알고리즘을, 아래로 내려갈수록 의도를 세세하게 묘사하자. (저차원 함수와 세부 내역) 개념은 빈 행으로 분리하라 생각 사이는 빈 행을 넣어 분리해라 일련의 행 묶음은 완결된 생각 하나를 표현하라 세로 밀집도 연관성: 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다. 수직 거리 서로 밀접한 개념은 세로로 가까이 둬야 한다. 변수 선언: 변수는 사용하는 위치에 최대한 가까이 선언한다. 인스턴스 변수: 인스턴스 변수는 클래스 맨 처음에 선언한다. 종속 함수: 한 함수가 다른 함수를 호출한다면, 두 함수는 세로로 가까이 배치..
[클린 코드] 3장. 함수 1. 작게 만들어라! 블록과 들여쓰기 if문, else문, while 문 등에 들어가는 블록은 한 줄이어야 한다! 2. 한 가지만 해라! 함수 당 추상화 수준은 하나로 하자: 함수 내 모든 문장의 추상화 수준이 동일해야 한다. 예를 들어 아래 코드에서 함수 내 추상화 수준이 다르다. public String method(Page page){ String testPage = page.getContent("content"); // 추상화 수준 높다. ... if(testPage) { String pagePathName = PathParser.render("path"); } // 추상화 수준 낮다. ... return page.getHtml(); // 추상화 수준 높다. } 추상화 수준이 다르면 코드를 읽는 ..
객체지향 4대 특성 객체지향의 4대 특성에는 아래가 있습니다. 캡슐화: 정보 은닉 상속: 재사용 추상화: 모델링 다형성: 사용 편의 각각의 특성에 대해서 살펴보겠습니다. 추상화 - 모델링 OOP의 추상화는 모델링이라고 할 수 있습니다. 클래스 설계에서 추상화가 사용됩니다. 클래스 설계를 위해서는 애플리케이션 경계부터 정해야 합니다. 객체 지향에서 추상화의 결과는 클래스입니다. 추상화 = 모델링 = 자바의 class 키워드 상속 - 재사용 객체 지향의 상속은 상위 클래스의 특성을 재사용하는 것입니다. (부모-자식 관계가 X) 객체 지향의 상속은 상위 클래스의 특성을 확장하는 것입니다. 객체 지향의 상속은 is kind of 관계를 만족해야 합니다. (즉, 하위 클래스 is kind of 상위 클래스): 하위 클래스는 상위 클..
객체 지향 설계 5원칙 - SOLID SOLID란? 객체 지향 프로그래밍 및 설계의 5가지 기본 원칙을 두문자어로 나타낸 것입니다. 응집도는 높이고, 결합도는 낮추라는 고전 원칙 (High cohesion, Loose coupling)을 객체 지향 관점에서 재정립한 것입니다. SOLID는 아래의 5가지에 해당합니다. SRP (Single Responsibility Principle): 단일 책임 원칙 OCP (Open Closed Principle): 개방 폐쇄 원칙 LSP (Liskov Substitution Principle): 리스코프 치환 원칙 ISP (Interface Segregation Principle): 인터페이스 분리 원칙 DIP (Dependency Inversion Principle): 의존 역전 원칙 ※ 결합도와 응집..

728x90
반응형