1 minute read

즐거운 반차,, 안즐거운 역류성 식도염

깨끗한 클래스에 대해 다루어 보자

목차

  1. 클래스 체계
  2. 캡슐화
  3. 단일책임원칙 (SRP)
  4. 낮은 결합도, 높은 응집도
  5. 변경하기 쉬워야 한다

1. 클래스 체계

표준 자바 관례로 보면, 클래스 안에서의 순서는 아래와 같다.

  1. static public 상수
  2. static private 변수
  3. private instance 변수 (public 변수가 필요한 경우는 거이 없다)
  4. public method
    • private method는 자신을 호출하는 public method 직후에 위치한다.

2. 캡슐화

  • 때로 변수나 유틸리티 함수를 protected로 선언하여 테스트 코드에 접근을 허용하는 방법이 있다.
  • 하지만, 그 전에 비공개 상태를 유지할 방법을 먼저 고안하고 캡슐화를 풀어주는건 마지막 수단으로 한다 .

3. 단일 책임원칙

  • 클래스가 맡은 책임이 한개인가?
    • 함수와 마찬가지로 클래스도 작아야 한다.
    • 함수는 라인 수로 크기를 측정하지만, 클래스는 맡은 __책임__의 수로 크기를 측정한다.
    • 클래스 설명은 만일(If), 그리고(and), 하며(or), 하지만(but)을 사용하지 않고 25단어 내외로 가능해야 한다. -> 책임이 한가지여야 한다.
    • SRP 해야 한다. 자잘한 단일 클래스가 많아지면 큰 그림을 이해하기 어렵다고 우려한다. 하지만 작은 클래스가 많은 시스템이든 큰 클래스가 몇개뿐인 시스템이든 돌아가는 부품은 그수가 비슷하다.
    • 큼직한 다목적 클래스 몇개로 이루어진 시스템은 (변경할때) 당장 알 필요가 없는 사실까지 들이 밀어 독자를 방해한다.
    • 작은 클래스는 각자 맡은 책임이 하나이며, 변경할 이유도 하나이고, 다른 작은 클래스와 협력하여 시스템에 필요한 동작을 수행한다.

4. 낮은 결합도 높은 응집도 (Low Coupling, High Cohension)

결합도는 낮을수록 응집도는 높을수록 유지 보수성이 좋다.

  • 결합도: 다른 모듈간의 의존도
  • 응집도: 모듈 내부의 기능 집중도
모듈(프로그래밍)
여기서 모듈이란 크기와 상관없이 클래스나 패키지. 라이브러리와 같이 프로그램을 구성하는 임의의 요소를 의미한다.
클린코드 저자 (로버트 마틴)에 따르면 모듈은 1. 제대로 실행되어야 하고, 2. 변경이 용이해야하고, 3. 이해하기 쉬워야 한다고 한다.
  • 결합도가 높은 클래스의 문제점
    • 연관된 클래스가 변경되면 수정이 필요하다.
    • 결합도가 높으면 연관된 클래스들을 모두 이해해야 한다.
  • 결합도가 낮은 클래스의 장점
    • 시스템 결합도를 낮추면 유연성과 재사용성이 좋아진다.
    • DIP -클래스가 상세한 구현이 아니라 추상화에 의존해야 한다.
    • 추상화를 이용하면 테스트 코드 짜기에 용이하다.
  • 응집도가 낮은 클래스의 문제점
    • 여러 기능이 있으므로 이해하기 어렵다.
    • 재사용하기 어렵다.
  • 응집도가 높은 클래스의 장점
    • 클래스는 인스턴스 변수 수가 적어야 한다. 메서드는 인스턴스 변수 하나 이상 사용해야 한다. 메서드가 인스턴스 변수를 많이 사용할 수록 응집도가 높다.
    • 응집도가 높다 = 클래스에 속한 메서드와 변수가 서로 의존하면서 논리적인 단위로 묶인다. = 서로 연관있다.
    • 클래스가 응집도를 잃어간다면 함수를 쪼개야 한다.

참고

https://medium.com/@jang.wangsu/%EC%84%A4%EA%B3%84-%EC%9A%A9%EC%96%B4-%EC%9D%91%EC%A7%91%EB%8F%84%EC%99%80-%EA%B2%B0%ED%95%A9%EB%8F%84-b5e2b7b210ff

Categories:

Updated:

Comments