반응형
📌 오늘 TIL 3줄 요약
- SRP(단일책임원칙) : 클래스는 작아야 하고 클래스는 책임, 즉 변경할 이유가 하나여야 한다.
- OCP(개방폐쇄원칙) : 새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다. 이상적인 시스템이라면 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지는 않는다.
- DIP(의존역전원칙) : 상세한 구현에 의존하는 클라이언트 클래스는 구현이 바뀌면 위험에 빠진다. 그래서 우리는 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리한다.
📆 TIL (Today I Learned) 날짜
2022.03.09
📚 오늘 읽은 범위
10장. 클래스
📝 책에서 기억하고 싶은 내용
- 클래스는 작아야 한다! 함수는 물리적인 행 수로 크기를 측정했다. 클래스는 다른 척도를 사용한다. 클래스가 맡은 책임을 센다.
- 클래스 이름은 해당 클래스 책임을 기술해야 한다. 실제로 작명은 클래스 크기를 줄이는 첫 번째 관문이다. 간결한 이름이 떠오르지 않는다면 필경 클래스 크기가 너무 커서 그렇다. 클래스 이름이 모호하다면 필경 클래스 책임이 너무 많아서다.
- 단일책임원칙(Single Responsibility Principle, SRP) : 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야 한다는 원칙이다. SRP는 '책임'이라는 개념을 정의하며 적절한 클래스 크기를 제시한다. 클래스는 책임, 즉 변경할 이유가 하나여야 한다는 의미다.
- 큰 클래스 몇 개가 아니라 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직하다. 작은 클랙스는 각자 맡은 책임이 하나며, 변경할 이유가 하나며, 다른 작은 클래스와 협력해 시스템에 필요한 동작을 수행한다.
- 응집도(Cohesion) : 클래스는 인스턴스 변수 수가 작아야 한다. 각 클래스 메서드는 클래스 인스턴스 변수를 하나 이상 사용해야 한다. 일반적으로 메서드가 변수를 더 많이 사용할수록 메서드와 클래스는 응집도가 더 높다. 모든 인스턴스 변수를 메서드마다 사용하는 클래스는 응집도가 가장 높다.
- 응집도를 유지하면 작은 클래스 여럿이 나온다 : 큰 함수를 작은 함수 여럿으로 쪼개다 보면 종종 작은 클래스 여럿으로 쪼갤 기회가 생긴다. 그러면서 프로그램에 점점 더 체계가 잡히고 구조가 투명해진다.
- OCP(Open-Closed Principle) : 클래스는 확장에 개방적이고 수정에 폐쇄적이어야 한다는 객체 지향 설계의 핵심 원칙
- 변경하기 쉬운 클래스 : 새 기능을 수정하거나 기존 기능을 변경할 때 건드릴 코드가 최소인 시스템 구조가 바람직하다. 이상적인 시스템이라면 새 기능을 추가할 때 시스템을 확장할 뿐 기존 코드를 변경하지는 않는다.
- DIP(Dependency Inversion Principle) : 클래스가 상세한 구현이 아니라 추상화에 의존해야 한다는 원칙
- 변경으로부터 격리 : 요구사항은 변하기 마련이다. 따라서 코드도 변하기 마련이다. 객체 지향 프로그래밍 입문에서 우리는 구체적인(concrete) 클래스와 추상(abstract) 클래스가 있다고 배웠다. 구체적인 클래스는 상세한 구현(코드)을 포함하며 추상 클래스는 개념만 포함한다고도 배웠다. 상세한 구현에 의존하는 클라이언트 클래스는 구현이 바뀌면 위험에 빠진다. 그래서 우리는 인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리한다.
😀 오늘 읽은 소감 및 떠오르는 생각
- Java/Spring 웹 개발 공부를 하면서 객체지향 설계 원칙에 대해 공부한적이 있는데 이번 클래스 파트에서 설명하고 있는 대부분의 내용이 공부했던 내용과 동일 선상에 있는 내용이었다. 전에 공부할 때는 용어도 낯설고 잘 외워지지도 않고 그랬는데 자세한 설명과 함께 배우다보니 지난번 보다 더 잘 이해하게 된 것 같다. 하지만 이건 단순히 지식만 쌓인 것이고 실제 설계도 하고 개발도 하면서 계속 익혀나가야 정말 내 것으로 만들 수 있을 것 같다.
🔎 오늘 읽은 다른 사람의 TIL
반응형
'독서' 카테고리의 다른 글
[책] 지구별 여행자 - 류시화 (0) | 2022.03.20 |
---|---|
[책] 편지 - 츠지 히토나리 (0) | 2022.03.20 |
[TIL] 클린코드(Clean Code) - 9장. 단위 테스트 (0) | 2022.03.05 |
[TIL] 클린코드(Clean Code) - 7장. 오류 처리 (0) | 2022.03.05 |
[TIL] 클린코드(Clean Code) - 6장. 객체와 자료 구조 (0) | 2022.03.01 |