ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클린코드 - 클래스
    개발/프로그래밍 2020. 10. 12. 08:52

    클래스 작성시 내부 순서는 이렇게한다

    1. 정적/공개 상수

    2. 정적 비공개 변수

    3. 비공개 인스턴스 변수

    (공개변수는 잘쓰지않는다)

    4. 공개함수, 비공개함수

     

    클래스는 작아야한다

    클래스나 모듈을 변경할 이유가 하나여야한다. 이를 단일책임원칙 SingleResponsibilityPrinciple 이라한다

    class SuperDashboard{
      getLastFocusedComponent()
      getVersionNumber()
    }

    해당 클래스는 1. 버전정보를 추적하고 

    2. 스윙컴포넌트(UI) 를 관리한다

    버전이나 스윙코드가 바뀔수있으므로 변경할 이유가 두가지인 클래스이다.

    이런경우 version 클래스를 따로 뺴내서 SRP를 지킬수있다.

     

     

    클래스에서는 인스턴스 변수의 갯수가 작아야한다

    메소드가 변수를 많이쓸수록 메서드와 클래스는 응집도가 높다

    모든 인스턴스 변수들을 모든 메소드에서 사용하면 응집도가 가장높다는 의미이다.

    응집도가 가장높은건 바람직하지 않으나

    응집도가 높은건 클래스의 변수와 메소드가 논리적으로 묶였다는 의미로 좋은것이다.

    그러므로 응집력을 잃게하여 클래스를 쪼개버리는게 좋다, 그럼 각각의 클래스는 응집도가 높아진다.

     

    만약 메소드가 쪼개고싶은 변수 네개를 쓰고있다면

    변수 네개를 인스턴스 변수로 바꾸면 인수가 필요없고 쪼개기 쉬워진다.

     

    클래스는 변경이 쉬워야한다. 

    class Sql{
      Sql(String table, List columns)
      String create()
      String insert(dynamic fields)
      String selectAll()
      String findByKey(String keyColumn,Stirng keyValue)
      String _columnList(List columns)
      String _valueList(dynamic fields, List columns)
      
      
    }

    위 sql에서 update 기능을 추가한다면 sql클래스에 손봐야한다.

    클래스 일부에서만 쓰는 비공개 메소드는 나중에 또 개선해야할 경우가 많다.

     

    absctract class Sql{
      Sql(String table, List columns)
      abstract String generate()
    }
    
    class CreateSql extends Sql{
      CreateSql(String table, List columns)
      @Override
      String generage()
    }
    class SelectSql extends Sql{
      SelectSql(String table, List columns)
      @Override
      String generage()
    }
    class InsertSql extends Sql{
      InsertSql(String table, List columns,dynamic fields)
      @Override
      String generage()
      String valueList(dynamic fields, List columns)
      
    }
    
    class FindByKeySql extends Sql{
      FindByKeySql(String table, List columns, String keyColumn, String keyValue)
      @Override
      String generage()
      
    }

     

    이렇게 된경우에는 함수를 수정해도 다른함수에 주는 위험이 사라진다

    update 를 만들때는 updateSql 만 만들어 추가해주면 된다.

    확장에 개방적으며 수정에 폐쇠적인 OCP 개념에도 적합하다.

    댓글

Designed by Tistory.