하이 ~~ !!!
지난 포스팅에서 REST 에서 CRUD 를 구현해봤다.
오늘은 실무에서 자주 볼 수 있는 형태의 패턴을 공개할거다. ㅎㅎ
먼저 혹시 CRUD 구현 안해본사람은 아래링크 보고 따라 개발해보고 오자.
https://devkingdom.tistory.com/110
위의 링크에서 보면 UserService나 UserDao에 로직을 다 구현해 놓았다.
하지만 이를 인터페이스와 서비스로 분리하는 것이 좋다. 이렇게 분리를 해놓으면 확장성과 유연성이 좋아진 코드를 작성할 수 있다.
지금 회원관리 모듈을 만들 수 있는데, 이 회원관리 모듈을 어떤서비스든지 커스터마이징해서 사용할 수 있게된다는 이야기이다.
전체 구성은 아래와 같이 구성될 것이다.
실제 소스를 보자.
Service
UserService는 이제 인터페이스로 스펙을 정의만 해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import com.test.crudPjt.model.User;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public interface UserService {
public List<User> getAllUsers();
public User getUserByUserId(String userId);
public User registerUser(User user);
public void modifyUser(String userId, User user);
public void removeUser(String userId);
}
|
그리고 실제 구현은 위의 인터페이스를 구현한 클래스로 만들어지는데, 해당 서비스를 구현했다는 의미로 뒤에 Impl을 붙인 UserServiceImpl로 명명했다. 실제로 이전에 서비스에서 하던 일들을 여기서 해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import com.test.crudPjt.model.User;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Override
public List<User> getAllUsers() {
return userDao.getAllUsers();
}
@Override
public User getUserByUserId(String userId) {
return userDao.getUserByUserId(userId);
}
@Override
public User registerUser(User user) {
return userDao.insertUser(user);
}
@Override
public void modifyUser(String userId, User user) {
userDao.updateUser(userId, user);
}
@Override
public void removeUser(String userId) {
userDao.deleteUser(userId);
}
}
|
DAO
DAO도 마찬가지다.
아래 소스는 UserDao 인터페이스이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import com.test.crudPjt.model.User;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
public interface UserDao {
public List<User> getAllUsers();
public User getUserByUserId(String userId);
public User insertUser(User user);
public void updateUser(String userId,User user);
public void deleteUser(String userId);
}
|
그리고 해당 인터페이스를 구현한 UserDaoImpl 클래스이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import com.test.crudPjt.model.User;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
public class UserDaoImpl implements UserDao {
public static List<User> users;
//실제 데이터는 DB에서 가져오는게 맞으나 .... 아직 DB가 없으니 임시로 세팅해놓음
static {
users = new ArrayList<>();
users.add(new User(1,"testName1","testId1", "1234"));
users.add(new User(2,"testName2","testId2", "1234"));
users.add(new User(3,"testName3","testId3", "1234"));
users.add(new User(4,"testName4","testId4", "1234"));
users.add(new User(5,"testName5","testId5", "1234"));
}
// Select all user.
@Override
public List<User> getAllUsers() {
return users;
}
// Select one user by userId
@Override
public User getUserByUserId(String userId) {
return users
.stream()
.filter(user -> user.getUserId().equals(userId))
.findAny()
.orElse(new User(-1, "", "", ""));
}
// Insert User
@Override
public User insertUser(User user) {
users.add(user);
return user;
}
// Modify User
@Override
public void updateUser(String userId,User user) {
.filter(curUser -> curUser.getUserId().equals(userId))
.findAny()
.orElse(new User(-1, "", "", ""))
.setUserName(user.getUserName());
}
// Delete User
@Override
public void deleteUser(String userId) {
users.removeIf(user -> user.getUserId().equals(userId));
}
}
|
다들 본인의 코드를 개선해보자. 그럼 즐거운 코딩~
반응형
'Develop > Spring' 카테고리의 다른 글
[Spring] JUnit을 활용한 스프링 메서드 모듈 테스트하기 (0) | 2020.03.29 |
---|---|
[Spring] JWT 를 활용한 인증 구현 (7) | 2020.03.28 |
[Spring] REST에서 CRUD 구현하기 (11) | 2020.03.23 |
[Spring] Spring MVC 로 RESTFul 서비스 개발하기 (2) (0) | 2020.03.22 |
[Spring] Spring MVC 로 RESTFul 서비스 개발하기 (1) (4) | 2020.03.21 |
댓글