내 코드가 그렇게 이상한가요? #13

세나정·2024년 3월 25일
0

13장 - 메서드:클래스설계의토대

13.2 모델링으로 접근해야 하는 구조

모델은 시스템의 구조를 설명하기 위해 사용

시스템이라는 것은 목적을 달성하기 위한 수단, 기술의 본질은 능력을 확장하는 것

결론적으로 시스템인 목적을 달성하기 위한 수단이고 모델은 시스템의 구성요소이므로
즉, 모델은 목적을 달성하기 위한 수단의 일부를 개념화한 것

모델이란 특정 목적달성을 위해 최소한으로 필요한 요소를 갖춘 것
그렇기 때문에 목적에 따라 상품의 모델이 달라짐

13.3 안 좋은 모델의 문제점과 해결 방법

class User {
    id: number;
    name: string;
    email: string;
    passwordDigest: string;
    // 추후에 추가된 인스턴스 변수들
    address: string;
    phoneNumber: string;
    bio: string;
    url: string;
    discountPoint: string;
    themeMode: string;
    birthday: string;
}

이렇게 여러 목적에 무리하게 사용되고 있고 모델링된 것 같지만 모델링이 되어 있지 않는 것을 일관성 없는 모델이라고 부름

모델링을 잘하려면, 반드시 대상이 되는 사회적 활동과 목적을 이해해야 함

1. User와 시스템의 관계

시스템 이용자는 외부에 존재하며, 이런 외부 정보와 내부 정보 (이름, 생년월일 등)이 서로 얽혀 있음 이를 해소 하기 위해선 정보 시스템만이 갖는 특징을 활용

2. 가상 세계를 표현하는 정보 시스템

컴퓨터는 0과 1이라는 비트의 세상, 그러므로 정보 시스템은 현실세계를 컴퓨터세상속에 투영한 가상 현실
정보 시스템은 현실 세계를 컴퓨터 내부 가상 세계로 불러오고 개념적인 처리를 컴퓨터로 빠르게 만들어 효율을 높일 수 있음

3. 목적별로 모델링하라

사용자를 표현하는 수단은 목적에 따라 이름과 형태가 달라짐
깃허브처럼 목적에 따라 설정 항목이 구분되어 있는 케이스가 존재함

이렇듯 정보 시스템에는 '현실 세계에 있는 물리적인 존재'와 '정보 시스템에 있는 모델'은 무조건 일대일 대응이 아니라, 일대다 대응이 되는 경우가 많음

4. 모델은 대상이 아니라 목적 달성의 수단

모델을 단순한 '대상'으로 해석하면, 여기에 모든 목적이 담김 -> 데이터가 거대해지고 일관성이 없음

목적 중심으로 이름을 잘 설계하면 목적을 달성하기에 적절한 모델을 설계할 수 있음

5. 단일 책임이라는 건 단일 목적이라는 것

클래스가 이루어야 하는 목적 반드시 하나
클래스 -> 공통으로 설계해야 좋은 거 아닌가? 'X'
그렇지 않고 오히려 특정 목적에 특화되게 설계해야, 변경하기 쉬운 고품질 구조를 갖게 됨

6. 모델을 다시 확인하는 방법

클래스 구조에 문제가 있다는 것은 모델에 문제가 있다는 것
모델이 부자연스럽거나 일관성이 없는 경우 다음을 검토

  • 해당 모델이 달성하려는 목적을 모두 찾아냄
  • 목적별로 모델링 다시 수정
  • 목적 중심 이름 설계 기반으로 모델에 이름 붙임
  • 모델에 목적 이외의 요소가 들어가있으면 다시 수정

7. 모델과 구현은 반드시 서로 피드백

모델은 구조를 단순화한 것에 불과,
따라서 모델을 기반으로 클래스를 설계하고 코드를 구현하며 세부적인 내용을 수정해야함

모델 != 클래스
일반적으로 모델 하나는 여러 개의 클래스로 구현

모델과 클래스의 피드백을 통해 개선과 혁신을 해야함

13.4 기능성을 좌우하는 모델링

기능성? - 고객의 니즈를 만족하는 정도

1. 숨어있는 목적을 파악하기

상품 구매 모델링

이런 경우 상품 구매 뒤에 숨어있는 목적인 법적인 매매계약 때문에 무게가 달라지므로 모델링을 할 때 고려해야하는 요소가 달라짐

기능을 제대로 발휘하려면 '개념의 정체'와 '뒤에 숨어 있는 중요한 목적'을 잘 파악해야 함

2. 기능성을 혁신하는 '깊은 모델'

고등어 & 꽁치 -> 어류
돼지 -> 포유류

하지만 이와 같은 추상화는 각 모델이 무슨 역할을 하는지 알 수 없음

그렇기 때문에 이것이 아닌 '영양 섭취 수단 (목적 달성 수단)'으로 분리한다하면 추상화 했을 때 모델의 확장성이 커짐

하지만, 이동수단 (이족 보행, 마차, 전차, 비행기, 기차 등등)처럼 구조가 모두 다를 경우에는 구조를 개선하여 기능을 혁신할 수 있는 것

좋은 구조는 변환 능력을 가지고 있음 그렇기 댸문에 뛰어난 변환 능력을 가진 모델을 설계하는 것이 곧 기능성의 혁신으로 이어짐

이처럼 '본질적인 과제를 해결하고, 기능성 혁신에 공헌하는 모델'깊은 모델이라고 부름

설계는 한 번 했다고 끝나는 게 아니라, 매일매일 반복해서 개선해가는 게 중요 이러한 과정에서야 비로소 깊은 모델이 만들어짐

profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글