전체 글(79)
-
DTO변환 위치 : Controller일까? Service일까?
결론 : 정답이 없다. PostRequest는 toEntity()를 통해 PostRequest(DTO) → Entity로 변환이 가능하다. @Getter @Builder @AllArgsConstructor(access = AccessLevel.PROTECTED) @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PostRequest { private String title; private String content; private String writer; public Post toEntity() { return Post.builder() .title(title) .content(content) .writer(writer) .build();..
2024.01.12 -
DTO 왜 사용해? Entity와 DTO를 왜 분리해?
요약 : DTO(Data Transfer Object)를 사용하는 이유는 크게 두가지로 요약할 수 있다. 1. 필요한 데이터만을 View에 전달하기 위해 2. View와 Domain간의 결합도를 낮추기 위해 Entity와 DTO를 분리하는 이유는 관심사의 분리 및 역할 분리를 위해서이다. 1. DTO를 사용하는 이유 필요한 데이터만을 View에 전달하기 위해 public class User { public Long id; public String name; public String email; public String password; //외부에 노출되서는 안 될 정보 public DetailInformation detailInformation; //외부에 노출되서는 안 될 정보 //비즈니스 로직, ge..
2024.01.12 -
EnumMap이 HashMap보다 성능이 좋은 이유
요약 : 별도로 Hash값을 계산 및 해싱 충돌작업에 대비하는 과정이 필요한 HashMap과 다르게, EnumMap은 Enum의 ‘선언 순서’를 인덱스로 활용하므로, 모든 CRUD과정이 O(1)의 시간을 확보한다. 따라서, Map을 사용하는데 Key가 Enum이라면, EnumMap을 고려하자! EnumMap의 Put() VS HashMap의 Put() EnumMap public V put(K key, V value) { typeCheck(key); int index = key.ordinal(); Object oldValue = vals[index]; vals[index] = maskNull(value); if (oldValue == null) size++; return unmaskNull(oldValue..
2024.01.12 -
Enum 캐싱방법(정적 팩토리 메소드 내용 일 부 발췌)
mathCount에 따른 RANK 를 얻어오고 싶다면 public enum Rank { RANK1(5), RANK2(4), RANK3(3), RANK4(2), RANK5(1), FAIL(0); private final int matchCount; Rank(final int matchCount) { this.matchCount = matchCount; } public static Rank getRankByMatchCount(final int matchCount) { return Arrays.stream(values()) .filter(rank -> rank.matchCount == matchCount) .findFirst() .orElse(FAIL); } } Enum 종류가 N개 있다고 했을때, 매번 O(..
2024.01.12 -
상속을 자제하고 합성을 이용하자
결론 : 상속을 이용하면 결합도가 높아지기 때문에 합성을 권장하고 있다. 상속은 명확한 is - a 관계에 있는 경우, 그리고상위 클래스가 확장할 목적으로 설게되었고 문서화도 잘되어 있는 경우에 사용하면 좋다. 하지만, 아래와 같은 이유로 현업에서 상속을 지양하고 있다. 1. 결합도가 높아진다. 결합도 : 하나의 모듈이 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타내는 의존 정도를 뜻한다. 객체지향 프로그래밍에서는 결합도는 낮을수록, 응집도는 높을수록 좋다. 그래서 추상화에 의존함으로써 다른 객체에 대한 결합도는 최소화하고 응집도를 최대화하여 변경 가능성을 최소화 할 수 있다. 2. 불필요한 기능 상속 부모 클래스에 메소드를 추가했을때, 자식 클래스에는 적합하지 않는 메소드가 상속되는 문제이다..
2024.01.12 -
정적 팩토리 메소드 권장 이유
정적 팩토리 메소드 권장 이유 정적 팩토리 메소드 : of, from 등 메소드 이름을 지정하고, 생성자 호출 방식이 아닌, 메서드 호출 방식으로 객체를 생성하는 것 정적 팩토리 메소드 장점 (5가지) 이름을 가질 수 있다. 호출 될 때마다 인스턴스를 새로 생성하지 않아도 된다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. 1. 이름을 가질 수 있다. 기름이 없는 자동차, 기름을 가지고 자동차를 만드는 방식 → 명확히 할 수 있음. A. new를 이용한 예 public class Car { private final String name; ..
2024.01.12