🖋️
TIL
  • README
  • docs
    • hibernate-architecture
    • 들어가면서
  • etc
    • bulk-data-and-index
  • java
    • JDK-Dynamic-Proxy
    • Runnable
    • comparator-with-boolean
    • comparator
    • compare-and-swap
    • daemon-thread
    • defensive-copy
    • deserialize
    • 참고
    • functional-interface
    • invoke-dynamic
    • java-memory
    • 참고
    • 참고
    • normalizer
    • serialVersionUID
    • serializable
    • READMD
    • synchronized
    • thread
    • user-thread
    • virtual-thread
    • volatile
  • network
    • FQDN?
    • REST-API
    • escape-unescape
    • exponential-backoff
    • jitter
    • jwt
    • web-application-firewall
  • os
    • avoiding-shared-state
    • check-then-act
    • context-switching
    • race-condition
    • read-modify-write
    • using-synchronizations-and-atomic-operations
  • retrospective
    • 2023
  • spring
    • @Access
    • @Bean
    • @Component
    • @Transactional
    • Persistence context
    • Pessimistic Locking vs. Optimistic Locking
  • tip
    • basic-install-for-aws-ec2-and-rds
    • deploy-script-for-simple-project
    • how-many-korean-characters-can-be-stored-in varchar
    • how-to-choose-the-best-java-garbage-collector
    • how-to-count-files-in-directory
    • how-to-handle-null
    • how-to-kill-process-from-port
    • 레디스를 이용해서 동시 요청 방지하기
    • how-to-use-wildcards-with-scp
    • install-mysql-in-docker
    • lombok-data-and-value-annotations
    • mysql-dump-in-docker
    • not-to-save-null-in-spring-redis
    • PostgreSQL Partial Index로 soft delete 구현
    • remove-non-ascii
    • what-is-the-purpose-of-CDATA
  • trouble shooting
    • [문제명]
    • MySQL의 Collation과 Character Set 충돌 문제 분석
    • possibly-consider-using a shorter-maxLifetime-value
    • Redisson DNS Resolution 문제 분석 및 해결
    • script-permisson-with-git
    • 다중 프로세스 배포 환경에서 연속적인 로그 보존하기
    • 문제
  • book
    • 2022
      • 삶의 격
      • The programmer's Brain
    • 2023
      • IT 개발자의 영어 필살기
      • 구글 엔지니어는 이렇게 일한다
      • 나를 나답게 만드는 것들
      • 대화의 밀도
      • 더 좋은 삶을 위한 철학
      • 도메인-주도-개발-시작하기
      • REAMD.md
      • 만들면서 배우는 클린 아키텍쳐
      • 실리콘밸리의 실험실
      • 육각형-개발자
      • 자바 최적화
      • 파이브-라인스-오브-코드
      • 함께-자라기
    • 2024
      • 결정적-순간의-대화
      • 참고
      • 놓아 버림 : 내 안의 위대함을 되찾는 항복의 기술
      • 데이터-중심-어플리케이션-설계
        • 01장
          • SLO
          • failure
          • fault
          • head-of-line blocking
          • latency
          • maintainability
          • reliability
          • response time
          • scalability
          • tail latency
        • 02장
          • Cypher
          • MapReduce
          • NoSQL
          • impedance mismatch
          • 관계형 모델
      • 말하지-않으면-인생은-바뀌지-않는다
      • 비상식적-성공-법칙
      • 살아갈-날들을-위한-공부
      • 실패는-나침판이다
      • 어른의-국어력
      • 왜 일하는가, 지금 당신이 가장 뜨겁게 물어야 할 첫 번째 질문
      • 우리는 모두 죽는다는 것을 기억하라
      • 위대한 사상가 케빈 켈리의 현실적인 인생 조언
      • 유시민의 글쓰기 특강
      • 은유의-글쓰기-상담소
    • 2025
      • 나는-AI와-공부한다
      • 내-코드가-그렇게-이상한가요?
        • 1. 잘못된 구조의 문제 깨닫기
        • 10. 이름 설계 - 구조를 파악할 수 있는 이름
        • 11. 주석 - 유지보수와 변경의 정확성을 높이는 주석 작성 방법
        • 2. 설계 첫걸음
        • 3. 클래스 설계 - 모든 것과 연결되는 설계 기반
        • 4. 불변 활용하기 - 안정적으로 동작하게 만들기
        • 5. 응집도 - 흩어져 있는 것들
        • 6. 조건분기 - 미궁처럼 복잡한 분기 처리를 무너뜨리는 방법
        • 7. 컬렉션 - 중첩을 제거하는 구조화 테크닉
        • 8. 강한 결합 - 복잡하게 얽혀서 풀 수 없는 구조
        • 9. 설계의 건전성을 해치는 여러 악마
        • 1부-동작하는-도메인-모델-만들기
        • 2부-모델-주도-설계의-기본-요소
        • 3부-더-심층적인-통찰력을-향한-리팩터링
      • 내-코드가-그렇게-이상한가요?
        • README.md
