๐พ [CS] MVP ํจํด.
1๏ธโฃ MVP ํจํด.
- MVP ํจํด์ MVC ํจํด์ผ๋ก๋ถํฐ ํ์๋์์ผ๋ฉฐ MVC์์ C์ ํด๋นํ๋ ์ปจํธ๋กค๋ฌ๊ฐ ํ๋ ์ ํฐ(Presenter)๋ก ๊ต์ฒด๋ ํจํด์ ๋๋ค.
- ๋ทฐ์ ํ๋ ์ ํฐ๋ ์ผ๋์ผ ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ MVC ํจํด๋ณด๋ค ๋ ๊ฐํ ๊ฒฐํฉ์ ์ง๋ ๋์์ธ ํจํด์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
2๏ธโฃ ์๋ฐ์์์ MVP ํจํด.
- ์๋ฐ์์์ MVP ํจํด์ ์ฃผ๋ก, ๋ฐ์คํฌํ ์ ํ๋ฆฌ์ผ์ด์ (JavaFX, Swing) ๋๋ ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
- ์๋ฐ์์๋ ์ฃผ๋ก MVC ํจํด์ด ๋ง์ด ์ฌ์ฉ๋์ง๋ง, MVP ํจํด์ UI์ ๋น์ฆ๋์ค ๋ก์ง์ ๋์ฑ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋ฐ๋ผ ๋ ์ ํฉํ ์ ์์ต๋๋ค.
3๏ธโฃ MVP ํจํด์ ๊ตฌ์กฐ.
- MVP๋ Model-View-Presenter์ ์ฝ์๋ก, ์๋์ ๊ฐ์ ์ธ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ๋๋ฉ๋๋ค.
-
1. Model(๋ชจ๋ธ)
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค.
- ์: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ, API ํธ์ถ, ๋ฐ์ดํฐ ๊ฐ๊ณต.
-
2. View(๋ทฐ)
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ด๋นํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ณด๋ ํ๋ฉด์ ํ์ํ๊ณ ์ ๋ ฅ์ ๋ฐ์ต๋๋ค.
- View๋ Presenter์ ์์กดํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ์ญํ ์ ํฉ๋๋ค.
- ์: ์๋ฐ์
JPanel
,JFrame
(Swing) ๋๋Activity
,Fragment
(์๋๋ก์ด๋)
-
3. Presenter(ํ๋ ์ ํฐ)
- View์ Model๊ฐ์ ์ค์ฌ์ ์ญํ ์ ํ๋ฉฐ, ๋ทฐ์์ ๋ฐ์ํ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๊ณ , ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์์ ๊ฐ์ ธ์ ๋ทฐ์ ์ ๋ฌํฉ๋๋ค.
- ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ฉฐ, View์ Model์ ์ง์ ์ฐ๊ฒฐํ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
- Presenter๋ View ์ธํฐํ์ด์ค๋ฅผ ํตํด View์ ํต์ ํ๊ณ , ํ ์คํธ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ญ๋๋ค.
4๏ธโฃ ๋ฐฑ์๋๋ฅผ Java๋ก ๊ตฌํ์ MVP ํจํด์ด ์ฌ์ฉ๋๋์?
- ์ผ๋ฐ์ ์ผ๋ก MVPํจํด(Model-View-Presenter) ์ ์ฃผ๋ก ํ๋ก ํธ์๋ ๋๋ UI ์ค์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- MVP ํจํด์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๋ ๋ฐ ์ค์ ์ ๋๊ธฐ ๋๋ฌธ์, ๋ฐ์คํฌํ ์ ํ๋ฆฌ์ผ์ด์ (JavaFX, Swing)์ด๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ (์๋๋ก์ด๋)์์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Java๋ก ๊ตฌํํ ๋๋ MVP ํจํด์ด ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ, ๊ทธ ๋์ ๋ค๋ฅธ ๋์์ธ ํจํด์ด ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
1. MVP ํจํด์ ๋ชฉ์ .
- MVP ํจํด์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ์ค์ฌ์ผ๋ก View์ ๋น์ฆ๋์ค ๋ก์ง(Presenter) ์ ๋ถ๋ฆฌํ๋ ๋ฐ ๋ชฉ์ ์ด ์์ต๋๋ค.
- ํ์ง๋ง ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์๋ ์๋ฒ ์ธก ๋น์ฆ๋์ค ๋ก์ง, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, API ์ ๊ณต ๋ฑ์ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์, UI ์์๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
- ๋ฐ๋ผ์ View ๋ผ๋ ๊ฐ๋ ์ด ๋ฐฑ์๋์ ์ ํฉํ์ง ์์ต๋๋ค.
2. ๋ฐฑ์๋์์๋ MVC ํจํด์ด ๋ ์ ํฉ.
- Java ๊ธฐ๋ฐ ๋ฐฑ์ํธ ๊ฐ๋ฐ์์๋ MVC(Model-View-Controller) ํจํด ์ด๋ ์๋น์ค ๊ณ์ธต ํจํด ๊ณผ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋ ์ผ๋ฐ์ ์ ๋๋ค.
- ํนํ, Spring Framework ๊ฐ์ ์ธ๊ธฐ ์๋ ๋ฐฑ์๋ ํ๋ ์์ํฌ์์๋ MVC ํจํด์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฐฑ์๋์์ ์ปจํธ๋กค๋ฌ(Controller) ๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ชจ๋ธ(Model) ์ด ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ฉฐ, ๋ทฐ(View) ๋ API ์๋ต(JSON, XML ๋ฑ)์ ์์ฑํ๋ ์ญํ ์ ํฉ๋๋ค.
๋ฐฑ์๋์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋์์ธ ํจํด.
-
1. MVC ํจํด(Model-View-Controller)
- ์๋ฒ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๋ฉฐ, API ์๋ต์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
-
2. ์๋น์ค ๊ณ์ธต ํจํด
- ๋น์ฆ๋์ค ๋ก์ง์ ์๋น์ค ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ํจํด์ ๋๋ค.
-
3. Repository ํจํด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค ๋ก์ง์ ์ถ์ํํ์ฌ, ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ฐ์ดํฐ ์ก์ธ์ค๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
-
4. Command ํจํด
- ์ฌ์ฉ์์ ์์ฒญ์ด๋ ๋ช ๋ น์ ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก, ์ฌ๋ฌ ์์ฒญ์ ๊ด๋ฆฌํ๋๋ฐ ์ ๋ฆฌํฉ๋๋ค.
-
5. Observer ํจํด
- ์ํ ๋ณํ๋ฅผ ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ๊ตฌ๋ ํ๊ณ ๋ฐ์ํ๋ ํจํด์ผ๋ก, ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
3. ๋ฐฑ์๋์์ ์ฌ์ฉํ๋ ๋์์ธ ํจํด์ ์์.
-
1. Spring MVC ํจํด
- Spring์์๋ Controller๊ฐ HTTP ์์ฒญ์ ๋ฐ๊ณ , Service์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ ๋ค, Model์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ View๋ฅผ ๋ฐํํ๋ ์ ํ์ ์ธ MVC ํจํด์ ์ฌ์ฉํฉ๋๋ค.
- ์ฌ๊ธฐ์ View๋ HTML ๋๋ JSON, XML๊ณผ ๊ฐ์ ์๋ต ํฌ๋งท์ ์๋ฏธํฉ๋๋ค.
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findUserById(id);
return new ResponseEntity<>(user, HttpStatus.OK);
}
}
- Controller ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ ํ ์๋ตํฉ๋๋ค.
- Service ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ค๊ฐ ๊ณ์ธต ์ญํ ์ ํฉ๋๋ค.
-
Repository ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๋ ๋ถ๋ถ์ ๋๋ค.
-
2. ์๋น์ค ๊ณ์ธต ํจํด
- ์๋น์ค ๊ณ์ธต์ ์ฌ์ฉํ๋ฉด ์ปจํธ๋กค๋ฌ๊ฐ ์ง์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ค๋ฃจ์ง ์๊ณ , ์๋น์ค ํด๋์ค๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ด๋ก ์ธํด ์ฝ๋๊ฐ ๋ ๊ตฌ์กฐ์ ์ผ๋ก ๊ด๋ฆฌ๋๊ณ ํ
์คํธ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
```java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findUserById(Long id) {
return userRepository.findById(id).orElseThrow(() -> new UserNotFoundException(id));
}
}
``` -
3. Repository ํจํด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ก์ง์ ๋ณ๋์
Repository
์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ์ฌ ๋ฐ์ดํฐ ์์ธ์ค๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์ถ์ํํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ๋ก์ง์ ๋ณ๋์
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๋ก์ง์ ์ถ์ํ
}
4. MVP ํจํด์ด ๋ฐฑ์๋์์ ์ ํฉํ์ง ์์ ์ด์ .
-
View์ ๋ํ ์์กด์ฑ.
- MVP ํจํด์ ํต์ฌ ์์๋ View ์ด๋ฉฐ, ๋ฐฑ์๋์๋ UI๋ฅผ ๋ค๋ฃจ์ง ์๊ธฐ ๋๋ฌธ์ View์ ์ญํ ์ด ์กด์ฌํ์ง ์์ต๋๋ค.
- ๋ฐฑ์๋๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ ๋ค๋ฃจ์ง ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ํด๋ผ์ด์ธํธ๋ ์๋ต์ ๋ฐํํ๋ ์ญํ ์ ํฉ๋๋ค.
-
๋ถ๋ฆฌ๋ ๋ก์ง.
- ๋ฐฑ์๋๋ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, ์ด ๊ณผ์ ์์ ๋น์ฆ๋์ค ๋ก์ง, ๋ฐ์ดํฐ ์์ธ์ค, API ์๋ต ์์ฑ ๋ฑ๊ณผ ๊ฐ์ ๋ณต์กํ ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด ์ง๋๋ค.
- ์ด๋ฌํ ์์ ์ ๊ด๋ฆฌํ๋ ๋ฐ๋ MVC ํจํด ์ด๋ ๋ ์ด์ด๋ ์ํคํ ์ฒ ๊ฐ ๋ ์ ํฉํฉ๋๋ค.