μΉμ 5. μ€νλ§ MVC - ꡬ쑰 μ΄ν΄ μκ° μλ£!!
κ³Όκ±° λ²μ μ€νλ§ μ»¨νΈλ‘€λ¬
public interface Controller {
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
Controller
μΈν°νμ΄μ€λ @Controller
μ λ
Έν
μ΄μ
κ³Όλ μ ν λ€λ₯΄λ€.
@Controller
: μ€νλ§μ΄ μλμΌλ‘ μ€νλ§ λΉμΌλ‘ λ±λ‘νλ€. λ΄λΆμ @Component
μ λ
Έν
μ΄μ
μ΄ μμ΄μ μ»΄ν¬λνΈ μ€μΊμ λμμ΄ λλ€.
@RequestMapping
: μμ² μ 보λ₯Ό 맀ννλ€. ν΄λΉ URLμ΄ νΈμΆλλ©΄ μ΄ λ©μλκ° νΈμΆλλ€.
@ModelAndView
: λͺ¨λΈκ³Ό λ·° μ 보λ₯Ό λ΄μμ λ°ννλ€.
@RequestMapping
μ URLλ§ λ§€μΉνλ κ²μ΄ μλλΌ HTTP Methodλ ν¨κ» ꡬλΆν μ μλ€. μ΄κ²μ @GetMapping
, @PostMapping
μΌλ‘ λ νΈλ¦¬νκ² μ¬μ©ν μ μλ€.
ν΄λ‘ λ¨κ³ ... λΈλμΉ λ°κ³ ... ν¬ν¬ μ°λ¦...
+) 22. 07. 20. μΆκ° μλ£!!
μ μ°¨μ νλ‘κ·Έλλ° μΈμ΄λ μΌλ ¨μ μ²λ¦¬ μ μ°¨λ₯Ό μ ν΄μ§ λ¬Έλ²μ λ°λΌ μμλλ‘ κΈ°μ ν΄λκ°λ μΈμ΄μ΄λ€.
μ₯μ
λ¨μ
μ’ λ₯: C, ALGOL, COBOL, FORTRAN λ±
μ μ°¨μ§ν₯ν νλ‘κ·Έλ¨μ λ§ κ·Έλλ‘ μ΄μΌκΈ°λ₯Ό μμλλ‘ μ¨ λκ°λ―μ΄ νλ‘κ·Έλ¨μ ꡬμ±νλ λ°©μμ΄λ€. λ¬Όλ‘ βμ μ°¨ 4βμ²λΌ μ μ΄λ¬Έμ μ¬μ©ν΄ μ€ν μμλ₯Ό λ°κΏ μλ μμ§λ§, κ·Έκ²μ‘°μ°¨λ μ μ΄λ¬Έμ μ μ°¨λ‘ μ§νλλ κ²μ΄λ€.
λ°λ©΄ κ°μ²΄μ§ν₯ν νλ‘κ·Έλ¨μ μ΄ νλ‘κ·Έλ¨μμ μ¬μ©λλ κ°μ²΄(μλμ°¨, μμ§, μ΄μ μ)λ₯Ό μμ±νκ³ , κ° κ°μ²΄μ ν¬ν¨λ λ°μ΄ν°(컬λ¬, μμ§, μ΄λ¦, λ©΄νλ²νΈ, μ’
λ₯)μ κΈ°λ₯(ꡬλνκΈ°, μ μ§νκΈ°, μ μ§νκΈ°, μ΄μ νκΈ°, μ₯μ λ¬Ό κ°μ§νκΈ°)μ μνΈ νΈμΆν¨μΌλ‘μ¨ νλ‘κ·Έλ¨μ ꡬμ±νλ λ°©μμ λ§νλ€.
μ΄λ κ° κ°μ²΄μ ν¬ν¨λ λ°μ΄ν°λ βμμ±β λλ βνλβλΌ νκ³ , κΈ°λ₯μ βλ©μλβλΌ νλ€.
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μΈμ΄λ νμ€ μΈκ³μ κ°μ²΄(Entity)λ₯Ό κΈ°κ³μ λΆνμ²λΌ νλμ κ°μ²΄λ‘ λ§λ€μ΄, κΈ°κ³μ μΈ λΆνλ€μ 쑰립νμ¬ μ νμ λ§λ€λ―μ΄ μννΈμ¨μ΄λ₯Ό κ°λ°ν λλ κ°μ²΄λ€μ 쑰립ν΄μ νλ‘κ·Έλ¨μ μμ±ν μ μλλ‘ ν νλ‘κ·Έλλ° κΈ°λ²μ΄λ€.
μ₯μ
λ¨μ
μ’ λ₯: JAVA, C++, Smalltalk λ±
μμ μ€λͺ μβ¦ μμ§ν κ°λ λ§ λ°μ¨ κ±°λΌ λ무 λ±λ±νκ³ μ λͺ¨λ₯΄κ² λ€. μ½λλ‘ μμλ₯Ό 보μ.
μ°λ¦¬κ° κ²μμ λ§λ λ€κ³ μμν΄ λ³΄μ. μ΄λ νμν 건 βνλ μ΄μ΄β κ°μ²΄λ€.
κ° νλ μ΄μ΄λ κ°μ λ€λ₯Έ λ°μ΄ν°λ₯Ό κ°μ§ κ²μ΄λ€.
const player = {
name: "rose",
hp: 100,
skill: "lucky",
};
λ§μ½ νλ μ΄μ΄κ° ν λͺ
μ΄λΌλ©΄ μ΄λ κ² μ½λλ₯Ό μ§λ λμ§λ§, νλ μ΄μ΄κ° λμ΄λλ€λ©΄ λ¬Έμ κ° μκΈΈ κ²μ΄λ€.
κ° νλ μ΄μ΄λ€μ βnameβ, βhpβ, βskillβμ λμΌν μμ±μ κ°κ² μ§λ§ κ±°κΈ°μ λ€μ΄κ°λ κ°(λ°μ΄ν°)μ λ€ λ€λ₯Ό κ²μ΄λ€.
μ΄ κ²½μ° player1, player2, player3β¦ μ΄λ κ² νλ μ΄μ΄ μλ§νΌ κ°μ²΄λ₯Ό μΆκ°νλ κ²μ λ무 λΉν¨μ¨μ μΌ λΏλλ¬, μ€ν¬ μμ±μ λΉΌλ¨Ήκ³ μμ±νκ±°λ μμ±μ μ€νκ° λ μλ μλ€.
λν μ 체 νλ μ΄μ΄μκ² κ²½νμΉ μμ±μ μΆκ°νκ³ μΆμ λλ, νλ μ΄μ΄ μλ§νΌ νλμ© λ€ μΆκ°ν΄μΌ νλ€!
μ΄λ μ λ§ λΉν¨μ¨μ μ΄λ€.
μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄, κ°μ²΄μ§ν₯μμλ μΌμ’
μ βνλ μ΄μ΄ ν©ν 리βλ₯Ό λ§λλ κ²μ΄λ€. λ°μ΄ν°λ₯Ό λ£μΌλ©΄ μ μ©ν΄μ£Όλ ν¨μκ° μκ³ , νλ μ΄μ΄ κ°μ²΄λ₯Ό μμνμΌλ‘ λ°μ μ μλ ν©ν 리 λ§μ΄λ€.
β νλ μ΄μ΄ κ°μ²΄λ₯Ό 볡μ ν νμλ μκ³ μ€ν λ§ μ€λ₯ μνλ μμ΄μ§λ€. λν, κ²½νμΉ μμ±μ μΆκ°ν λλ νλ μ΄μ΄ ν©ν 리μ μμ± νλλ§ μΆκ°νλ©΄ λλ€.
μ¦, μ΄ νλ μ΄μ΄ ν©ν λ¦¬κ° κ³§ ν΄λμ€μ κ°λ€.
Class Player { //μΏ ν€ν
constructor(name, health, skill) {
this.name = name;
this.hp = hp;
this.skill = skill;
this.xp = 0;
}
}
const rose = new Player("rose", 100, "lucky"); //μΏ ν€
const jangmi = new Player("jangmi", 90, "unlucky");
ν΄λμ€ == μΏ ν€λ₯Ό μ°μ΄λ΄λ μΏ ν€νμ΄λΌκ³ μκ°νλ©΄ μ½λ€.
μΈμ€ν΄μ€ νΉμ κ°μ²΄λ μΏ ν€νμ μ¬μ©ν ν μ»μ μ μλ μΏ ν€μ μνλ€.
μμ μ½λμμ thisλΌλ λ¨μ΄λ νλ μ΄μ΄ ν΄λμ€ λ΄μ μμ± λ° λ©μλλ₯Ό μ§μΉνλ λ°©λ²μ΄λ€.
μ΄μ μλ ν΄λμ€λ‘ λ°μ΄ν°λ₯Ό μ 리νκΈ°λ§ νλ€. νμ§λ§, λ©μλ(μ μ½λμμλ constructor) λλΆμ λ°μ΄ν°μ μ‘μΈμ€νκ³ μ‘°μν μ μλ μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μκ² λλ€.
μμμ μ½λμ μ€λ³΅μ μ€μ΄κ³ μ½λλ₯Ό μ¬μ¬μ© κ°λ₯νκ² λλ μ μκ² ν΄ μ€λ€.
μμμ μλ
ν΄λμ€κ° λΆλͺ¨ ν΄λμ€μ μμ±μ κ°μ§λ¨ λ»μ΄λ€. μλ μ½λλ₯Ό 보μ.
class Human {
constructor(name) {
this.name = name;
this.arms = 2;
this.legs = 2;
}
}
class Baby extends Human {
constructor(name) {
this.cute = ture;
}
cry() {
return 'waa waa';
}
}
class Teenager extends Human {
constructor(name) {
this.emotional = true;
}
curse() {
return '#$18%@&!';
}
}
βμκΈ°β ν΄λμ€λ βμ²μλ β ν΄λμ€κ° βμΈκ°βμμ νμ₯(extends)λλ€κ³ νλ©΄, μκΈ°μ μ²μλ ν΄λμ€κ° μΈκ° ν΄λμ€μ μμ±μ λ€ κ°μΆκ³ μΆκ°μ μΌλ‘ κ·Έλ€λ§μ λ€λ₯Έ μμ±μ κ°μ§λ¨ λ»μ΄λ€.
μ¦, μκΈ° μΈμ€ν΄μ€λ μ΄λ¦, λ ν, λ λ€λ¦¬λ₯Ό κ°κ³ κ±°κΈ°λ€ μΆκ°λ‘ κ·μ½κ³ , μ΄λ€λ μμ±μ κ°μ§ κ²μ΄λ€.
μκΈ°, μ²μλ ν΄λμ€μμ μΈκ°μ constructor λ©μλλ₯Ό νΈμΆνλ €λ©΄ κ° ν΄λμ€ λ΄μ constructorμμ super(name);μ νΈμΆν΄μΌ νλ€. (superλ λΆλͺ¨λΌκ³ μκ°νλ©΄ λλ€.)
κ°μ²΄μ§ν₯μ 4κ°μ§ ν΅μ¬ κ°λ
μΊ‘μν(Encapsulation)
λ°μ΄ν°μ ν¨μλ₯Ό μΊ‘μ νΉμ 컨ν
μ΄λ μμ λλ κ². μ΄ κ²½μ° μΊ‘μμ classλ₯Ό μλ―Ένλ€.
β μ½λκ° μ’ λ ꡬ쑰νλκ³ , ν¨μλ λ©μλκ° μΈμλ₯Ό μ·¨ν νμ μμ΄ this ν€μλλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°μ μ‘μΈμ€ ν μ μλ€.
μΊ‘μνλ₯Ό μ¬μ©νμ¬ νμν ν΄λμ€μ μμ±κ³Ό μ¨κΈΈ μμ±μ μ νν μ μλ€.
μμ(Inheritance)
ν΄λμ€λ₯Ό νμ₯(extends)νλ©΄ μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ λͺ¨λ μμ±κ³Ό λ©μλλ₯Ό μμνκ² λλ€.
μ°λ¦¬λ μμ λλΆμ μ½λλ₯Ό λ μμ λ¨μλ‘ μͺΌκ°κ³ μ¬μ¬μ© ν μ μλ€.
λ§μ½ μμμ΄ μλ€λ©΄ μ€λ³΅λ μμ±μ κ°μ§ λ κ°μ λ³λμ ν΄λμ€λ₯Ό λ§λ€μ΄μΌ ν κ²μ΄λ€.
μΆμν(Abstraction)
μ€μνλ‘ μλ₯Ό λ€μ΄λ³΄μ.
μ°λ¦¬κ° μ°¨λμ μ΄μ ν λ, μ΄λ₯Ό μν μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ€. μΈν°νμ΄μ€, μ¦, ν , νλ¬, κ°μ’
λ²νΌ λ±μ μ°¨λ μ μ‘°μ¬μ μν΄ λ
ΈμΆμ΄ λμ΄μλ€.
μ°λ¦¬λ μ΄ μΈν°νμ΄μ€λ§ νμ©ν΄μ μ°¨λμ μ΄μ ν μ μλ€. μ°¨λμ μΈλΆ ꡬν μ 보λ λ
ΈμΆλμ΄ μμ§ μλ€. λ°λΌμ μ΄μ μλ λΈλ μ΄ν¬λ μμ§μ΄ μ΄λ»κ² μλνλμ§ μΈλΆ μ¬νμ μμ§ λͺ»νλλΌλ μ°¨λ₯Ό μ΄μ ν μ μλ€.
β λ©μλμ λ΄λΆ μμ
μ λ°κΏλ, κ·Έ λ©μλλ₯Ό μ¬μ©νλ μ¬λμ λκ°λ₯Ό λ°κΏ νμκ° μλ€. μλνλ©΄ ꡬν μΈλΆ λ΄μ©μ΄ λ°λμλλΌλ μΈν°νμ΄μ€λ κ·Έλλ‘ μ μ§λμκΈ° λλ¬Έμ΄λ€.
λ€νμ±(Polymorphism)
class Person {
public sayHi() {
return "Hi";
}
}
class νκ΅μΈ extends Person {}
class λ―Έκ΅μΈ extends Person {}
μ μ½λμμ νκ΅μΈ, λ―Έκ΅μΈ ν΄λμ€λ λ λ€ Person ν΄λμ€μμ νμ₯λλ€. λ ν΄λμ€ λͺ¨λ sayHi λ©μλλ₯Ό κ°λλ€.
νκ΅μΈ ν΄λμ€κ° Person ν΄λμ€μμ νμ₯λμ§λ§, sayHi λ°©λ²μ λ€λ₯΄κ² νκΈΈ μν λ λ€νμ±μ΄ μ¬μ©λλ€.
class νκ΅μΈ extends Person {
public sayHi() {
return "μλ
";
}
}
μμ κ°μ μ½λλ₯Ό λ©μλ μ€λ²λΌμ΄λ©μ΄λΌ νλ€. λ©μλμ μ΄λ¦μ κ°μ§λ§ ꡬν λ°©μμ λ€λ₯Έ κ²μ΄λ€.
μ΄λ₯Ό λ€νμ±μ΄λΌκ³ νλ€.
μ°Έκ³ μλ£
λ Έλ§λ μ½λ, βκ°μ²΄μ§ν₯ νλ‘κ·Έλλ°β, https://youtu.be/cg1xvFy1JQQ
λ Έλ§λ μ½λ, βκ°μ²΄μ§ν₯ κ°λ μ 리β, https://youtu.be/IeLWSKq0xIQ
κΉλν, Do it! μλ° μμ μ 볡