DAY20

  • 오늘 읽은 범위 : 클래스 ~p184

책에서 기억하고 싶은 내용을 써보세요

  • 클래스의 체계:
    • public static 상수
    • private static 변수
    • private 인스턴스 변수
    • 공개변수 - 필요한 경우는 거의 없다
    • 공개함수
    • 비공개함수 - 호출하는 공개함수 다음에 위치한다.

추상화 단계가 순차적으로 내려감으로써 프로그램은 신문기사처럼 읽힌다

  • 클래스를 작게 만들려면?
    • 클래스가 맡고 있는 책임을 세보면 된다.(SRP-Single Responsibility Principle)
    • 클래스의 이름이 다소 모호하다면 책임이 많은지 의심해봐라!
      • Rule of Thumb: 클래스의 설명을 만일, 그리고, ~하며, 하지만을 사용하지 않고서 25단어 내외로 설명이 가능해야 한다.
    • 변경할 이유-책임-을 파악하려 애쓴다면 코드를 추상화하기도 쉬워진다!
    • 소프트웨어를 돌아가게 하는 활동과 소프트웨어를 깨끗하게 만드는 활동은 완전히 별개다!
    • 자잘한 단일책임 클래스가 많아지면 큰그림을 이해하기 어려워질까? 그렇지 않다. 시스템에서 돌아가는 클래스가 많든 적든 익혀야하는 부분은 그 양이 비슷하다.
      • "도구상자를 어떻게 관리하고 싶은가? 작은 서랍을 많이 두고 기능과 이름이 명확한 컴포넌트를 나눠 넣고 싶은가? 아니면 큰 서랍 몇개를 두고 모두를 던져넣고 싶은가?"
    • 응집도-클래스는 인스턴스 변수 수가 작아야 한다.
      • 일반적으로 메서드가 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 더 높다.
      • 응집도가 높은 클래스는 가능하지도 바람직하지도 않다
      • 몇몇 메서드만이 사용하는 인스턴스 변수가 많아진다면 새로운 클래스로 쪼개라!
    • 큰 함수를 작은 함수 여럿으로 쪼개다 보면 종종 작은 클래스 여럿으로 쪼갤 기회가 생긴다-이렇게 함으로써 프로그램에 점점 더 체계가 잡히고 구조가 투명해진다.1

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  1. 이번 장은 OOP의 가장 중요한 개념중 하나인 클래스에 대해서 읽어보았습니다. 클래스는 그 이름만큼이나 사용하기 어려운(?) 개념 중에 하나인 것 같습니다. 지금 내가 정의하고 있는 이 클래스가 올바르게 정의되고 있는것인지? OOP의 개념을 무시하고 있는것은 아닌지? 항상 생각하게 되는 것이 바로 이 클래스를 정의할 때인것 같습니다. 최근 파이썬을 사용하며 오히려 클래스를 무시하고 함수만을 만들때도 많은 것 같습니다. 하지만 이 장을 읽고 난 다음, 지금 제가 돌아가기만 하게 놔두었던 그 모든 코드들이 스쳐지나가며 리팩토링 욕구가 점점 차오르는것 같습니다!

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요

  • -

세줄 요약

  • 클래스는 작게-하나의 책임만!
  • 돌아가는 코드를 짰다면 그 다음 관심사, '깨끗하고 체계적인 소프트웨어'를 만들기 위해 노력하라!
  • 클래스에 큰 함수가 존재한다면, 그리고 그가 사용하는 인스턴스 변수가 많다면, 클래스로 쪼개라! 쪼개고 쪼개서 작은 클래스로 만들어라!

주석

  1. p179 목록 10-5~8의 예제 참조