πΎ [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 ν¨ν΄ μ΄λ λ μ΄μ΄λ μν€ν μ² κ° λ μ ν©ν©λλ€.