Coding Bloom
Spring REST API 작성하기 (3) - Entity와 Bulider 패턴 본문
Entity : 실제로 DB와 매칭될 클래스들이며 JPA를 사용할경우 Entity 클래스의 수정을 통해 데이터를 작업함..!!
@id = primaryKey , @GeneratedValue = pk값을 DB에게 위임한다..
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "bid", unique = true, nullable = false )
private int bid;
@Column(length = 15, nullable = false )
private Date datetime;
@Column(length = 50, nullable = false )
private String user_id;
@Column(length = 30, nullable = false )
private String user_name;
@Column(length = 100, nullable = false )
private String title;
@Column(length = 65535, nullable = false )
private String content;
@Column(length = 255, nullable = true )
private String file1;
@Column(length = 255, nullable = true )
private String file1_name;
@Column(length = 255, nullable = true )
private int views;
@Column(length = 255, nullable = true )
private int is_head;
@Column(length = 255, nullable = true )
private int is_open;
이런식으로 실제 DB셋팅과 똑같게 컬럼명, 데이터타입, 길이를 적어서 Entity 클래스를 선언해준다.
@AllArgsConstructor
//Builder 패턴을 사용할 시 매개변수가 없는 기본 생성자를 무조건 선언해줘야하기때문에 접근권한을 설정하여 생성해준다
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder(builderClassName = "NoticeBuilder", builderMethodName = "NoticeBuilder")
그다음 Respository 인터페이스를 작성하고 JpaRepository<Notice, Integer> 작성을해주면
JPA에 내장된 메소드를 사용할수 있다.
save()
find()
findBy()
.
.
등 자세한건 검색을 해봐야 할것같다.
@GetMapping("/{bid}")
public Notice findNoticeBybid(@PathVariable("bid") int bid) {
return noticeJpaRepository.findByBid(bid);
}
작성한 메소드를 실행하기위해 Controller에 작성해주고 Swagger2를 통해 실행해본다.
실행은... 해봤는데... 음
에러는 안나는데 결과값이 안나오는 문제가 있다.. 왜인지는 아직 해결하지못함.. . ㅜㅜ
아무튼 이런식으로 내장메소드를 사용한다. ㅎㅎ ; ;
자바빈즈패턴의 생성자 란?
TestVO testVO = new TestVO();
testVO.setUSerIdx(1);
testVO.setUserName("kimseohae");
testVO.setTitle("test");
testVO.setTitleA("test");
testVO.setTitleB("test");
testVO.setTitleC("test");
..
testVO.setTitleD("test");
매개변수가 없는 생성자로 객채를 만든후
Setter 메스드들을 호출하여 원하는 매개변수의 값을 설정하는 방식이다.
하지만 심각한 단점이 있다..
설정해줘야할 매개변수의 수가 무수히 많다면? 그만큼의 Setter메소드를 호출해야하고,
값을 설정하지않을 것들도 세팅을해줘야함.
그래서 사용하는것이 Builder 패턴!!!
빌더패턴은 점층적 생성자패턴의 안정성과 자바빈즈 패턴의 가독성을 겸비한 패턴.
필요한 객체를 직접만드는 대신에 필요한 매개변수만으로 생성자를 호출하여 빌더객체를 얻는다.
이 빌더 객체가 제공하는 일종의 Setter 메소드들로 선택한 매개변수를 설정하여 유연하게 객체를 만들수있다.
public class Test {
private final String userName;
private final Long userIdx;
private final String title;
public static class Builder {
private String userName = "";
private String userIdx = "";
private String title = "";
public Builder() {}
public Builder userName(String userName){
userName = userName;
return this;
}
public Builder userIdx(Long userIdx){
userIdx = userIdx;
return this;
}
public Builder title(String title){
title = title;
return this;
}
public Test build(){
return new Test(this);
}
}
public Test(Builder builder) {
userName = builder.userName;
userIdx = builder.userIdx;
title = builder.title;
}
}
위 클래스를 사용하여 객체를 생성한다.
Test test = new Test
.Builder()
.userName("kimseohae")
.userIdx(1)
.title("hello")
.build();
마무리
결과적으로 생성자, 정적팩터리, 자바빈즈 패턴 보다는 빌더 패턴을 선택하는게 훨씬 낫고, 처리해야할 매개변수가 많다면 빌더 패턴을 고려해봐야한다.
특히 매개변수 중 같은 타입을 가진 매개변수가 많다면 빌더 패턴을 사용하자.
패턴별장단점과 역할 설명이 잘되어있는 글발견
읽어봐두는게 좋을것같다.
'Spring Boot (API)' 카테고리의 다른 글
Post Man - JWT (0) | 2023.06.08 |
---|---|
Spring REST API 작성하기 (2) - service 이용/DB (0) | 2022.11.17 |