์คํ๋ง์ ๊ณต๋ถํจ์ผ๋ก์จ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ
์คํ๋ง์ ์ฌ์ฉํ ๋ ํ์๋ก ์์์ผํ๋ ํต์ฌ ๊ธฐ๋ฅ๋ค์ ๋ํด ์ ๋ฆฌํ์ฌ ๊ธ์ ์ ๋ก๋ ํ ์์ ์ด๋ค.
๊ฐ๋จํ๊ฒ ์ค๋์ ์คํ๋ง์๋ํด ์์๋ณด์
์คํ๋ง
ใด ํ์ : ์คํ๋ง ํ๋ ์์ํฌ, ์คํ๋ง ๋ถํธ
ใด ์ ํ : ์คํ๋ง ๋ฐ์ดํฐ , ์คํ๋ง ์ธ์ , ์คํ๋ง ์ํ๋ฆฌํฐ, ์คํ๋ง Rest Docs, ์คํ๋ง ๋ฐฐ์น, ์คํ๋ง ํด๋ผ์ฐ๋
๊ทธ๋ ๋ค๋ฉด ํ์๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด์.
์คํ๋ง ํ๋ ์์ํฌ
ใด ํต์ฌ ๊ธฐ์
ใด ์น ๊ธฐ์
ใด ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์
ใด ๊ธฐ์ ํตํฉ
ใด ํ ์คํธ
ใด ์ธ์ด
์ด ๋ชจ๋ ๊ฑธ ๋ค ํฌํจํ๋๊ฒ์ด ์คํ๋ง ํ๋ ์์ํฌ์ด๋ค.
์คํ๋ง ๋ถํธ๋ ๋ฌด์์ธ๊ฐ?
ใด ์คํ๋ง์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์, ์ต๊ทผ์๋ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ค.
์ผ๋ง๋ ํธํ๊ธธ๋?ใด ๋จ๋ ์ผ๋ก ์คํํ ์ ์๋ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ์์ฑ ํ ์ ์๋ค.ใด ํฐ์บฃ ๊ฐ์ ์น ์๋ฒ๋ฅผ ๋ด์ฅํด์ ๋ณ๋์ ์น ์๋ฒ๋ฅผ ์ค์นํ์ง ์์๋ ๋๋ค.ใด ์ ์ฌ์ด ๋น๋ ๊ตฌ์ฑ์ ์ํ starter ์ข ์์ฑ ์ ๊ณตใด ์คํ๋ง๊ณผ 3rd path(์ธ๋ถ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ ๊ตฌ์ฑ
=> ์์ฒญ ์ค์ ํด์ค ๊ฒ๋ค์ด ๋ง์๋๋ฐ ๋ง์ด ๊ฐ๊ฒฐํด ์ก๋ค.
๋ก๋์กด์ค! Spring .. ์ ๋ง๋ค์์๊น?
1. ์น์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ณ , db์ ๊ทผ ํธ๋ฆฌํ๊ฒ ํด์ฃผ๋ ๊ธฐ์ ?
2. ์ ์์ ๋ถํ๋ ์์ํฌ?
3. ์น์๋ฒ๋ ์๋์ผ๋ก ๋์์ฃผ๋๊ฑฐ?
์๋๋ค... ์ด๊ฒ์ ๊ฒฐ๊ณผ๋ฌผ์ผ ๋ฟ์ด๊ณ ์ง์ง
==> ์คํ๋ง์ ์ง์ง ํต์ฌ์ ์๋์ ๊ฐ๋ค.
1. ์คํ๋ง์ ์๋ฐ์ธ์ด ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ์ด๋ค.
2. ์๋ฐ ์ธ์ด์ ๊ฐ์ฅ ํฐ ํน์ง - ๊ฐ์ฒด ์งํฅ์ธ์ด
3. ์คํ๋ง์ ๊ฐ์ฒด์งํฅ ์ธ์ด๊ฐ ๊ฐ์ง ๊ฐ๋ ฅํ ํน์ง์ ์ด๋ ค๋ด๋ ํ๋ ์์ํฌ.
4. ์คํ๋ง์ ์ข์ ๊ฐ์ฒด ์งํฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์์ฃผ๋ ํ๋ ์์ํฌ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋จ.
์ฆ, ๋ ๊ณ ๋ธ๋ญ ์กฐ๋ฆฝํ๋ฏ์ด / ํค๋ณด๋ ๋ง์ฐ์ค ๊ฐ์ ๋ผ์ฐ๋ฏ์ด/ ์ปดํจํฐ ๋ถํ ๊ฐ์ ๋ผ์ฐ๋ฏ์ด/ ์ปดํฌ๋ํธ๋ฅผ ์ฝ๊ฒ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ๋ฉด์ ๊ฐ๋ฐํ ์ ์๋ ๋ฐฉ๋ฒ
์ฆ, ๋คํ์ฑ(polymorphism) ์ด๋ค.
๋คํ์ฑ์ ์ค์ธ๊ณ์ ๋น์ ํด๋ณด์. (์ฐธ๊ณ ๋ก ์ค์ธ๊ณ์ ๊ฐ์ฒด ์งํฅ์ 1:1๋ก ๋งค์นญํ๊ธฐ๋ ํ๋ค๊ณ ๋ชจ์์ ์ธ ๋ถ๋ถ์ด ์์ ์ ๋ ์๋ค. ํ์ง๋ง ๋น์ ๋ก ์ดํดํ๊ธฐ์ ์ข๋ค.)
์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ์ธ์์ ๊ตฌ๋ถํด๋ณด๊ฒ ๋ค.
์ญํ ์ด ์ธํฐํ์ด์ค / ๊ตฌํ์ด ๊ฐ์ฒด
์์ 1
์ด์ ์(์ญํ ) - ์๋์ฐจ(์ญํ )
ใด ํ๊ธธ๋ ใด ํ๋, ๊ธฐ์, ํ ์ฌ๋ผ, ์์ฐ๋, ๋ฒค์ธ , BMW...
์ฌ๊ธฐ์ ํ๊ธธ๋์ ํ๋ ์๋์ฐจ๋ฅผ ํ๋ค๊ฐ ๊ธฐ์ ์๋์ฐจ๋ก ๋ฐ๊พธ๋ฉด ์ํฅ์ ์ฃผ๋๊ฐ? NO
์ด์ ์์ธ ํ๊ธธ๋์ด ํ๋ ์๋์ฐจ๋ฅผ ํ๋ค๊ฐ ์์ฐ๋ / ๋ฒค์ธ ๋ก ๋ฐ๊พธ๋ฉด ์ํฅ์ ์ฃผ๋๊ฐ? NO
์ฆ, ์๋์ฐจ๋ฅผ ๋ง๋ค๋ ๋์ผํ ์ญํ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ ์๋ ์๋์ฐจ์ ๋ด๋ถ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ์ด์ ํ ์ ์๋ค. ๋ ์ด์ ์๋ ์๋์ฐจ์ ๋ฐ๋ผ ์ด์ ๋ฒ์ ๋ฐ๊ฟ ํ์๊ฐ ์ ํ ์๋ค.
์ฆ, ํด๋ผ์ด์ธํธ์๊ฒ ์ํฅ์ ์ฃผ์ง ์๊ณ ์๋ก์ด ๊ฒ์ ์ ๊ณตํ ์ ์๋ค.
์์ 2
๋ก๋ฏธ์ค์ ์ค๋ฆฌ์ฃ ๊ณต์ฐ
๋ก๋ฏธ์ค ์ญํ - ์ค๋ฆฌ์ฃ ์ญํ
ใด์๋น, ์ฅ๋๊ฑด ใด ๊นํํฌ , ์กํค๊ต ...
๋ก๋ฏธ์ค ์ญํ ์ ๋ค๋ฅธ ์ฌ๋์ด ํ๋๋ผ๋ ๋ก๋ฏธ์ค ์ญํ ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์ญํ == ์ธํฐํ์ด์ค : ์ด์ ์๋ ์ ๊ธฐ์๋์ฐจ ๋ ๋ด์ฐ์๋์ฐจ๋ ๊ตญ๋ด/ํด์ธ ์๋์ฐจ ๊ตฌ๋ถ์์ด ์๋์ฐจ ์ด์ ๊ฐ๋ฅํ๋ค.
์๋ํ๋ฉด ๋ชจ๋ ์๋์ฐจ๋ ์์ ์ ๋ฐฃ์ผ๋ฉด ์์ผ๋ก ๊ฐ๋ค๋๊ฑด ๋์ผํ๊ธฐ ๋๋ฌธ์.
์ญํ (์ธํฐํ์ด์ค) ๊ณผ ๊ตฌํ(๊ฐ์ฒด, ํด๋์ค)์ ๋ถ๋ฆฌ
์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ๊ตฌ๋ถํ๋ฉด ์ธ์์ด ๋จ์ํด์ง๊ณ , ์ ์ฐํด์ง๋ฉฐ ๋ณ๊ฒฝ๋ ํธ๋ฆฌํด์ง๋ค.
์ฅ์
1. ํด๋ผ์ด์ธํธ๋ ๋์์ด ์ญํ (์ธํฐํ์ด์ค)๋ง ์๋ฉด๋๋ค.
2. ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค.
3. ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
4. ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
์ญํ = ์ธํฐํ์ด์ค
๊ตฌํ = ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค, ๊ตฌํ ๊ฐ์ฒด
๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋๋ ์ญํ ๊ณผ ๊ตฌํ์ ๋ช ํํ ๋ถ๋ฆฌ ํ๋ค.
๊ฐ์ฒด ์ค๊ณ์ ์ญํ (์ธํฐํ์ด์ค)์ ๋จผ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ญํ ์ ์ํํ๋ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
(์ฆ, ์์์ ๋น์ ๋ก ์ฌ์ฉํ๋ ์ด์ ์/์๋์ฐจ ์์ ๋ณด๋ฉด, ์ด์ ๋ฐฉ๋ฒ์ ๋จผ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ด์ ์ ์ํํ๋ ์ด์ ์๋ฅผ ๋ง๋ ๋ค )
=> ๊ตฌํ ๋ณด๋ค ์ญํ ์ด ๋ ์ค์ํ๋ค!
์๋ง์ ๊ฐ์ฒด ํด๋ผ์ด์ธํธ์ ๊ฐ์ฒด ์๋ฒ๋ ์๋ก ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค.
ใด ํด๋ผ์ด์ธํธ : ์์ฒญ
ใด ์๋ฒ: ์๋ต
์๋ฐ์ธ์ด์ ๋คํ์ฑ
์ค๋ฒ๋ผ์ด๋ฉ์ ์๋ฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ด๋ค.
์ค๋ฒ๋ผ์ด๋ฉ ๋ ๋ฉ์๋๊ฐ ์คํ๋๋ฉฐ, ๋คํ์ฑ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ์คํ ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
๋ฌผ๋ก ํด๋์ค ์์๊ด๊ณ๋ ๋คํ์ฑ, ์ค๋ฒ๋ผ์ด๋ฉ ์ ์ฉ๊ฐ๋ฅํ๋ค.
์ค๋ฒ ๋ก๋ฉ: ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋ ์ฌ๋ฌ๊ฐ๋ฅผ ๊ฐ์ง๋ฉด์ ๋งค๊ฐ๋ณ์์ ์ ํ๊ณผ ๊ฐ์๊ฐ ๋ค๋ฅด๋๋ก ํ๋ ๊ธฐ์
class OverloadingTest{
//์ด๋ฆ์ด cat์ธ ๋ฉ์๋
void cat(){
System.out.println("๋งค๊ฐ๋ณ์ ์์");
}
//๋งค๊ฐ๋ณ์ intํ์ด 2๊ฐ์ธ cat ๋ฉ์๋
void cat(int a, int b){
System.out.println("๋งค๊ฐ๋ณ์ :"+a+", "+b);
}
//๋งค๊ฐ๋ณ์ Stringํ์ด ํ ๊ฐ์ธ cat ๋ฉ์๋
void cat(String c){
System.out.println("๋งค๊ฐ๋ณ์ : "+ c);
}
}
public class OverTest {
public static void main(String[] args) {
//OverloadingTest ๊ฐ์ฒด ์์ฑ
OverloadingTest ot = new OverloadingTest();
//๋งค๊ฐ๋ณ์๊ฐ ์๋ cat() ํธ์ถ
ot.cat();
//๋งค๊ฐ๋ณ์๊ฐ intํ ๋๊ฐ์ธ cat() ํธ์ถ
ot.cat(20, 80);
//๋งค๊ฐ๋ณ์๊ฐ String ํ๊ฐ์ธ cat() ํธ์ถ
ot.cat("์ค๋ฒ๋ก๋ฉ ์์ ์
๋๋ค.");
}
}
์ค๋ฒ ๋ผ์ด๋ฉ: ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค๊ฐ ์ฌ์ ์ํด์ ์ฌ์ฉ
class Woman{ //๋ถ๋ชจํด๋์ค
public String name;
public int age;
//info ๋ฉ์๋
public void info(){
System.out.println("์ฌ์์ ์ด๋ฆ์ "+name+", ๋์ด๋ "+age+"์ด์
๋๋ค.");
}
}
class Job extends Woman{ //Womanํด๋์ค(๋ถ๋ชจํด๋์ค)๋ฅผ ์์๋ฐ์ :
String job;
public void info() {//๋ถ๋ชจ(Woman)ํด๋์ค์ ์๋ info()๋ฉ์๋๋ฅผ ์ฌ์ ์
super.info();
System.out.println("์ฌ์์ ์ง์
์ "+job+"์
๋๋ค.");
}
}
public class OverTest {
public static void main(String[] args) {
//Job ๊ฐ์ฒด ์์ฑ
Job job = new Job();
//๋ณ์ ์ค์
job.name = "์ ๋ฆฌ";
job.age = 30;
job.job = "ํ๋ก๊ทธ๋๋จธ";
//ํธ์ถ
job.info();
}
}
ํด๋ผ์ด์ธํธ๋ MemberReposiotry(๋ฉค๋ฒ ๋ ํฌ์งํ ๋ฆฌ)๋ฅผ ์์กดํ๋ค.
๋คํ์ฑ์ ๋ณธ์ง
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์คํ์์ ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
=>๋น์ฐํ๋ค. ์๋์ฐจ ์ด์ ๋ฒ์ ๊ตฌํํ๋ค๋ฉด , A์ด์ ์์์ B์ด์ ์๋ก ๋ณ๊ฒฝํ ์๋ ์๋ค.
๋คํ์ฑ์ ๋ณธ์ง์ ์ดํดํ๋ ค๋ฉด ํ๋ ฅ์ด๋ผ๋ ๊ฐ์ฒด์ฌ์ด์ ๊ด๊ณ์์ ์์ํด์ผํ๋ค.
ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝ ํ ์ ์๋๊ฒ์ด ๋คํ์ฑ์ ๋ณธ์ง์ด๋ค.
์ด์ ๊ทธ ๋คํ์ฑ์ ์ค์ ๊ตฌํ์์ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์๋ ์ฌ์ง์ ๋ณด๋ฉด์ ์ดํดํด๋ณด์
๋๋ ์ฒ์์ ๊ณต๋ถํ ๋ ์ด๊ฒ ๋ฌด์จ ์๋ฆฌ์ง? ํ๋ฉด์ ๊ณ ํต์ค๋ฌ์ ๋ค...๐ค๐ค
์ธํฐํ์ด์ค save() ์ ์๋ฏธ๋ฅผ ์ฃผ์ฐจ ๋ผ๊ณ ์๊ฐํด๋ณด์
MemberService๐ ๊ฐ ์ด์ ์ ๋ผ๊ณ ์๊ฐํ์
interface์ธ MemberRepository ๋ฅผ ์๋์ฐจ ์ด๋ค.(์ด๋ ์ด๋ค ์๋์ฐจ์ธ์ง๋ ๋ชจ๋ฅธ๋ค. ๊ทธ๋ฅ ์๋์ฐจ๊ฐ ์ฃผ์ฐจ๋ ์ฐจ๊ณ ๋ผ๊ณ ์๊ฐํ์)
Memory MemberRepositorySave()๐ ๋ ํ๋ ์๋์ฐจ
JdbcMemberRepositorySave() ๐๋ ๊ธฐ์ ์๋์ฐจ ๋ผ๊ณ ๊ฐ์ ํ์.
๊ทธ๋ ๋ค๋ฉด ์ด์ ์ MemberService๐๋ ์ฐจ๊ณ ์ ์ด๋ค ์๋์ฐจ๋ฅผ ์ฃผ์ฐจํ ์ง ์ ํ์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ์ฃผ์ฐจ๊ฐ๋ฅํ๋ค.
์ด๊ฒ ๋ฐ๋ก ๋คํ์ฑ์ ๋ณธ์ง์ด๋ค!!๐ฎ๐ฎ๐ฎ
> ํด๋ผ์ด์ธํธ(์ด์ ์๐)๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ๐๐์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝ ํ ์ ์๋ค <
(์ดํด๊ฐ ์๋๋ค๋ฉด ์์ ์์1 ๋ถ๋ถ์ ๋ค์ ๋ณด๊ณ ์ค์..๊ทธ๋๋ ์ดํด๊ฐ ์๋๋ฉด ๐ฅ)
๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ค์ํ๊ฑด ๋ญ๊น?
=> ๋์น ์ฑ์์ง ๋ชจ๋ฅด์ง๋ง ์ธํฐํ์ด์ค์ด๋ค.
์๋? ์ค์ธ๊ณ์ ์ธํฐํ์ด์ค ๋ ์ด์ ๋ฒ ์ผ๋ก ์์๋ฅผ ๋ ์ ์๋ค.
์ฐจ๋ง๋ค ์ด์ ๋ฒ์ด ๋ค๋ฅด๋ฉด ๋น์ฐํ ์ด์ ์์๊ฒ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐ๋ฆฌ๋ ์ด์ ๋ฒ์ด ๋์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ธ๋๋๊ฐ ๋ค๋ฅด๋๋ผ๋ ์ด์ ํ๋๋ฐ ํฐ ๋ฌธ์ ์์ด ์ด์ ํ ์ ์์๋ค.
'Spring๐ > Spring ๊ธฐ๋ณธ๐๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ (0) | 2022.10.01 |
---|---|
ํ์ ๋๋ฉ์ธ ์คํ๊ณผ ํ ์คํธ (0) | 2022.09.25 |
ํ์ ๋๋ฉ์ธ ์ค๊ณ (3) | 2022.09.25 |
ํ๋ก์ ํธ ์์ฑ (1) | 2022.09.25 |
์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น(SOLID)+๊ฐ์ฒด์งํฅ์ค๊ณ์ ์คํ๋ง (3) | 2022.09.24 |