6. 객체와 자료구조
추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스이다.
아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.
클래스와 객체지향 기법 : 새로운 자료 타입 추가(핵심 알고리즘은 같으나 여러 종류의 타입 요구)
절차적 코드와 자료구조 : 새로운 함수가 필요(기능적 추가)
디미터 법칙
1. 클래스 c
2. f 가 생성한 객체
3. f 인수로 넘어온 객체
4. C 인스턴스 변수에 저장된 객체
: 객체의 메소드가 리턴하는 메소드를 호출하지 마라.
ex) final String outputdir = ctxt.getOptions().getScratchDir().getAbsolutePath();
ctxt, options, ScratchDir이 객체를 리턴한다면 내부 구조를 숨겨야 하는 디미터 법칙에 위배,
이 자료구조를 리턴한다면 사용해도 된다.
잡종 구조
절반은 객체, 절반은 자료구조인 잡종 구조 > 단점만 모아 놓은 구조
활성 레코드
활성 레코드는 자료 구조로 취급한다.
비즈니스 규칙을 담으면서 내부 자료를 숨기는 객체는 따로 생성한다.
: [활성 레코드](자료구조 + 조회/설정) + [비즈니스 규칙] : 좋은 구조
: [자료구조] + [조회/설정/비즈니스 규칙] : 나쁜 구조, 비즈니스 규칙이 자료구조를 변경 시킬 경우가 많다.