개발자 99% 커뮤니티에서 수다 떨어요!
TIL (Today I Learned)
// 2022.03.01
오늘 읽은 범위
// 6장.객체와 자료 구조
책에서 기억하고 싶은 내용을 써보세요.
자료 추상화
- 변수를 private으로 선언 하더라도 각 값마다 조회 함수와 설정 함수를 제공한다면 구현을 외부로 노출하는 셈이다. 그보다는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
자료/객체 비대칭
- 절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고처야 한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.
디미터 법칙
- 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다. 앞 절에서 봤듯이 자료를 숨기고 함수를 공개한다. 즉 객체는 조회 함수로 내부 구조를 공개하면 안 된다는 의미이다.
기차 충돌
- final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
위와 같이 여러 객차가 한 줄로 이어진 기차처럼 보이는 코드를 기차 충돌이라 부른다. 일반적으로 조잡한 방법이라 여겨지며 만약 객체라면 내부 구조를 노출하므로 디미터 법칙을 위반하므로 피해야 한다.
잡종 구조
- 이런 혼란으로 절반은 객체, 절반은 자료 구조인 잡종 구조가 나온다. 잡종 구조의 공개 조회/설정 함수는 변수를 그대로 노출한다. 이런 잡종 구조는 새로운 함수는 물론이고 새로운 자료 구조도 추가하기 어렵다.
자료 전달 객체(DTO)
- 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다. 이런 자료 구조를 자료 자료 전달 객체라 부르며 굉장히 유용한 구조체이다. 좀 더 일반적인 형태는 '빈'구조다. 빈은 비공개(private) 변수를 조회/설정 함수로 조작한다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
다행이도 많은 선배 개발자들이 변수는 비공개로 선언하고 함수를 통해 변수를 설정하도록 프로그램을 짜라 가르쳐 나는 해당 습관을 길러왔다. 하지만 이런 코드가 어째서 좋은지 왜 이런 번거로운 함수를 만들어야 하는지를 알지 못했다. 이번 클린코드를 통해 이 궁금증을 해소하게 되었다.