스터디/클린코드(Clean Code)

[스터디] 클린코드 10장 (2022년 8월 3일)

눙엉 2022. 8. 3. 23:13

10장 클래스

클래스... 자바를 1도 모르는 나에겐 너무 먼 얘기다.

점점 클린 코드 책도 멀어지는 것 같다.

 

클래스 체계

클래스를 정의하는 표준 자바 관례라는 것이 있다.

 

가장 먼저 변수 목록이 나온다.

정적 공개 상수 -> 정적 비공개 상수 -> 비공개 인스턴스

 

그다음 공개 함수가 나온다.

자신을 호출하는 공개 함수 직후에 넣는다.

 

즉 추상화 단계가 순차적으로 내려간다.

 

함수 파트에서도 나온 말이지만 추상화 단계가 순차적으로 내려가 신문 기사처럼 읽힌다는 얘기를 여기서 또 하고 있다.

 

그만큼 중요하신 거겠지...

 

현재 리액트를 사용하면서도 추상화 레벨을 맞추려고 노력하고 있는데

노력한 만큼 코드는 깔끔해지는 것 같다.

 

캡슐화

이 부분을 읽고 이해를 하지 못해 조금 더 찾아보았다.

 

클래스를 사용하는 것만으로도 캡슐화라고 한다. 클래스에서 변수와 메서드를 묶어서 외부에는 그것을 보여주지 않는 것.

객체 내부의 데이터를 가져와 처리하지 말고, 메서드를 사용해서 행위를 요청하라고 한다.

 

캡슐화를 사용하여 가장 큰 좋은 점은 코드의 중복을 피할 수 있고, 데이터 처리 방식을 외부에서 알 필요가 없다는 것이다.

 

프런트엔드 관점에서 봤을 땐 커스텀 훅을 사용하는 느낌이 들었다.

 

클래스는 작아야 한다!

클래스 크기는 메서드의 수와 상관이 없다.

그 클래스가 몇 개의 책임을 가지고 있는지가 중요하다.

클래스도 함수처럼 작게 만들어야 한다. 물론 단일 책임도 가져야 한다.

클래스 이름도 클래스 책임을 적어야 한다.

 

아주 그냥 함수랑 똑같다!!!

 

응집도

응집도가 높아지도록 변수와 메서드를 적절히 분리해서 새로운 클래스로 쪼개 준다.

 

응집도를 유지하면 작은 클래스 여럿이 나온다.

클래스를 쪼갠다면 코드의 길이는 늘어나겠지만 코드를 이해하고 사용하기 훨~씬 좋아진다.

 

클래스를 이용해 본적은 없지만 함수를 쪼개고 나누 어려고 노력 중인데 정말 좋은 것 같다.

 

변경하기 쉬운 클래스

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

이상적인 시스템이라면 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지 않는다.

 

정말 이상적인 말이다. 수정하거나 추가할 때 기존 코드를 건드리지 않는다면 얼마나 좋을까...

수정할 때마다 어디서 터질지 모르는 그 무서움...

 

결론

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

결합도가 낮다는 것은 잘 격리되어 있다는 것이다.

 

함수든 클래스든 한 가지의 일을 가지고 잘 격리시켜서 사용해야겠다.