Community

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

← Go back
TIL 10장. 클래스
#clean_code
2년 전
627
1

오늘 TIL 3줄 요약

  • 클래스는 작아야 한다. 작아야 한다. 작아야 한다!

  • 클래스에게 너무 많은 책임을 떠넘겨서는 안 된다.

  • 클래스의 응집도를 높이면서, 결합도를 낮추기 위해 노력하자. 논리적이면서, 오류에 안전한 코드를 위해.

TIL (Today I Learned) 날짜

2022.03.09

오늘 읽은 범위

10장. 클래스

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

  • 클래스를 만들 때 첫 번째 규칙은 크기다. 클래스는 작아야 한다. - 172p

  • 함수는 물리적인 행 수로 크기를 측정했다. 클래스는 다른 척도를 사용한다.

    클래스가 맡은 책임을 센다. - 173p

  • 클래스 이름은 해당 클래스 책임을 기술해야 한다. 실제로 작명은 클래스 크기를 줄이는 첫 번째 관문이다. 간결한 이름이 떠오르지 않는다면 필경 클래스 크기가 너무 커서 그렇다. 클래스 이름이 모호하다면 필경 클래스 책임이 너무 많아서다. - 175p

  • 단일 책임 원칙은 클래스나 모듈을 변경할 이유가

    하나, 단 하나뿐이어야 한다는 원칙이다. SRP는 ‘책임’이라는 개념을 정의하며 적절한 클래스 크기를 제시한다. - 175p

  • 소프트웨어를 돌아가게 만드는 활동과 소프트웨어를 깨끗하게 만드는 활동은 완전히 별개다. 우리들 대다수는 두뇌 용량에 한계가 있어 ‘깨끗하고 체계적인 소프트웨어’보다 ‘돌아가는 소프트웨어’에 초점을 맞춘다. ...(중략)... 문제는 우리들 대다수가 프로그램이 돌아가면 일이 끝났다고 여기는 데 있다. ‘깨끗하고 체계적인 소프트웨어’라는 다음 관심사로 전환하지 않는다. - 176p

  • 규모가 어느 수준에 이르는 시스템은 논리가 많고도 복잡하다. 이런 복잡성을 다루려면 체계적인 정리가 필수다. 그래야 개발자가 무엇이 어디에 있는지 쉽게 찾는다. 그래야 (변경을 가할 때) 직접 영향이 미치는 컴포넌트만 이해해도 충분하다. 큼직한 다목적 클래스 몇 개로 이뤄진 시스템은 (변경을 가할 때) 당장 알 필요가 없는 사실까지 들이밀어 독자를 방해한다. - 177p

  • 일반적으로 메서드가 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 더 높다. 모든 인스턴스 변수를 메서드마다 사용하는 클래스는 응집도가 가장 높다. - 177p

  • 우리는 응집도가 높은 클래스를 선호한다. 응집도가 높다는 말은 클래스에 속한 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미기 때문이다. - 177p

  • 클래스가 응집력을 잃는다면 쪼개라!

    그래서 큰 함수를 작은 함수 여럿으로 쪼개다 보면 종종 작은 클래스 여럿으로 쪼갤 기회가 생긴다. 그러면서 프로그램에 점점 더 체계가 잡히고 구조가 투명해진다. - 179p

  • 대다수 시스템은 지속적인 변경이 가해진다. 그리고 뭔가 변경할 때마다 시스템이 의도대로 동작하지 않을 위험이 따른다. 깨끗한 시스템은 클래스를 체계적으로 정리해 변경에 수반하는 위험을 낮춘다. - 185p

  • 새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다. 이상적인 시스템이라면 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지는 않는다. - 188p

  • 시스템의 결합도를 낮추면 유연성과 재사용성도 더욱 높아진다. 결합도가 낮다는 소리는 각 시스템 요소가 다른 요소로부터 그리고 변경으로부터 잘 격리되어 있다는 의미다. 시스템 요소가 서로 잘 격리되어 있으면 각 요소를 이해하기도 더 쉬워진다. - 190p

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

  • 클린코드 챌린지가 끝을 향해가고 있는데, 처음부터 이번 챕터에 이르기까지 가장 중요한 키워드는 '가독성'인 것 같다. 이번 챌린지를 통해 얻은 수확 중 가장 의미가 있다고 생각하는 것은 일반 글과 코드를 분리해서 생각했던 기존의 사고가 잘못된 것임을 깨달은 것이라 생각한다.

  • 이번 챕터는 클래스를 어떻게 설계해야 하는지에 대해 다루고 있다. 결국, 응집도는 높으면서, 결합도는 낮은 클래스를 만들어, 논리적으로 이해는 잘 되게 만들되, 요소 간의 연관성은 낮추어서, 하나를 변경할 때 다른 것도 줄지어 변경하여 오류가 발생할 수 있는 위험을 최소화하라는 이야기가 인상 깊었다. 또한, 복잡하지 않은 클래스를 만드는 것, 클래스가 많은 책임을 떠맡도록 하지 말라는 이야기도 머리에 새겼다.

  • 결국, 코드를 이해하기 쉽게 짜고, 오류로부터 안전하게 만들기 위해 중복을 피하고, 결합도를 낮추라는 것. 이 책이 꾸준하게 이야기해왔던 것을 클래스라는 새로운 키워드에 맞춰 이야기해준 것 같다.

  • 요새, 노마드코더를 통해 다시 프로그래밍을 공부하고 있는데, 챌린지 초반에 책만 읽을 때보다 코딩을 직접 해보면서 동시에 책을 읽으니, 내용이 더 와닿는 것 같다고 느꼈다. 이번 챕터 속 구절이 이야기해주듯, 우리는 먼저, 깨끗한 소프트웨어보다 돌아가는 돌아가는 소프트웨어에 초점을 맞춘다. 과거에는 소프트웨어가 돌아가는 걸 확인하고 나면 vs를 꺼버렸다. 하지만 이제는 깨끗한 코드가 얼마나 중요한지 알기에, 소프트웨어가 돌아가는 걸 확인하고 나면, 코드를 깨끗하게 만들기 위해 노력할 것이며, 다양한 케이스에 대해 테스트를 해보며 찾지 못한 버그를 해결하기 위해 노력할 것이다.

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

오늘 읽은 다른사람의 TIL

1 comment