Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL 10장.클래스
#clean_code
2년 전
7,113
2

오늘 TIL 3줄 요약

  • 하나의 클래스에게 너무 많은 책임을 부여하지 말것 - SRP

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

  • 클래스는 시스템 요소, 다른 요소, 변경 으로부터 잘 격리되어 있어야 한다.

TIL (Today I Learned) 날짜

2022.03.08-2022.03.09

오늘 읽은 범위

10장.클래스

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

클래스를 설계할 때도, 함수와 마찬가지로, '작게'가 기본 규칙

  • 함수의 크기 : 물리적인 행의 수로 측정

  • 클래스의 크기 : 클래스가 맡은 책임을 셈

클래스 이름은 해당 클래스 책임을 기술해야 한다.

  • 간결한 이름이 떠오르지 않는다면 필경 클래스 크기가 너무 커서

  • 클래스 이름이 모호하다면 필경 클래스 책임이 너무 많아서다

  • 클래스 이름에 Processor, Manager, Super 등과 같이 모호한 단어가 있다면 클래스에다 여러 책임을 떠안겼다는 증거다.

단일 책임 원칙(Single Responsibility Principle, SRP)

  • 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다는 원칙이다.

  • SRP는 '책임'이라는 개념을 정의하며 적절한 클래스 크기를 제시한다.

  • 클래스는 책임, 즉 변경할 이유가 하나여야 한다는 의미다

=> 책임, 즉 변경할 이유를 파악하려 애쓰다 보면 코드를 추상화하기도 쉬워진다.

소프트웨어를 돌아가게 만드는 활동과 소프트웨어를 깨끗하게 만드는 활동은 완전히 별개다

'깨끗하고 체계적인 소프트웨어'보다 '돌아가는 소프트웨어'에 초첨을 맞추는 이유 두가지

  1. 프로그램으로 되돌아가 만능 클래스를 단일 책임 클래스 여럿으로 분리하는 대신 다음 문제로 넘어가버린다.

  2. 많은 개발자는 자잘한 단일 책임 클래스가 많아지면 큰 그림을 이해하기 어려워진다고 우려한다.

"도구 상자를 어떻게 관리하고 싶은가? 작은 서랍을 많이 두고 기능과 이름이 명확한 컴포넌트를 나눠 넣고 싶은가? 아니면 큰 서랍 몇 개를 두고 모두를 던져 넣고 싶은가?"

큰 클래스 몇개가 아니라 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직하다

작은 클래스란?

  • 각자 맡은 책임이 하나며,

  • 변경할 이유가 하나며,

  • 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다.

응집도가 높다는 말은 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미

'함수를 작게, 매개변수 목록을 짧게' 라는 전략을 따르다 보면 때떄로 몇몇 메서드만이 사용하는 인스턴스 변수가 아주 많아진다.

=> 이는 십중팔구 새로운 클래스로 쪼개야 한다는 신호다.

깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수분하는 위험을 낮춘다.

경험에 의하면 클래스 일부에서면 사용되는 비공개 메서드는 코드를 개선할 잠재적인 여지를 시사한다.

Open-Closed Principle(OCP)

  • OCP란 클래스는 확장에 개발적이고 수정에 폐쇄적이어야 한다는 원칙이다.

새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다.

구체적인(concrete) 클래스는 상세한 구현(코드)을 포함하며 추상(abstract) 클래스는 개념만 포함

상세한 구현에 의존하는 클라이언트 클래스는 구현이 바뀌면 위험에 빠진다

=> 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리한다.

Dependency Inversion Principle(DIP)

  • DIP는 클래스가 상세한 구현이 아니라 추상화에 의존해야 한다는 원칙이다.

결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다.

시스템 요소가 서로 잘 격리되어 있으면 각 요소를 이해하기도 더 쉬워진다.

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

이번장의 내용은 자바, 객체 지향 설계의 세계에 입문한 후 부터 끊임없이 봐왔던 '클래스'에 대한 내용이라 읽기 전부터 묘한 긴장감이 있었다. 기존에 이미 '읽어봤던' 개념이 다시 나오기도 했지만 이번에 읽을 땐 기존에 이미 '읽어봤던' 내용을 다시 한번 보고 정리하는 것에서 한 걸음 더 나아가 그렇다면 현재의 나는 과거의 내가 '읽어봤던' 개념들을 어느정도 수준으로 '이해' 하고 실제로 사용하려 노력하고 있는가에 초점을 맞추고 읽은 장이였다.

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

  • 응집도(cohension) 라는 단어를 접하고 그에 대한 설명을 처음 읽었을땐 이 단어가 무슨 의미인지 바로 이해되지 않았다. 일단 이번 10장에서 이해한 응집도 라는 단어가 나오게 된 이유와 그 배경에 초첨을 맞추기로 하였다.

오늘 읽은 다른사람의 TIL

2 comments