컨트롤러, 서비스, 도메인, 리포지토리, DB
중에서
컨트롤러, 도메인, 리포지토리를 지금까지 배웠다.
오늘은 서비스를 만들어보는 실습이다.
리포지토리와 서비스의 차이점
리포지토리를 만들 때
새로운 회원 정보를 저장하기, 이름을 기준으로 탐색하기, ID를 기준으로 탐색하기 등
어떤 기계의 기본적인 기능을 하나하나 만들듯이 코드를 짰다면,
서비스를 만들 때는
조금 더 비즈니스와 맞닿은 형태로 만들어야 한다.
고객이 쓸 기능이 무엇무엇인가를 고민해서 그걸 구현하는 것이다!
리포지토리에서 만들었던 기본 기능들을 조각조각 합하고, 더 필요한 것이 있다면 덧붙여서 서비스를 완성한다.
준비하기
main에 service용 패키지를 만들고 그 안에 MemberService 클래스를 만든다.
회원가입 기능 만들기
먼저 회원가입 기능을 만들어준다.
동일한 이름을 가진 회원이 이미 존재하는지 검사하고, 그렇다면 Exception을 throw한다.
Exception이 throw되지 않았다면 회원을 save한다.
리턴값을 ID로 한 것은 강사님 맘이다.
ifPresent()
여기서 ifPresent()는 Optional에서 제공하는 기능이다.
처음 배웠을 때 들었듯이 Optional은 null을 편리하게 처리하기 위해 사용한다.
그래서, 결과값이 null일 수도 아닐 수도 있는 상황에서 Optional로 리턴값을 감싼다.
isPresent()는 Optional 내의 값이 null인지 아닌지를 판별해준다. 만약 null이라면 false를, 값이 존재한다면 true를 리턴한다.
그러므로 위의 회원가입 코드를 다시 설명하자면
회원가입을 시도하는 Member의 이름을 기준으로 findByName을 실행한 결과값에 ifPresent를 했을 때 그 결과가 true라면 중복되는 이름이 존재하는 것이므로 Exception을 throw하는 것이다.
근데 m -> 이 무슨 의미인지는 모르겠다.
마우스를 올려보면 Member 객체라는데 왜 여기에 Member가 들어가는 것이며 이름은 왜 m이며 Member m 객체를 만든 적이 없는데 왜 쓸 수 있는 것이며 람다의 역할은 뭐지?
람다에 익숙하지 않아서 저번부터 헷갈리는 게 많다.
(+ (2022.07.28, PM6:10)) 그래서 람다식에 대해 대충 알아봤다.
편리한 기능: 리팩터링 단축키
아무튼 강사님께서는 여기서 유용한 기능을 하나 더 알려주셨다.
리팩터링 기능이다.
윈도우에서 단축키는 이거다.
딱 보니 이 부분을 함수로 따로 떼어놓으면 좋을 것 같다. Refactoring 기능을 이용해서 편하게 함수로 떼어내보자.
여러 가지 리팩터링이 있다. 오... 개좋다... 7번 메소드 추출을 선택한다.
그럼 이렇게 된다. 여기서 함수의 이름을 설정해준다.
완료되었다.
함수를 새로 만들어준 것뿐만 아니라 원래 자리에 그 함수를 호출해주고 매개변수까지 자동으로 넣어줬다.
정말 편하다.
Eclipse야 반성해라
편리한 기능: 리턴값을 담을 변수 자동생성
그리고 정말 편한 단축키 하나 더
이렇게 함수만 쓰고
ctrl+alt+V를 누르면
리턴값을 담을 변수를 만들어준다. 이름까지 적절하게 정해서... 세상에...
Eclipse 삼진아웃
나머지 기능 만들기
아래에다가
전체 회원 조회 기능과
ID로 특정 회원을 조회하는 기능을 만들어준다.
'스프링 공부 > 인프런 김영한 스프링 입문 노트정리' 카테고리의 다른 글
4-1. 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2022.07.29 |
---|---|
3-5. 회원 서비스 테스트 (0) | 2022.07.28 |
3-3. 회원 리포지토리 테스트 케이스 작성 (0) | 2022.07.27 |
3-2. 회원 도메인과 리포지토리 만들기 (0) | 2022.07.26 |
3-1. 비즈니스 요구사항 정리 (0) | 2022.07.25 |