클린 코드 12장 - 창발성

French Marigold·2024년 1월 29일
0

클린코드

목록 보기
12/13

단순한 설계 규칙 4가지 (216p)

  1. 모든 테스트를 실행한다.
  2. 중복을 없앤다.
  3. 프로그래머 의도를 표현한다.
  4. 클래스와 메소드 수를 최소로 줄인다.

모든 테스트를 실행하라 (216p)

  • 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질은 당연히 더불어 높아지게 됨.
  • SRP를 준수하는 클래스 (하나의 책임만 맡고 있는 클래스) 는 테스트가 훨씬 더 쉽다.
  • 테스트 케이스를 작성하면 시스템은 낮은 결합도와 높은 응집력이라는, 객체 지향 방법론이 지향하는 목표를 저절로 달성하게 된다. ⭐️⭐️

중복을 없애라 (217p)

  • 깔끔한 시스템을 만들려면 단 몇 줄이라도 중복을 제거하겠다는 의지가 필요하다. ⭐️⭐️⭐️
  • 코드의 중복을 없애기 위해서 중복되는 코드를 메소드로 따로 빼다 보면 따로 뺀 메소드가 단일 책임 원칙을 위반하게 되는 경우가 발생한다. 이 때는 중복되는 코드를 담은 그 메소드를 다른 클래스로 옮기면 된다.
final class CalculateShape {

		func calculateSquareArea(length: Int) -> Int {
		    return calculateArea(length: length, width: length)
		}

		func calculateRectangleArea(length: Int, width: Int) -> Int {
		    return calculateArea(length: length, width: width)
		}

		// 만일 따로 뺀 메소드가 클래스의 단일 책임 원칙을 위반하는 메소드라면 
		// 다른 클래스로 옮겨서 사용하면 된다. 
		func calculateArea(length: Int, width: Int) -> Int {
		    return length * width
		}
}

개발자의 의도를 분명히 표현하는 방법 (221p)

  1. 좋은 이름을 선택한다.

    • 이름과 그 내부 기능이 완전히 딴판인 클래스나 함수를 만들어서는 안 됨
  2. 함수와 클래스 크기를 가능한 줄인다.

    • 작은 클래스와 작은 함수는 이름을 짓기도 쉽고 구현하기도 더 쉬우며 이해하기도 더 쉽다.
  3. 표준 명칭을 사용한다.

    • 어떤 클래스가 특정 디자인 패턴, 예를 들어 Command나 Visitor 패턴 등을 사용해서 구현되었다면, 해당 패턴의 이름을 클래스 이름에 넣어주는 것이 좋다.
// 1. Command 패턴을 사용하는 경우 
protocol Command {
    func execute()
}

// 클래스에도 Command라는 이름을 붙여주면 
// 다른 개발자가 해당 클래스는 Command 패턴을 사용하고 있다고 쉽게 알 수 있다. 
class LightOnCommand: Command {
    var light: Light

    init(light: Light) {
        self.light = light
    }

    func execute() {
        light.on()
    }
}

==============================================================================

// 2. Visitor 패턴을 사용하는 경우 
protocol Visitor {
    func visit(element: Element)
}

// 클래스에도 Visitor라는 이름을 붙여주면 
// 다른 개발자가 해당 클래스는 Visitor 패턴을 사용하고 있다고 쉽게 알 수 있다. 
class ConcreteVisitor: Visitor {
    func visit(element: Element) {
        print("Visiting \(element)")
    }
}
  1. 단위 테스트 케이스를 꼼꼼히 작성한다.
    • 테스트 케이스는 예제로 보여주는 문서.
    • 테스트 케이스를 잘 읽어보면 클래스의 기능이 한 눈에 들어오게 된다.

개발자가 갖추어야 할 역량

  • 개발자가 갖추어야 할 역량 중 하나는 코드를 더 잘 설계하기 위해 주의를 기울이는 것.

클래스와 메소드 수를 최소로 줄여라 (222p)

  • 중복을 제거하고, 의도를 표현하고, SRP를 준수한다는 기본적인 개념을 지키다보면 클래스와 메소드가 수없이 많아지는 경우가 생긴다. ⭐️⭐️⭐️
  • 함수와 클래스 수를 가능한 줄여야 한다. ⭐️
  • 하지만 이 규칙은 설계 규칙 네 가지 중 우선순위가 가장 낮다. 테스트 케이스를 만들고 중복을 제거하고 의도를 표현하는 작업이 더 중요하다.
profile
꽃말 == 반드시 오고야 말 행복

0개의 댓글