home
자바
home
🍩

객체 지향 패러다임

강의명
Readable Code: 읽기 좋은 코드를 작성하는 사고법
강의순서
2
과목
🧹클린코드
수강상태
진행중

객체로 추상화하기

비공개 필드(데이터), 비공개 로직(코드)
공개 메서드 선언부를 통해 외부 세계와 소통 → 각 메서드의 기능은 객체의 책임을 드러내는 창구
객체의 책임이 나뉨에 따라 객체 간 협력 발생

객체가 제공하는 것

절차 지향에서 잘 보이지 않았던 개념을 가시화
관심사가 한 군데로 모이기 때문에, 유지보수성 ↑ ex) 객체 내부에서 객체가 가진 데이터의 유효성 검증 책임을 가질 수 있음
여러 객체를 사용하는 입장에서는 구체적인 구현에 신경 쓰지 않고 보다 높은 추상화 레벨에서 도메인 로직을 다룰 수 있음

새로운 객체를 만들 때 주의할 점

1개의 관심사로 명확하게 책임이 정의되었는지 확인 → 메서드를 추상화할 때와 비슷 → 객체를 만듦으로써 외부 세계와 어떤 소통을 하려고 하는지 생각해보기
생성자, 정적 팩토리 메서드에서 유효성 검증이 가능 → 도메인에 특화된 검증 로직이 들어갈 수 있음
setter 사용 자제
데이터는 불변이 최고. 변하는 데이터라도 객체가 핸들링할 수 있어야 한다.
객체 내부에서 외부 세계의 개입 없이 자체적인 변경/가공으로 처리할 수 있는지 확인
만약 외부에서 가지고 잇는 데이터로 데이터 변경 요청을 해야 하는 경우, ‘set~’ 이라는 단순한 이름 보다는 ‘update~’ 같이 의도를 드러내는 네이밍을 고려
getter도 처음에는 사용 자제. 반드시 필요한 경우에 추가하기 → 외부에서 객체 내 데이터가 필요하다고 getter를 남발하는 것은 무례한 행동
객체에 메시지를 보내라
필드의 수는 적을수록 좋다.
불필요한 데이터가 많을수록 복잡도가 높아지고 대응할 변화가 많아진다.
필드 A를 가지고 계산할 수 있는 A’ 필드가 있다면, 메서드 기능으로 제공
단, 미리 가공하는 것이 성능 상 이점이 있다면, 필드로 가지고 있는 것이 좋을 수도 있다.

SOLID

SRP : Single Responsibility Principle (단일 책임 원칙)
하나의 클래스는 단 한가지의 변경 이유만을 가져야 한다. (변경이유 = 책임)
객체가 가진 공개 메서드, 필드, 상수 등은 해당 객체의 단일 책임에 의해서만 변경 되는가?
관심사의 분리
높은 응집도, 낮은 결합