클린코드 챌린지 Day 10

seul·2024년 2월 4일

개발자북클럽

목록 보기
7/11

📅 TIL (Today I Learned): 2024.02.04
📋 오늘 읽은 범위: 6. 객체와 자료 구조


😎 책에서 기억하고 싶은 내용을 써보세요.

변수를 비공개로 정의하는 이유가 있다.
남들이 변수에 의존하지 않게 만들고 싶어서다.

그렇다면 어째서 조회 함수(get)와 설정 함수(set)를 당연하게 공개(public)해 비공개 변수를 외부에 노출할까?

자료 추상화

변수 사이에 '함수'라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다.
구현을 감추려면 추상화가 필요하다!

추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.

자료/객체 비대칭

객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다.
자료 구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.
두 정의는 본질적으로 상반된다.

  • 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우: 클래스와 객체 지향 기법이 적합
  • 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우: 절차적인 코드와 자료 구조가 좀 더 적합

디미터 법칙

모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.
클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다 (클래스 C, f가 생성한 객체, f 인수로 넘어온 객체, C 인스턴스 변수에 저장된 객체)

구조체 감추기

객체라면 뭔가를 하라고 말해야지 속을 드러내라고 말하면 안 된다.

자료 전달 객체

자료 구조체의 전형적인 형태: 공개 변수만 있고 함수가 없는 클래스 = Data Transfer Object
데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석할 때 유용

활성 레코드

DTO의 특수한 형태, save나 find와 같은 탐색 함수도 제공
활성 레코드에 비즈니스 규칙 메서드를 추가해 이런 자료 구조를 객체로 취급하는 개발자가 흔하다. (이거 나 아녀?) -> 이러면 잡종 구조가 나온다.


🥺 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.

객체랑 자료구조라고 해서 뻔한 내용이 나올 줄 알았더니 실제 개발 시에 사용하는 내용들이다.
일을 하면서 '이건 객체고, 이건 자료구조다.'라고 구분하면서 하기보다는 느낌 상 서로 성격이 다르다고만 생각하고 만들었던 것들에 큰 차이가 있었을 줄이야...? (심지어 모든 것을 객체라고 불렀다.)

추후 확장되는 것들 중 자료 타입의 확장이 늘어난다면 클래스를 사용하고, 함수가 많이 추가도니다면 자료 구조를 사용하는 것이 좋겠다는 팁도 얻었다. 굿!


🤔 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

이해되지 않는 내용은 없었으나 내가 이 개념을 실제 개발 시에 바로 녹여낼 수 있을지 고민이다...

profile
자존감은 일상의 성실함으로부터 온다

0개의 댓글