
IT ๊ฐ๋ ์ ๋ฆฌ (ํต์ฌ ๊ฐ๋ :์ฒ ํ, DTO/VO, ๊ณ์ฐ๊ธฐ ๊ตฌํ)
1. ํค๋ผํด๋ ์ดํ ์ค vs ํ๋ฅด๋ฉ๋๋ฐ์ค: ์ธ์์ ๋ณํ๋, ์ ๋ณํ๋? ๐ฅ
- ํค๋ผํด๋ ์ดํ ์ค: ๋ชจ๋ ๊ฑด ๋ณํ๋ค! (Variable) ๐
- ์ธ์์ ๋ณธ์ง์ ๋ณํ์ผ. ๋ชจ๋ ๊ฒ ๋์์์ด ํ๋ฅด๊ณ ๋ฐ๋๋ค๊ณ ๋ดค์ด.
- ๊ทผ๋ฐ ๊ทธ ๋ณํ ์์๋ ๋ก๊ณ ์ค(์ง์์ ์ด์ฑ์ ์๋ฆฌ)๋ผ๋ ๊ท์น์ด ์์ด. ์๋ฅผ ๋ค์ด, ๋ถ์ ๊ณ์ ํ๋ฉด์ ๋ณํ์ง๋ง ๊ทธ ์์ ์กฐํ๊ฐ ์์ง! ๐ฅ
- ๋น์ : ํ๋ก๊ทธ๋๋ฐ์์ ๋ณ์(variable) ๊ฐ์. ๊ฐ์ด ๊ณ์ ๋ฐ๋๋ ๊ทธ๋ฆ!
- ๐ ๋ช ์ธ: “๊ฐ์ ๊ฐ๋ฌผ์ ๋ ๋ฒ ๋ค์ด๊ฐ ์ ์๋ค.”
- ํ๋ฅด๋ฉ๋๋ฐ์ค: ์๋ฌด๊ฒ๋ ์ ๋ณํ๋ค! (Constant) ๐ชจ
- ๋ณํ๋ ์ฐฉ๊ฐ์ด์ผ! ์ง์ง ์ค์ฌ๋ **์กด์ฌ(Being)**์ด๊ณ , ์ด๊ฑด ํ๋์ด๊ณ , ๋ถ๋ณํ๊ณ , ์์ํด.
- ๊ฐ๊ฐ์ผ๋ก ๋ณํ๊ฐ ๋ณด์ด์ง๋ง, ์ด์ฑ์ผ๋ก “์กด์ฌ๋ ์ ๋ ์ ๋ณํ๋ค”๊ณ ์ฃผ์ฅํ์ง.
- ๋น์ : ํ๋ก๊ทธ๋๋ฐ์์ ์์(constant) ๊ฐ์. ํ ๋ฒ ์ ํ๋ฉด ๋ชป ๋ฐ๊พธ๋ ๊ทธ๋ฆ!
- ๐ ๋ช ์ธ: “์กด์ฌํ๋ ๊ฒ์ ์กด์ฌํ๊ณ , ์กด์ฌํ์ง ์๋ ๊ฒ์ ์กด์ฌํ์ง ์๋๋ค.”
- ํ ์ค ๋น๊ต:
- ํค๋ผํด๋ ์ดํ ์ค → “๋ชจ๋ ๊ฑด ๋ณํ๋ค” (๋ณ์์ฒ๋ผ).
- ํ๋ฅด๋ฉ๋๋ฐ์ค → “์๋ฌด๊ฒ๋ ์ ๋ณํ๋ค” (์์์ฒ๋ผ).
- ๋ณด๋์ค: ์ด ๋์ ํ๋ผํค๊ณผ ์๋ฆฌ์คํ ํ ๋ ์ค ์ฒ ํ์ ๋ฟ๋ฆฌ๊ฐ ๋์ด. ํ๋ผํค์ ๋์ ์กฐํ์ํค๋ ค ํ๊ณ , ์๋ฆฌ์คํ ํ ๋ ์ค๋ ‘ํ์๊ณผ ์ง๋ฃ’๋ก ๋ฐ์ ์์ผฐ์ง!
2. DTO vs VO: ๋ฐ์ดํฐ ์ ๋ฌ vs ์๋ฏธ ์๋ ๊ฐ ๐ฆ๐ง
- DTO (Data Transfer Object):
- ๋ญ์ผ ์ด๊ฒ? ์คํ๋ง์์ ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๋ ๊ทธ๋ฆ! Controller ↔ Service ๊ฐ ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉ.
- ํน์ง: ๋น์ฆ๋์ค ๋ก์ง ์์, ๋จ์ ๋ฐ์ดํฐ ๋ฌถ์. ๋ณดํต getter/setter๋ง ์์ด.
- ์์: UserDto (์ด๋ฆ, ์ด๋ฉ์ผ ๋ฑ์ ๋ด์ ์ ๋ฌ).
- VO (Value Object):
- ๋ญ์ผ ์ด๊ฒ? ๊ฐ ์์ฒด๋ฅผ ํํํ๋ ๊ฐ์ฒด! ๊ณ ์ ID ์์ด ์์ฑ ๊ฐ์ผ๋ก๋ง ์๋ฏธ๋ฅผ ๊ฐ์ง.
- ํน์ง: ๋ถ๋ณ(Immutable), equals()๋ก ๊ฐ ๋๋ฑ์ฑ ๋น๊ต. ์: Address ๊ฐ์ฒด(์์ธ์ ๊ฐ๋จ๊ตฌ ํ ํค๋๋ก 10์ ๊ฐ์ ๊ฐ์ด๋ฉด ๊ฐ์ ๊ฐ์ฒด๋ก ์ทจ๊ธ).
- ์์: Money, Coordinate.
- ๋น๊ต:
๊ตฌ๋ถDTOVO
๋ชฉ์ ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ ๋๋ฉ์ธ ๋ด ๊ฐ ํํ ๋ถ๋ณ์ฑ ๋ณ๊ฒฝ ๊ฐ๋ฅ (setter ์์) ๋ถ๋ณ (setter ์์) ๋ก์ง ์์ ๊ฐ ๊ด๋ จ ๊ฒ์ฆ/๊ณ์ฐ ๊ฐ๋ฅ ์์ UserDto, OrderRequestDto Address, Money - ๋น์ : DTO๋ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๋ ํ๋ฐฐ ์์๐ฆ, VO๋ ๊ทธ ์์ฒด๋ก ์๋ฏธ ์๋ ๋ฌผ๊ฑด๐ง .
3. Boolean๊ณผ Void: ์ฐธ/๊ฑฐ์ง๊ณผ ์๋ฌด๊ฒ๋ ์์! โ ๐ซ
- Boolean:
- ๋ญ์ผ ์ด๊ฒ? ์ฐธ(true) ๋๋ ๊ฑฐ์ง(false)๋ง ๋ด๋ ํ์ .
- ์์: boolean isLogin = true; → ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ํ๋จ.
- Void:
- ๋ญ์ผ ์ด๊ฒ? ์๋ฌด ๊ฐ๋ ๋ฐํํ์ง ์๋ ๋ฉ์๋ ํ์ . ๊ทธ๋ฅ ๋์(์ถ๋ ฅ, ์ ์ฅ ๋ฑ)๋ง ํ๊ณ ๋!
- ์์: public void printHello() { System.out.println("Hello"); } → ์ถ๋ ฅ๋ง ํ๊ณ ๋ฐํ๊ฐ ์์.
4. Getter์ Setter: ์ฝ๊ณ ์ฐ๊ธฐ์ ๋น๋ฐ ๐๏ธ
- Getter:
- ๋ญ์ผ ์ด๊ฒ? ๊ฐ์ฒด์ ๊ฐ์ ๊บผ๋ด์ค๋ ๋ฉ์๋. get์ผ๋ก ์์.
- ์์:
javapublic class Person {private String name;public String getName() { return name; }}
- ์ฌ์ฉ: Person p = new Person(); String name = p.getName();
- ๋น์ : ๊ฐ์ ์ฝ๋ ๋ง์๊ฒฝ๐ญ.
- Setter:
- ๋ญ์ผ ์ด๊ฒ? ๊ฐ์ฒด์ ๊ฐ์ ์ค์ ํ๋ ๋ฉ์๋. set์ผ๋ก ์์.
- ์์:
javapublic class Person {private String name;public void setName(String newName) { this.name = newName; }}
- ์ฌ์ฉ: p.setName("์์์ง"); → ์ด๋ฆ ๋ณ๊ฒฝ.
- ๋น์ : ๊ฐ์ ์ฐ๋ ํโ๏ธ.
- ํ ์ค ์์ฝ: Getter๋ ์ฝ๊ธฐ, Setter๋ ์ฐ๊ธฐ!
5. ๊ณ์ฐ๊ธฐ ํํ์ด์ง: ์คํ๋ง์ผ๋ก ๋ง๋ค์ด๋ณด์! ๐งฎ
- ๊ตฌ์กฐ: ์คํ๋ง MVC๋ก ๊ณ์ฐ๊ธฐ ํํ์ด์ง๋ฅผ ๋ง๋ค๋ ค๋ฉด Controller, Service, Domain์ผ๋ก ๋๋ .
- ํ๋ฆ:
- ์ฌ์ฉ์๊ฐ ์ซ์์ ์ฐ์ฐ์ ์ ๋ ฅ → /calculate ์์ฒญ (์: ?num1=5&op=+&num2=3).
- Controller๊ฐ ์์ฒญ ๋ฐ๊ณ Service์ ๊ณ์ฐ ๋งก๊น.
- Service๊ฐ ๊ณ์ฐํด์ ๊ฒฐ๊ณผ ๋ง๋ค๊ณ .
- Controller๊ฐ JSON์ผ๋ก ๊ฒฐ๊ณผ ๋ฐํ.
- ๋ธ๋ผ์ฐ์ ์์ ๊ฒฐ๊ณผ ๋์! ๐
- ์ฝ๋ ์์:
- Domain (CalculationRequest.java - DTO):
javapublic class CalculationRequest {private double num1;private String op;private double num2;// Getter, Setterpublic double getNum1() { return num1; }public void setNum1(double num1) { this.num1 = num1; }public String getOp() { return op; }public void setOp(String op) { this.op = op; }public double getNum2() { return num2; }public void setNum2(double num2) { this.num2 = num2; }}
- Domain (CalculationResult.java - VO):
javapublic class CalculationResult {private final double result; // ๋ถ๋ณ (VO ํน์ง)public CalculationResult(double result) { this.result = result; }public double getResult() { return result; }@Overridepublic boolean equals(Object o) { /* ๊ฐ ๋๋ฑ์ฑ ๋น๊ต */ }}
- Service (CalculatorService.java):
java@Servicepublic class CalculatorService {public CalculationResult calculate(CalculationRequest request) {double num1 = request.getNum1();String op = request.getOp();double num2 = request.getNum2();double result;switch (op) {case "+": result = num1 + num2; break;case "-": result = num1 - num2; break;case "*": result = num1 * num2; break;case "/": result = num1 / num2; break;default: throw new IllegalArgumentException("์๋ชป๋ ์ฐ์ฐ์!");}return new CalculationResult(result);}}
- Controller (CalculatorController.java):
java@RestController@RequestMapping("/calculator")public class CalculatorController {@Autowiredprivate CalculatorService calculatorService;@GetMapping("/calculate")public ResponseEntity<?> calculate(@RequestParam("num1") double num1,@RequestParam("op") String op,@RequestParam("num2") double num2) {CalculationRequest request = new CalculationRequest();request.setNum1(num1);request.setOp(op);request.setNum2(num2);CalculationResult result = calculatorService.calculate(request);return ResponseEntity.ok().body(Map.of("result", result.getResult()));}}
- Domain (CalculationRequest.java - DTO):
- ๋น์ : Controller๋ ๊ณ์ฐ๊ธฐ ๋ฒํผ ๋๋ฅด๋ ์ฌ๋, Service๋ ๊ณ์ฐ๊ธฐ ๋๋, Domain์ ์ ๋ ฅ๊ฐ๊ณผ ๊ฒฐ๊ณผ๊ฐ์ ๋ด๋ ๋ฉ๋ชจ์ง์ผ! ๐งฎ
ํค๋ผํด๋ผ์ดํ ์ค์ ํ๋ฅด๋ฉ๋๋ฐ์ค ์ฐจ์ด์
๐ฅ ํค๋ผํด๋ ์ดํ ์ค์ ์ฒ ํ
- ๊ทธ๋ ์ธ์์ ๋ณธ์ง์ ๋ณํ๋ผ๊ณ ๋ดค์ต๋๋ค.
- ๊ทธ๋ฌ๋ ๊ทธ ๋ณํ ์์๋ **๋ก๊ณ ์ค(logos, ์ง์์ ์ด์ฑ์ ์๋ฆฌ)**๊ฐ ์๋ค๊ณ ์ฃผ์ฅํ์ฃ .
- ์๋ฅผ ๋ค์ด, ๋ถ์ ๋์์์ด ํ์ค๋ฅด๋ฉฐ ๋ณํ์ง๋ง, ๊ทธ ์์๋ ์ผ์ ํ ๊ท์น๊ณผ ์กฐํ๊ฐ ์์ต๋๋ค.
→ ์ฆ, ๋ณํ ์์ ์ง์๋ฅผ ๊ฐ์กฐํ ์ฒ ํ์์ ๋๋ค.
๐ ํต์ฌ ๊ตฌ์ :
“๊ฐ์ ๊ฐ๋ฌผ์ ๋ ๋ฒ ๋ค์ด๊ฐ ์ ์๋ค.”
๐ชจ ํ๋ฅด๋ฉ๋๋ฐ์ค์ ์ฒ ํ
- ๊ทธ๋ ์คํ๋ ค “๋ณํ๋ ์ฐฉ๊ฐ์ด๋ค”๋ผ๊ณ ์ฃผ์ฅํ์ต๋๋ค.
- ์ง์ ํ ์ค์ฌ๋ ์ค์ง ‘์กด์ฌ(Being)’์ด๋ฉฐ, ๊ทธ๊ฒ์ ํ๋์ด๊ณ ๋ถ๋ณํ๋ฉฐ ์์ํ๋ค๊ณ ๋ณด์์ฃ .
- ๊ฐ๊ฐ์ผ๋ก๋ ๋ณํ๋ฅผ ๋๋ผ์ง๋ง, **์ด์ฑ์ผ๋ก ๋ณด๋ฉด ‘์กด์ฌ๋ ๋ณํ ์ ์๋ค’**๋ ๊ฒฐ๋ก ์ ์ด๋ฆ
๋๋ค.
→ ์ฆ, ๋ณํ์ ์ธ๊ณ๋ ํ์์ด๊ณ , ์กด์ฌ๋ง์ด ์ง๋ฆฌ๋ผ๋ ๊ด์ ์ ๋๋ค.
๐ ํต์ฌ ๊ตฌ์ :
“์กด์ฌํ๋ ๊ฒ์ ์กด์ฌํ๊ณ , ์กด์ฌํ์ง ์๋ ๊ฒ์ ์กด์ฌํ์ง ์๋๋ค.”
๐งฉ ๋ ์ฒ ํ์์ ๋๋น ์์ฝ
- ํค๋ผํด๋ ์ดํ ์ค → “๋ชจ๋ ๊ฒ์ ๋ณํ๋ค.”
- ํ๋ฅด๋ฉ๋๋ฐ์ค → “์๋ฌด๊ฒ๋ ๋ณํ์ง ์๋๋ค.”
์ด ๋ ์ฒ ํ์๋ ์ดํ ํ๋ผํค๊ณผ ์๋ฆฌ์คํ ํ ๋ ์ค ์ฒ ํ์ ์ค์ํ ์ถ๋ฐ์ ์ด ๋์์ด์.
(ํ๋ผํค์ ์ด ๋์ ์กฐํ์ํค๋ ค ํ๊ณ , ์๋ฆฌ์คํ ํ ๋ ์ค๋ ์ด๋ฅผ ‘ํ์๊ณผ ์ง๋ฃ’ ๊ฐ๋ ์ผ๋ก ๋ฐ์ ์์ผฐ์ต๋๋ค.)
- ํค๋ผํด๋ ์ดํ ์ค → variable
- ํ๋ฅด๋ฉ๋๋ฐ์ค → constant
value → variable
?email=hong @test.com&
==
Spring(์คํ๋ง) ํ๋ ์์ํฌ์์ ์์ฃผ ๋ฑ์ฅํ๋ **DTO(Data Transfer Object)**๋
์ด๋ฆ ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ๊ฐ์ฒด๋ฅผ ๋ปํฉ๋๋ค.
์ฆ, ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ณ์ธต(Controller, Service, Repository ๋ฑ) ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉํ๋ ์ ์ฉ ๊ฐ์ฒด์
๋๋ค.
๐ก DTO์ ๊ธฐ๋ณธ ๊ฐ๋
**DTO (Data Transfer Object)**๋
→ “๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ๊ฐ์ฒด ”์
๋๋ค.
๋ณดํต ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ ์์ํ ๋ฐ์ดํฐ ๋ฌถ์์ผ๋ก๋ง ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ,
getter/setter, ์์ฑ์, toString() ์ ๋๋ง ํฌํจํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๐งฑ ์คํ๋ง์์์ ๊ตฌ์กฐ ์์
์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํต ๋ค์๊ณผ ๊ฐ์ 3๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
| Controller | ์์ฒญ/์๋ต ์ฒ๋ฆฌ | UserController |
| Service | ๋น์ฆ๋์ค ๋ก์ง ์ํ | UserService |
| Repository | DB ์ ๊ทผ | UserRepository |
์ด๋ DTO๋ ์ฃผ๋ก Controller ↔ Service ์ฌ์ด์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด๋ฒ์๋ **VO(Value Object)**์ ๋ํด ์์๋ณผ๊ฒ์.
์คํ๋ง์ด๋ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ(DDD, Domain Driven Design)์์ ์์ฃผ ๋ฑ์ฅํ๋ ๊ฐ๋
์ผ๋ก,
DTO์ ํท๊ฐ๋ฆฌ๊ธฐ ์ฌ์ด ๊ฐ์ฒด์ด๊ธฐ๋ ํฉ๋๋ค.
๐ก VO(Value Object)์ ๊ธฐ๋ณธ ๊ฐ๋
**VO(Value Object)**๋
→ ๊ฐ(value) ์์ฒด๋ฅผ ํํํ๋ ๊ฐ์ฒด์
๋๋ค.
์ฆ, ์ด๋ค ์์ฑ๋ค์ ์กฐํฉ์ด ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด๋ก,
๊ทธ ๊ฐ์ฒด์ **๊ณ ์ ํ ID๋ ์๋ณ์(Identifier)**๊ฐ ์์ด์.
๋์ผ์ฑ๋ณด๋ค **๊ฐ์ ๋๋ฑ์ฑ(equality)**์ด ์ค์ํฉ๋๋ค.
โ๏ธ VO์ ํน์ง ์ ๋ฆฌ
| ์๋ฏธ ์ค์ฌ | ๊ฐ ์์ฒด๊ฐ ์๋ฏธ๋ฅผ ๊ฐ์ง (์: Money, Address, DateRange ๋ฑ) |
| ๋ถ๋ณ์ฑ(Immutable) | ์์ฑ ํ ๋ด๋ถ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๋๋ก ์ค๊ณ |
| ๋๋ฑ์ฑ ๋น๊ต | equals()์ hashCode()๋ก ๋ด์ฉ ๊ธฐ๋ฐ ๋น๊ต |
| ์๋ณ์ ์์ | ID ๋์ ์์ฑ ๊ฐ์ผ๋ก๋ง ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ |
| ์ฌ์ฌ์ฉ ๊ฐ๋ฅ | ์ฌ๋ฌ ์ํฐํฐ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์์ |
๐ซ DTO์์ ์ฐจ์ด์
| ์ฃผ์ ๋ชฉ์ | ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ | ๋๋ฉ์ธ ๋ด ‘๊ฐ’ ํํ |
| ๋ถ๋ณ์ฑ | ๋ณ๊ฒฝ ๊ฐ๋ฅ (setter ์์) | ๋ถ๋ณ ๊ฐ์ฒด๋ก ์ค๊ณ |
| ๋ก์ง ํฌํจ ์ฌ๋ถ | ์์ (๋จ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ) | ์์ (๊ฐ ๊ด๋ จ ๊ฒ์ฆ/๊ณ์ฐ ๋ก์ง ๊ฐ๋ฅ) |
| ์๋ณ์ | ํ์์ ๋ฐ๋ผ ์กด์ฌ | ์์ |
| ์์ | UserDto, OrderRequestDto | Money, Address, Coordinate |
๐ง ์ ๋ฆฌํ์๋ฉด
- DTO๋ "๋ฐ์ดํฐ ์ ๋ฌ์ฉ"
- VO๋ "์๋ฏธ ์๋ ๊ฐ ํํ์ฉ"
์ฆ,
DTO๋ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๋ ๊ทธ๋ฆ,
VO๋ ์๋ฏธ ์๋ ๊ฐ ๊ทธ ์์ฒด์ ๋๋ค.
boolean์ ์๋ฏธ
- **์ฐธ(true) ๋๋ ๊ฑฐ์ง(false)**์ ๋ฐํํ๋ ํ์
void์ ์๋ฏธ
- ์๋ฌด ๊ฐ๋ ๋ฐํํ์ง ์๋๋ค๋ ๋ป์ ๋๋ค.
- ์ฆ, return ๋ฌธ ๋ค์ ๊ฐ์ ์ธ ์ ์์ต๋๋ค.
- ๋ฉ์๋๊ฐ ๋จ์ํ **๋์(์ถ๋ ฅ, ์ ์ฅ, ์ญ์ ๋ฑ)**๋ง ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค ํ์๊ฐ ์์ ๋ ์ฌ์ฉ
๋ฌด๋ฃ ํ๊ตญ์ด GPT์ ๋ง:
์ข์์ ๐ ์์ฃผ ์ข์ ๋ฐฉํฅ์ด์์!
“๊ณ์ฐ๊ธฐ ํํ์ด์ง”๋ฅผ ์คํ๋ง(Spring Boot)์ผ๋ก ๋ง๋ค๊ณ ์ถ์ผ์ ๊ฑฐ์ฃ .
๊ทธ๋ ๋ค๋ฉด MVC ํจํด์ ๋ฐ๋ผ Controller, Service, Domain ๊ตฌ์กฐ๋ก ๋๋๋ ๊ฒ ๋ฑ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ์ด์์.
์๋์ ๊ธฐ์ด์ ์ธ ๊ตฌ์กฐ ์ค๊ณ → ๊ฐ ๊ณ์ธต๋ณ ์ฝ๋ ์์ → ์ ์ฒด ํ๋ฆ ์ค๋ช ๊น์ง ๋จ๊ณ๋ณ๋ก ์ ๋ฆฌํด๋๋ฆด๊ฒ์ ๐
๐งฉ 1. ์ ์ฒด ๊ตฌ์กฐ ๊ฐ์ (MVC ์ํคํ ์ฒ)
| Controller | ์์ฒญ/์๋ต ์ฒ๋ฆฌ (์ฌ์ฉ์์ ์ฐ๊ฒฐ) | CalculatorController.java |
| Service | ์ค์ ๊ณ์ฐ ๋ก์ง ์ํ | CalculatorService.java |
| Domain | ๋ฐ์ดํฐ ๋ชจ๋ธ ์ ์ (์์ฒญ/๊ฒฐ๊ณผ ์ ์ฅ) | CalculationRequest.java, CalculationResult.java |
๐ง ์คํ ํ๋ฆ ์์ฝ
- ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์ซ์์ ์ฐ์ฐ์๋ฅผ ์ ๋ ฅ → /calculator/calculate ์์ฒญ ์ ์ก
- Controller๊ฐ ์์ฒญ์ ๋ฐ๊ณ CalculatorService ํธ์ถ
- Service๊ฐ ์ค์ ๊ณ์ฐ ์ํ
- ๊ฒฐ๊ณผ(CalculationResult)๋ฅผ JSON์ผ๋ก ๋ฐํ
- ๋ธ๋ผ์ฐ์ ์์ ๊ฒฐ๊ณผ ํ์ ๐
๊ฒํฐ: ์ฝ๋๋ค
์ธํฐ: ์ด๋ค
1๏ธโฃ ๊ฒํฐ(Getter)
- ๋ฌด์์ ํ๋ ๋ฉ์๋?
→ ๊ฐ์ฒด ์์ ๊ฐ์ ๊บผ๋ด์ค๋ ์ญํ - ํ์: ๋ณดํต get์ผ๋ก ์์
- ์์:
- ์ฌ์ฉ:
๐ก ํต์ฌ: ์ฝ๊ธฐ ์ ์ฉ ์ญํ
2๏ธโฃ ์ธํฐ(Setter)
- ๋ฌด์์ ํ๋ ๋ฉ์๋?
→ ๊ฐ์ฒด ์์ ๊ฐ์ ์ค์ ํ๋ ์ญํ - ํ์: ๋ณดํต set์ผ๋ก ์์
- ์์:
- ์ฌ์ฉ:
๐ก ํต์ฌ: ์ฐ๊ธฐ ์ ์ฉ ์ญํ
3๏ธโฃ ์ ๋ฆฌ
| Getter | ๊ฐ ์ฝ๊ธฐ | getName() | ์ฝ์ ๊ฐ ๋ฐํ |
| Setter | ๊ฐ ์ฐ๊ธฐ/์ค์ | setName("ํ๊ธธ๋") | ๋ณดํต void |
4๏ธโฃ ํ ์ค ์์ฝ
Getter = ๊บผ๋ด๊ธฐ, Setter = ๋ฃ๊ธฐ
→ ์ด Address ํด๋์ค๋ **VO(Value Object)**์
๋๋ค.
์์ธ์ ๊ฐ๋จ๊ตฌ ํ
ํค๋๋ก 10๊ณผ ๋์ผํ ๊ฐ์ ์ฃผ์๋ผ๋ฉด,
๋ ๊ฐ์ฒด๋ ์์ ํ ๊ฐ์ ๊ฒ์ผ๋ก ์ทจ๊ธ๋ฉ๋๋ค.
์ฆ, ๊ฐ์ฒด์ “์ฃผ์๊ฐ”์ด ์๋๋ผ “๋ด์ฉ(value)”๋ก ํ๋จํ๋ค๋ ์ ์ด ์ค์ํด์.
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 6์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.16 |
|---|---|
| [์ฐธ๊ณ ]๊ณ์ฐ๊ธฐ ์ฝ๋ ์ง ๊ฑฐ (0) | 2025.10.15 |
| 4์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.14 |
| 3์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.13 |
| 2์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.10.01 |