🔭
Ellery's study archive
Resume(수정중)GithubTistory
  • framework, library
    • Spring core
      • 스프링 트라이앵글 - POJO, IOC/DI, AOP, PSA
      • Servlet
    • Spring MVC
      • DispatcherServlet
      • Validation
    • Spring Boot
    • Spring Security
    • Spring Batch
    • Spring Webflux
    • JPA
    • JUnit, Spring Test
    • etc
      • Slf4j MDC(Mapped Diagnostic Context)
  • ETC, 개발 팁들
    • 개발 팁들
      • 스프링 프로젝트 init 시에 해야될 것들
      • vim 한글 깨질 때 인코딩 방식 지정
      • EC2 ssh connection 쉽게 하기
      • 리눅스 커맨드, netstats
      • Fork한 레포지토리 origin 업데이트
      • git merge, rebase
      • Intellij 자주 쓰는 기능 단축키
      • JSON handling
      • aws user-data.sh
    • Lombok annotation, 권장 방식
    • DB 모델링 시에 인조 식별자 정의하는 케이스
    • Redis pub/sub vs Apache kafka
  • Language
    • Java
      • 자바 버젼별 feature
      • JVM architecture
      • Garbage collection
      • Java String pool
      • java 8 Concurrent
      • Optional
      • Stream
      • Comparator, Comparator
      • Error, Exception
      • Java의 Call by value(pass by value)
      • Java 변수 간 값 Swap 방식 5가지
    • Javascript
      • 자주 쓰는 ES6 문법 정리
      • ES6 module
      • ES6 proxy
      • scope, var closure 이슈, let, const
    • Python
      • @lru_cache
  • CS
    • OS
      • Process, Thread
      • CPU scheduling
      • sync vs async, blocking vs nonblocking
      • Memory segmentation
      • virtual memory
      • 페이지 교체 알고리즘
    • Network
      • UDP
      • TCP
      • DNS
      • HTTP
      • web server, WAS
      • Proxy, Load balancer
      • web socket, WebRTC
      • gRPC
      • web secure
    • DB
      • MySQL
      • index
      • 정규화
      • DB 트랜잭션, 동시성 제어 문제
      • 클러스터링
      • 레플리케이션
      • 샤딩
    • Data Structure, Algorithm
      • AVL tree, Red black tree
      • B-tree, B*tree, B+tree
      • Hash
    • Design pattern
      • SOLID
      • 생성 패턴
        • 싱글톤 패턴
        • 팩토리 메서드 패턴
        • 빌더 패턴
        • Null 객체 패턴
      • 구조 패턴
        • 퍼사드 패턴
        • 프록시 패턴
        • 어댑터 패턴
        • 데코레이터 패턴
      • 행위 패턴
        • 전략 패턴
        • 템플릿 메서드 패턴
        • 상태 패턴
        • 옵저버 패턴
  • 소프트웨어 아키텍쳐
    • Layered Architecture
    • 클린 아키텍쳐
    • DDD
    • etc
      • DTO vs VO
  • 개발 서적들
    • 소트웍스 앤솔로지에서 소개되는 객체지향 생활 체조 원칙 간략 정리
    • 엘레강트 오브젝트 - 새로운 관점에서 바라본 객체지향
    • 만들면서 배우는 클린 아키텍쳐
  • 테크 블로그
Powered by GitBook
On this page
  • 1. 한 메서드에 오직 한 단계의 들여쓰기만 하자
  • 2. else 예약어를 쓰지 않는다
  • 3. 모든 원시값과 문자열을 포장하자
  • 4. 한 줄에 점을 하나만 찍자
  • 5. 줄여쓰지 않는다(축약 하지말기)
  • 6. 모든 엔티티를 작게 유지하자
  • 7. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 말자
  • 8. 일급 컬렉션을 쓰자
  • 9. getter/setter, 프로퍼티를 쓰지 말자
