반응형

가독성 높이는 습관 - 심미적 방법들

 

 

코드 일관성 지키기

코드 정렬

public AdminResponse getResponse(Long userId) {

    User user = new User();
    
    if(user.getAddress()!= null &&user.getStatus()== User.Status.AUTHENTICATION) {
        // doSomething
    }
    
    if   (!user.unregistedAddress()&& !  user.unauthenticated()) {
        // doSometing
    }if     (user.registedAddress() && user.unauthenticated()){
        // doSomething
    }
    return null;
}

- Intellij

  • Mac : Cmd + Option + L
  • Window : Ctrl + Alt + L

- Eclipse

  • Mac : Cmd + Shift + F
  • Window : Ctrl + Shift + F

- VS Code

  • Mac : (문서전체)Shift + Option + F, (선택영역)Cmd + K, F
  • Window : Ctrl + K, F (or Alt + F8)

 

public AdminResponse getResponse(Long userId) {

    User user = new User();
    
    if (user.getAddress() != null && user.getStatus() == User.Status.AUTHENTICATION) {
        // doSomething
    }
    if (!user.unregistedAddress() && !user.unauthenticated()) {
        // doSometing
    }
    if (user.registedAddress() && user.unauthenticated()) {
        // doSomething
    }
    return null;
}

 

 

문단 구분하기

public void order(User user, long bookId) {
    Book book = findBook(bookId);
    UserInfo userInfo = findUserInfo(user);
    BookStock bookStock = findBookStock(bookId);
    chackOnSale(book);
    checkDormant(userInfo);
    checkEnoughAge(book, userInfo);
    checkEnoughStock(bookStock);
    bookStock.decreaseStock();
    bookStockRepository.save(bookStock);
    bookOrderRepository.save(createBookOrder(user, book));
}

 

  • 기능별 개행
public void order(User user, long bookId) {
    Book book = findBook(bookId);
    UserInfo userInfo = findUserInfo(user);
    BookStock bookStock = findBookStock(bookId);
    
    chackOnSale(book);
    checkDormant(userInfo);
    checkEnoughAge(book, userInfo);
    checkEnoughStock(bookStock);
    
    bookStock.decreaseStock();
    
    bookStockRepository.save(bookStock);
    bookOrderRepository.save(createBookOrder(user, book));
}

 

  • 읽어야 할 대상과 대상의 validation 기준으로 정렬
public void order(User user, long bookId) {
    Book book = findBook(bookId);
    chackOnSale(book);
    
    UserInfo userInfo = findUserInfo(user);
    checkDormant(userInfo);
    checkEnoughAge(book, userInfo);
    
    BookStock bookStock = findBookStock(bookId);
    checkEnoughStock(bookStock);

    bookStock.decreaseStock();
    bookStockRepository.save(bookStock);
    
    bookOrderRepository.save(createBookOrder(user, book));
}

 

 

함수나 Dto의 네이밍

interface ProductService {
    Optional<Product> findById(Long id);
    List<Product> findAll(Long id);
}
interface ItemService {
    Optional<Item> get(Long id);
    List<Item> gets(Long id);
    List<Item> getItemList(Long id);
    List<Item> getItems(Long id);
}
interface OptionService {
    Optional<Option> select(Long id);
    List<Option> selectAll(Long id);
}

 

 

논리연산 순서

public void foo(String address) {

    if (address.length() > ADDRESS_MAX_LENGTH) {
    
    }
    
    if (ADDRESS_MAX_LENGTH < address.length()) {
    
    }

 

 

함수내 추상화 수준은 최대한 맞추기

  • 컴퓨터 과학에서 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.
  • 추상화 수준이 높을수록 사람이 이해하기 쉬워짐
Phone phone = new Phone();
phone.call("010-1234-5678");

 

 

 

정리 - 일관성 지키기

  • 1. 코드 정렬
  • 2. 문단 구분
  • 3. 함수나 Dto 네이밍
  • 4. 논리연산의 위치
  • 5. 추상화 수준 맞추기

 

 


반응형

+ Recent posts