개발 기간 : 2024.08.09 ~ 2024.08.15
개발 목적 : 클라이언트가 일정을 생성, 조회, 수정 및 삭제할 수 있는 RESTful API 서버를 구현한다.
🍏 레포지토리 링크

manager 테이블의 manager_Id 를 schedule 의 manager_Id 의 외래키로 사용하는 형식이다.
private 설정을 안한 것. 익숙치 않아서 캡슐화를 제대로 하지 않았다.Entity 별로 3 Layer 분리를 하지 않은 점Setter 를 남발한 점기존에 Dto 객체에 값을 맵핑할 때 Entity 객체를 매개변수로 넣어서 Dto 생성자로 만들었다. 아래와 같이

마지막에 return 되는 부분을 봤을 때 responseDto 에 requestDto 객체를 주입하며 새로운 Dto 객체를 생성하고 return 한다.
하지만, 해당 부분을 정적 팩토리 메서드로 구현하면 아래와 같다.

물론, 다른 Layer 내의 메서드긴 하지만 다음과 같은 특징을 볼 수 있다.
response 객체를 새로 생성하지 않고 리턴한다.of 라고 생성자에 네이밍을 한다.특징에서 봤던 것처럼
첫째, 새로운 객체를 생성하지 않아 메모리상 이점이 존재한다.
둘째, 여러 생성자로 로직을 구현할 때 어떤 변수들을 활용해 생성한 객체인지 네이밍을 활용할 수 있다. (코드의 가독성 증가)
텍스트만 봤을때 이해가 가지 않을 수 있다. 한 번 정적 팩토리 메서드의 구현부를 보자.

다음과 같이 객체를 매개변수로 받았을 때 static 으로 설정된 of 라는 메서드 내에서 새로운 response 객체를 생성하고 있다. 이를 통해 static 으로 관리되면서 매번 객체를 return 할 때 response 객체를 생성하지 않고 이미 생성된 static 메서드 안에서 값만 변경되며 메모리적 이점이 존재할 것 같다..
또한 만약에, 객체를 생성할 때 필드 값이 선택적으로 몇개만 넣어서 생성하고 싶다고 생각해보자. 예를 들면 mangerId 와 managerName, managerEmail 정보가 없는 TodoResponse 를 생성하는 것처럼.
public static TodoResponse nullManagerTodoResponse(Todo entity) {
entity.getId(),
entity.getTodo(),
0, // managerId
"", // managerName
"", // managerEmail
entity.getCreateAt(),
entity.getUpdateAt()
}
이렇게 네이밍을 해주면 그냥 생성자로 객체를 생성하는 것보다 직관적으로 알 수 있기에 편리할 수 있을 거 같다.
확실한 건 프로젝트 때 써 봐야 편리함을 알 거 같다!
난 이번 프로젝트에서 엔티티, Dto 에 값을 넣을 때 Setter 를 활용했다. (Lombok 이 편리해서)
하지만, 해설 코드에서 봤을 땐 Setter 의 사용이 전혀 없었다.
이유는 다음과 같았다.
Entity 자체의 값을 변경할 수 있다는 건 위험하다.Setter 를 통해 값을 저장할 때 코드의 의문이 생길 수 있다.Setter 를 사용하는 대신 값을 넣을 부분을 따로 메서드로 만들어 활용한다.
이것도 앞으로 프로젝트에서 해봐야 체감이 될 듯..