Edit on GitHub
  1. 개발 서적들

소트웍스 앤솔로지에서 소개되는 객체지향 생활 체조 원칙 간략 정리

1. 한 메서드에 오직 한 단계의 들여쓰기만 하자

  • 이를 위해서 Extract method를 적극적으로 사용해서 가독성을 증가시키자

2. else 예약어를 쓰지 않는다

  • early return 방식으로 else를 회피하자 → 가독성 증가

    • optimistic 방식의 if조건보다는 defensive한 if조건을 사용해서 else문을 피하자 (기본 시나리오를 if 조건으로 지정하고, 충족이 안되면 오류 상태를 반환하도록)

3. 모든 원시값과 문자열을 포장하자

  • Primitive obsession 안티패턴을 피하기 위해 모든 primitive 값들을 wrapping 하자 → VO로 만들자

    • Money, Time 등…

    • Primitive Obsession: 기본 데이터 유형을 지나치게 사용하거나, 불필요하게 복잡한 데이터 구졸ㄹ 사용해서 코드를 작성하는 패턴 → 복잡성 증가, 유지보수 어려워짐

      → class, struct, enum 등의 데이터 타입을 이용해서 코드 가독성과 유지보수성을 향상시키자

4. 한 줄에 점을 하나만 찍자

  • 메서드 호출을 연쇄적으로 연결해선 안된다.

  • law of demeter에 따라 한 객체가 알아야하는 다른 객체를 최소한으로 유지한다(인접한 친구에게만 말을 걸어라)

  • Builder 패턴(메서드 체인 패턴)을 사용할 때는 적용되지 않음

5. 줄여쓰지 않는다(축약 하지말기)

  • 충분히 기능, 목적 설명이 가능한 네이밍을 붙이자

    • 애플리케이션을 만들 때… UML 다이어그램이 있다고 가정하면

      1. 관심사를 분리함(ex. MVC 패턴, layered architecture, DDD 등의 기준을 두고)

      2. 컴포넌간의 상호작용을 고민하면서 네이밍한다. 이 때 구성요소 간에 사용할 수 있는 인터페이스를 식별함

      3. 네이밍이 애매할 때는 이 클래스의 존재가 타당한지, 더 분리할 수 있을지 고민한다

  • github 등의 다른 좋은 프로젝트의 네이밍을 참고하자. JPA, spring 프로젝트 내부 패키지명에서도 정답을 찾을 수 있음 ex) JPA에서 CRUDRepository 인터페이스의 findById 같은 메서드명

6. 모든 엔티티를 작게 유지하자

  • 하나의 클래스는 50줄을 넘기지 말자

  • 하나의 패키지에는 10개 이상의 파일을 담지 말자

  • 하나의 클래스가 100~150줄을 넘어가면 분명 분리할 수 있을 것

7. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 말자

  • 이를 잘 지키면 응집도와 캡슐화의 수준을 높일 수 있음

8. 일급 컬렉션을 쓰자

  • 일급 컬렉션: 컬렉션을 포함하는 해당 class는 컬렉션을 제외한 다른 멤버변수를 포함하지 않음

    • ex) Unit이라는 하나의 클래스가 있고, 이를 이용해서 LIst<Unit> 단위로 사용하는 Units는 일급컬렉션이다. 이런 식으로 구현을 하면, 일급컬렉션의 public API를 이용해서 유저에게 일부의 기능만 사용하도록 할 수 있다

9. getter/setter, 프로퍼티를 쓰지 말자

  • getter 까지는 괜찮아도 setter는 절대 쓰지 말자 - JavaBean 규약에 따라 작성된 자바 클래스

PreviousDTO vs VONext엘레강트 오브젝트 - 새로운 관점에서 바라본 객체지향

Last updated 2 years ago

적절한 네이밍 방법 →

https://williamdurand.fr/2012/01/24/designing-software-by-naming-things/