회원관리프로그램 - 회원 서비스 작성
회원 리포지토리와 다르게 회원 서비스는 조금더 비즈니스적인 기능(회원가입, 특정회원 조회, 전체회원조회)들을 작성합니다.
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
//회원가입
public Long join(Member member){
// 동명이인 불가
validateDuplicateMember(member);
memberRepository.save(member);
return member.getId();
}
// 동명이인 체크 함수
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName()) // optional 자료형
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 이름입니다");
});
}
// 전체회원조회
public List<Member> findMembers(){
return memberRepository.findAll();
}
// 특정회원조회
public Optional<Member> findOne(Long memberId){
return member**텍스트**Repository.findById(memberId);
}
}
회원가입시 같은 이름의 회원은 가입할 수 없으며 이를 따로 validateDuplicateMember로 정의해 사용합니다.
final
아래 코드에서 final이라는 keyword를 처음 봐서 정리해보려고 합니다.
private final MemberRepository memberRepository;
찾아보니 final은 두번 값을 할당할 수 없게 한다는 의미로 쓰이는데요. 따라서 지금같이 클래스를 객체로 받을 때 쓰이면 한번만 받을 수 있다는 의미여서 재할당을 나중에 시도하더라도 그 오류를 잡아줍니다
만약 class에 final을 붙이면 상속을 제한한다고 합니다. 또 class안에 method에 final을 붙이면 상속을 받아도 해당 method는 오버라이드가 금지됩니다.