Readable Code ‐ 객체 지향 패러다임 이해하기 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 객체 지향 패러다임 - 객체 설계
- 관심사의 분리 - 높은 응집도와 낮은 결합도
- 객체 추상화 : 비공개 필드(데이터), 비공개 로직(코드)
- 공개 메서드 선언부를 통해 외부 세계와 소통 -> 각 메서드 기능은 객체의 책임을 드러내는 창구
- 객체 책임이 나뉨에 따라 객체 간 협력 발생
- 절차 지향에서 잘 보이지 않았던 개념 가시화
- 관심사가 한 군데로 모이기 때문에 유지보수성 향상
- 여러 객체를 사용하는 입장에서 구체적인 구현에 신경 쓰지 않고 보다 높은 추상화 레벨에서 도메인 로직을 다룰 수 있다.
- 생성자, 정적 팩토리 메서드에서 유효성 검증이 가능하다.
- setter 사용 자제
- 데이터는 불변이 최고다. 변하는 데이터라도 객체가 핸들링할 수 있어야 한다.
- 객체 내부에서 외부 세계의 개입 없이 자체적인 변경/가공으로 처리할 수 있는지를 확인한다.
- 만약 외부에서 가지고 있는 데이터로 데이터 변경 요청을 해야 하는 경우
set~
이라는 단순한 이름보다는 update~
같이 의도를 드러내는 네이밍을 고려하자.
- getter도 처음에는 사용 자제
- 외부에서 객체 내 데이터가 필요하다고 getter를 남발하는 것은 무례한 행동이다.
- 필드의 수는 적을수록 좋다. 불필요한 데이터가 많을수록 복잡도가 높아지고 대응할 변화가 많아진다.
- 필드 A를 가지고 계산할 수 있는 A` 필드가 있다면 메서드 기능으로 제공한다.
- 단, 미리 가공하는 것이 성능 상 이점이 있다면 필드로 가지고 있는 것이 좋을 수 있다.
📚 SRP(Single Responsibility Principle)
- 하나의 클래스는 단 한 가지의 변경 이유(책임)만을 가져야 한다.
- 객체가 가진 공개 메서드, 필드, 상수 등은 해당 객체의 단일 책임에 의해서만 변경되는가?
- 관심사의 분리
- 높은 응집도, 낮은 결합도
📚 OCP
📚 LSP
📚 ISP
📚 DIP