개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
객체가 포함하는 자료를 표현할 가장 좋은 방법을 고민하여 작성하자.
변수를 private로 설정했을 때 getter와 setter를 제공한다면 외부로 노출하는 셈이다.
객체와 자료구조를 반반 섞은 잡종 구조는 피하는 것이 좋다.
TIL (Today I Learned) 날짜
2024. 09. 01
오늘 읽은 범위
6장. 객체와 자료 구조
책에서 기억하고 싶은 내용을 써보세요.
어째서 수많은 프로그래머들은 클래스에서 속성을 비공개로 정의하고 Getter와 Setter를 공개해 비공개 변수를 외부에 노출할까?
객체
추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다.
개발자는 객체가 포함하는 자료를 포현할 가장 좋은 방법을 심각하게 고민해야 한다.
아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다.
자료구조
자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.
객체와 자료구조의 반대되는 성질
절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면 새 클래스를 추가하기 쉽다.
절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.
디미터 법칙
클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다.
클래스 C
f가 생성한 객체
f 인수로 넘어온 객체
C 인스턴스 변수에 저장된 객체
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
객체와 자료구조 그 둘을 구분하여 생각해본 적이 없다. 어쩌면 그동안 내가 작성했던 Class는 책에서 표현하는 잡종 구조일지 모르겠다. 객체와 자료 구조를 구분하는 것이 꼭 필요한 일인가는 고민을 해봐야겠지만 나누어서 지칭한다면 소통에는 더 편리하지 않을까 라는 생각은 들었다.
Q. 객체와 자료 구조 중 어떤 것을 사용하는 것이 더 좋나요? 상황에 따라 다르다면 예시를 들어주세요.
이번 장을 읽으면서 든 생각을 말하기위한 질문이다. 객체와 자료구조가 서로 반대되는 성질을 가지고있다고 설명을 했지만 나는 상황에 따라서가 아니라 객체만 사용하는 것이 더 낫다고 생각이 들었다. 자료구조의 형태는 너무 불리하지않은가? 객체는 강제성을 띄고있다. 이러한 강제성은 개발자가 실수를 하지않도록 도와준다. 물론 자료구조에 비해 새 함수를 추가하는 것이 번거롭지만 실수를 막는다는 사실까지 본다면 더 나은 형태가 아닌가? 다른 개발자 분들의 의견도 듣고싶다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
디미터 법칙에서는 C의 메서드 f가 호출하는 메서드의 종류에 대해 설명했다. 그리고 3줄로 나눈 코드에서 ctxt, options, scratchDir이 객체라면 디미터 법칙을 위반한다고 설명했다. 무엇을 어긴걸까? ctxt, options, scratchDir은 각각의 객체이고 getter는 각 객체의 메서드로 실행했다. 최상위 ctxt 객체의 속성에 다른 객체가 포함되어있겠지만 법칙을 위반한 건 아니지않나 이해가 잘 되지않는다. 객체로서 지켜야할 내부 구조를 공개하지않는다 라는 개념은 지키지 못했지만 여기서 설명한 디미터 법칙은 지킨것이 아닌가? 내가 디미터 법칙을 이해하지 못한 것인가?
오늘 읽은 다른사람의 TIL