패키지 구조
•
src
◦
java
▪
domain
•
user
◦
controller
◦
service
▪
impl
◦
mapper
▪
dto
▪
entity
◦
dto
▪
controller
▪
service
◦
repository
◦
entity
•
recipe
•
review
•
…
▪
global
▪
sample
Naming
•
축약어를 최소화하자
◦
웬만하면 다 써주자
◦
길이가 100자가 넘어가도 나쁠게 하나도 없다
•
클래스 명은 파스칼 케이스
◦
시작을 대문자로 시작하며, 나머지는 단어의 시작마다 대문자
◦
약어도 시작을 소문자로 적음
▪
ex) URL → Url
◦
ex) public class BoardController {…}
•
필드 명, 메소드 명은 카멜 케이스
◦
시작을 소문자로 시작하며, 나머지는 단어의 시작마다 대문자
◦
약어도 시작을 소문자로 적음
▪
ex) URL → Url
◦
ex) private String imageUrl;
•
필드는 명사로 시작과 끝을 맺음
◦
필드는 인스턴스의 상태를 나타냄
•
메소드는 동사로 시작 (끝은 명사로 맺어도 됨)
◦
메소드는 인스턴스의 행위를 나타냄
Package
•
소문자로 작명
•
띄워쓰기 금지
•
영어 소문자와 숫자로만 적음
◦
특수문자 금지
▪
ex) org.springeel.config_jpa
•
옳바른 예시
◦
org.springeel.config.jpa2
Annotation
•
Lombok 관련된 annotation은 맨 위로 작성
•
길이가 짧은 것부터 위에서 작성하기
◦
옵션은 제외한 길이
•
옳바른 예시
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Table(name = "TB_BOARD")
@Entity
public class Board {}
Java
복사
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/api/v1")
@RestController
public class Controller {}
Java
복사
Method
•
인자 값들은 final로 설정해두기
◦
변경이 필요하다면, final 달아주지 말기
•
인자마다 개행 처리해두기
•
메소드의 인자 부분에 닫는 소괄호와 여는 중괄호는 다음 줄에 놔두기
•
옳은 예시
@Builder
public User(
final String email,
final String password,
final String nickname,
final UserRole role
) { // 이 부분
this.email = email;
this.password = password;
this.nickname = nickname;
this.role = role;
}
Java
복사
Entity
•
엔티티 필드값 수정은 엔티티 클래스에서 메소드를 만들어서 사용한다.
◦
update 해줄 때는 @Transactional 붙여주기
•
연관관계 부분은 필드중 맨 밑에다가 생성
◦
양방향인 부분은 연관관계 중에서도 맨 마지막에 해두기
•
생성자 레벨에 @Builder 달아주기
◦
id는 넣어주지 않도록 한다.
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "TB_BOARD")
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Builder
public Board(String name){
this.name = name;
}
}
Java
복사
DTO
•
record 사용하기
•
이름/행위/{request/response}/Dto
◦
BoardCreateRequestDto
◦
BoardCreateResponseDto
•
Controller 전용 DTO와 Service 전용 DTO를 나눠서 작성하기
@PostMapping
public void create(
@RequestBody TestCreateControllerRequestDto controllerRequestDto
) {
TestCreateServiceRequestDto serviceRequestDto =
TestMapper.INSTANCE.toTestServiceRequestDto(controllerRequestDto);
testService.create(serviceRequestDto);
}
Java
복사
•
생성/단건조회/전체조회/수정/삭제 - create/read/readAll/update/delete
◦
예외가 있을 수 있음
Controller
•
반환 타입은 ResponseEntity로 통일
Repository
•
단일 값을 받아 올 때는 Optional 사용하기
•
단일 값을 받아 올 때는 findBy… 로 작명
•
2개 이상의 값을 받아 올 때는 findAllBy… 로 작명
•
필드 명을 구분해주기 위해서 _ 사용하지 말기
◦
ex) findByUser_Id ⇒ findByUserId
•
단, 문법적으로 필요하다면 사용하기
◦
ex) findByRecipe_Review
•
웬만하면 id로 검색하지 말고, 엔티티로 검색하기 (outer join 사용을 방지할 수 있음)
◦
ex) findByIdAndUserId ⇒ findByIdAndUser
Intellij
•
Build and run using 과 Run tests using 해두기
•
메소드 생성 시, final 자동 생성시키게 설정해두기
코딩 스타일 적용하기
구글 코딩 스타일 가이드 문서
https://google.github.io/styleguide/javaguide.html
Push 하기 전에 해야 될 일
•
코드 포맷팅하기
◦
ctrl + alt + l
◦
ctrl + alt + o