이번주는 10장과 11장이다. 이제 절반정도 읽었다!
클래스 체계
public static
변수private static
변수private
인스턴스 변수 → public
변수는 캡슐화
를 위해 거의 안쓸듯public
함수private
함수는 호출하는 public
함수 아래로 나는 이렇게 잘하고 있었다! 하하
클래스는 작게!!
책임
을 하나로 → 객체지향 5원칙중 SRP
를 지키라는 뜻 아닐까?SRP(Single Responsibility Principle)
- 바로 설명이 나온다 ㄷㄷ깨끗하고 체계적인 소프트웨어
보다 돌아가는 소프트웨어
에 초점을 맞추다보니 이 규칙을 잘 지키지 않게 된다 → 지금 만들고 있는 스터디봇
리팩토링하는 나같다.. 응집도
응집도
를 유지하면 작은 클래스 여럿이 나온다.이번에 리팩토링을 진행하면서 거대한 클래스를 계속 쪼개고 있는데 쪼개도 쪼개도 부족한 느낌이다..
응집도
가 높은 상태를 유지하면서 쪼개봐야겠다
SQL
이라는 클래스에 있던 메서드들을 SQL
클래스를 상속받는 CreateSQL
, SelectSQL
등등으로 쪼개서 관리한다 → 이 방식은 새로운 기능을 추가할 때 기존의 클래스를 수정하는게 아닌 기존 클래스를 상속받아 확장
하라는 의미인 것 같다딱
변경하기 쉬운 클래스
라는 소제목만 봤을때OCP
를 위반하는게 아닌가? 라는 생각이 들었는데 추상화하라는 뜻 같다!
마침 오늘 리팩토링 하면서Commands
인터페이스를 상속받는TextCommands
와RecordCommands
로 나눠서 확장성을 고려해줬는데 딱 나오니까 기분이 좋다 ㅎㅎ
인터페이스
와 추상 클래스
를 사용해 구현이 미치는 영향을 격리전략 패턴
같은 것들을 이용해 유연한 코드를 짤 수 있도록 보여준다시스템 제작과 사용을 분리하라
관심사
public Service getService() {
if (service == null) {
service = new MyServiceImpl(....); // 모든 상황에 적합한지?
}
return service;
}
초기화 지연
혹은 계산 지연
이라는 기법 - 필요할 때까지 객체 생성 X - 불필요한 부하 없음, null 반환 안함Main
분리
main
함수에서 시스템에 필요한 객체를 생성한 후 애플리케이션에 넘김 - 애플리케이션은 main
이나 객체가 생성되는 과정을 전혀 모름의존성 주입
확장
애자일
방식의 핵심자바 프록시
SpringBoot
만 해보고 Spring
은 안해봐서 모르는 부분도 좀 있다..테스트 주도 시스템 아키텍처 구축
POJO
객체로 구현되는 모듈화된 관심사 영역(도메인)으로 구성된다. 이렇게 서로 다른 영역은 해당 영역 코드에 최소한의 영향을 미치는 괒ㄴ점이나 유사한 도구를 사용해 통합한다. 이런 구조 역시 코드와 마찬가지로 테스트 주도 기법을 적용할 수 있다.의사 결정을 최적화하라
결론
TDD
가 제공하는 장점이 사라진다. 11장은 좀 어려운 것 같다....