Powered by GitBook
On this page
  • 내용
  • 정리
  • 참고

Was this helpful?

  1. book
  2. 2025
  3. 내-코드가-그렇게-이상한가요?

10. 이름 설계 - 구조를 파악할 수 있는 이름

내용


악마를 불러들이는 이름

  • 흔히 볼 수 있는 좋지 않는 이름 설계는 상품을 그대로 '상품 클래스' 라고 이름 붙이는 것.

  • 관심사 분리?

    • 유스케이스, 목적, 역할에 따라 분리한다.

  • 그냥 상품이 아니라..

    • 예약 상품

    • 주문 상품

    • 재고 상품

    • 발송 상품

이름 설계하기 - 목적 중심 이름 설계

  • 이름을 붙이는 건 '설계'

    • 설계란?

      • 어떤 문제를 해결하기 위한 구조를 생각하거나 만들어 내는 것.

  • 이름은 느슨한 결합, 응집도가 높은 구조를 만드는데 중요한 역할을 한다.

  • 중요 포인트

    • 최대한 구체적, 의미 좁게, 특화된 이름

    • 존재가 아니라 목적 기반

    • 어떤 관심사가 있는지 분석

    • 소리 내어 읽어보고

    • 이용 약관 읽어보고

    • 다른 이름으로 대체할 수 없는지 검토해보고

    • 결합이 느슨하고 응집도가 높은 구조인지 검토

  • 최대한 구체적, 의미 좁게, 특화된 이름

    • 클래스가 작아지고

    • 관계된 클래스가 적으므로 결합도가 낮아지고,

    • 관계된 클래스가 적으므로, 변경 시 영향범위가 좁음

    • 개발 생산성 향상

  • 존재가 아니라 목적 기반

    • bad -> 주소

    • good -> 발송지, 배송지

  • 유비쿼터스 언어?

    • 팀 전체에서 의도를 공유하기 위한 언어

  • 결합이 느슨하고 응집도가 높은 구조인지 검토

    • 여러 의미를 갖고 있다면 분해하자

    • 관련된 클래스 개수가 적으면 적을 수록 느슨하고 응집도 있는 구조일 가능성이 높음

이름 설계 시 주의 사항

  • 수식어를 붙여서 차이를 나타낸다면..

    • e.g. 이 플래그가 true인 User는 문제 있는 회원

      • 각각을 클래스로 설계할 수 없는지 검토해보기.

의미를 알 수 없는 이름

  • 놀람 최소화 원칙

    • 예상하지 못한 놀라움을 최소화하도록 설계해야 한다.

구조에 악영향을 미치는 이름

  • ~info, ~data는 데이만 갖는 클래스니까 로직을 구현하면 안되는 것 같은 느낌

  • DTO (Data Transfer Obejct)

    • 단순 데이터 전송 용도면 괜찮다.

    • 그런데 값을 변경하는 용도는 지양

  • Manager, Processor, Controller

    • 여러 책무를 떠안기 쉬움.

이름을 봤을 때, 위치가 부자연스러운 클래스

  • Enemy 클래스의 관심사는 적

    • Enemy.addItemToParty

      • 관심사가 다른 메서드는 '동사 + 목적어' 형태가 되는 경향이 있음

  • 가능하면 메서드 이름은 동사 하나로 구성되게 하기

  • 클래스 is 상태

    • This member is hungry -> good

    • Common is member in confusion -> bad

      • member is in confusion -> good

이름 축약

  • 기본적으로 이름은 축약하지 말자

정리


  • 책무가 다른 로직은 다른 클래스로 정의하자

  • 이름은 '설계' 하는 것

  • 목적을 생각하고, 사용하자

참고


  • https://product.kyobobook.co.kr/detail/S000202521361

Previous1. 잘못된 구조의 문제 깨닫기Next11. 주석 - 유지보수와 변경의 정확성을 높이는 주석 작성 방법

Last updated 5 days ago

Was this helpful?