Community

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

← Go back
10장 클래스
#clean_code
2년 전
1,117

TIL (Today I Learned) 날짜

2022 03 09

오늘 읽은 범위

10장 클래스

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

👉클래스는 작아야한다!

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

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

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

-클래스 이름에 processor, Manager,Super 등의 이름을 붙였다면, 클래스에 책임을 떠안겼다는 의--클래스 설명은 만일(“if”), 그리고(“and”), -(하)며(“or”), 하지만(“but”)을 사용하지 않고서 25단어 내외로 가능해야 한다.

👉단일 책임 원칙(SRP)

-단일 책임 원칙은 클래스나 모듈을 변경할 이유가 하나뿐이어야 한다는 원칙이다.

-변경할 이유를 파악하려 애쓰다 보면 코드를 추상화하기 쉬워진다.

-SRP는 객체 지향 설계에서 이해하고 지키키 수월한 개념이며 더욱 중요한 개념이다.

👉응집도

-클래스는 인스턴스 변수 수가 작아야 한다. 각 클래스의 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 한다.

-‘함수를 작게, 매개변수 목록을 짧게’라는 전략을 따르다 보면 때때로 몇몇 메서 드만이 사용하는 인스턴스 변수가 아주 많아진다. -> 새로운 클래스로 쪼개야 한다는 신호

👉큰 함수를 작은 함수/클래스 여럿으로 쪼개보기

첫째, 리팩터링한 프로그램은 좀 더 길고 서술적인 변수 이름을 사용한다.

둘째, 리팩터링한 프로그램은 코드에 주석을 추가하는 수단으로 함수 선언과 클래스 선언을 활용한다.

셋째, 가독성을 높이고자 공백을 추가하고 형식을 맞춘다.

👉변경으로부터 격리

객체 지향 프로 그래밍 입문에서 우리는 구체적인 클래스와 추상클래스가 있다고 배웠다. 구체적인 클래스는 상세한 구현(코드)을 포함하며 추상 클래스는 개념만 포함한다고도 배웠다.

-상세한 구현에 의존하는 코드는 테스트가 어렵다.

-시스템의 결합도를 낮추면 유연성과 재사용성이 높아진다.

-결합도가 낮다는 소리는 각시스템의 요소가 서로 잘 격리되어 있다는 의미이다.

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

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

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

클래스를 여럿으로 쪼개는 부분에 대해 새롭게 배웠던 거 같다.
나는 코드를 짜며 Manager, Super 같은 이름을 붙이고 그 클래스에 정말 많은 업무를 줬었다.
사실 이렇게 하다 보면, 어떤 기능이 여기에 있었나? 하면서 클래스마다 찾아다니기도 하고, 기억에 의존하며 기능을 찾기도 한다. 이 방법이 비효율적임을 알았으나 정확히 어떤 부분이 문제점인지는 몰랐는데, 한 클래스에 너무 많은 책임을 줬다는 게 문제점임을 확실히 알게 되었다. 이렇게 또 다른 문제점과 해결 방법을 알았으니 나의 코드가 더 좋아지기를 기대하는 바이다.

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

캡슐화

객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉한다.

(캡슐화에 대한 예제와 그에 대한 이해를 돕는 출처 :https://bperhaps.tistory.com/entry/%EC%BA%A1%EC%8A%90%ED%99%94%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EC%96%B4%EB%96%A4-%EC%9D%B4%EC%A0%90%EC%9D%B4-%EC%9E%88%EB%8A%94%EA%B0%80)