๐ง ๋ฌธ์ ์ํฉ
@Service
@Transactional
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final MemberRepository memberRepository;
public Long create(CreatePostCommand command) {
Member member = memberRepository.findById(command.memberId())
.orElseThrow(NotFoundMemberException::new);
Post post = command.toPost(member);
Post saved = postRepository.save(post);
return saved.getId();
}
}
์์ ๊ฐ์ด JpaRepository์ findById ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋์๋ ๋ณดํต orElseThrow()์ ํจ๊ป ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด ๋ถ๋ถ์ด ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ, ์๋น์ค์ private method ๋ฑ์ผ๋ก ์ถ์ถํ๋ ๊ฒฝ์ฐ๋ฅผ ์ข ์ข ๋ณด์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ง์ด์ฃ .
@Service
@Transactional
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final MemberRepository memberRepository;
public Long create(CreatePostCommand command) {
Member member = findMemberById(command.memberId());
Post post = command.toPost(member);
Post saved = postRepository.save(post);
return saved.getId();
}
private Member findMemberById(Long memberId) {
return memberRepository.findById(command.memberId())
.orElseThrow(NotFoundMemberException::new);
}
}
๊ทธ๋ฌ๋ ์ ์ฝ๋๋ฅผ ์ฌ๋ฌ ์๋น์ค์์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด, ์ด ์ญ์๋ ์ค๋ณต๋์ด ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค๋ ๋ฌธ์ ๋ฅผ ํผํ ์๋ ์์ต๋๋ค.
๐ง ํด๊ฒฐ
public interface MemberRepository extends JpaRepository<Member, Long> {
default Member getById(Long id) {
return findById(id).orElseThrow(NotFoundMemberException::new);
}
}
์์ ๊ฐ์ด getById()๋ผ๋ default ๋ฉ์๋๋ฅผ ์ ์ํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
@Service
@Transactional
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final MemberRepository memberRepository;
public Long create(CreatePostCommand command) {
Member member = memberRepository.getById(command.memberId());
Post post = command.toPost(member);
Post saved = postRepository.save(post);
return saved.getId();
}
}
'๐๏ธ Spring > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ง ๋ฌธ์ ์ํฉ
@Service
@Transactional
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final MemberRepository memberRepository;
public Long create(CreatePostCommand command) {
Member member = memberRepository.findById(command.memberId())
.orElseThrow(NotFoundMemberException::new);
Post post = command.toPost(member);
Post saved = postRepository.save(post);
return saved.getId();
}
}
์์ ๊ฐ์ด JpaRepository์ findById ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋์๋ ๋ณดํต orElseThrow()์ ํจ๊ป ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด ๋ถ๋ถ์ด ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ, ์๋น์ค์ private method ๋ฑ์ผ๋ก ์ถ์ถํ๋ ๊ฒฝ์ฐ๋ฅผ ์ข ์ข ๋ณด์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ง์ด์ฃ .
@Service
@Transactional
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final MemberRepository memberRepository;
public Long create(CreatePostCommand command) {
Member member = findMemberById(command.memberId());
Post post = command.toPost(member);
Post saved = postRepository.save(post);
return saved.getId();
}
private Member findMemberById(Long memberId) {
return memberRepository.findById(command.memberId())
.orElseThrow(NotFoundMemberException::new);
}
}
๊ทธ๋ฌ๋ ์ ์ฝ๋๋ฅผ ์ฌ๋ฌ ์๋น์ค์์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด, ์ด ์ญ์๋ ์ค๋ณต๋์ด ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค๋ ๋ฌธ์ ๋ฅผ ํผํ ์๋ ์์ต๋๋ค.
๐ง ํด๊ฒฐ
public interface MemberRepository extends JpaRepository<Member, Long> {
default Member getById(Long id) {
return findById(id).orElseThrow(NotFoundMemberException::new);
}
}
์์ ๊ฐ์ด getById()๋ผ๋ default ๋ฉ์๋๋ฅผ ์ ์ํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
@Service
@Transactional
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final MemberRepository memberRepository;
public Long create(CreatePostCommand command) {
Member member = memberRepository.getById(command.memberId());
Post post = command.toPost(member);
Post saved = postRepository.save(post);
return saved.getId();
}
}