OOP ์ด์ผ๊ธฐ
1. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
Java๊ฐ ๊ฐ์ฒด์งํฅ ์ธ์ด์ด๊ธด ํ์ง๋ง Java๋ก ๊ฐ๋ฐํ๋ค๊ณ ๋ชจ๋ ๊ฐ์ฒด์งํฅ์ธ ๊ฒ์ ์๋๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋?
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ก ๊ตฌ์ฑํ๋ ๊ฒ
๐ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ: ํ๋ก๊ทธ๋จ์ด ๊ฑฐ๋ํํ๋ฉด์ ๋ฑ์ฅ
๐ก ์์ด๋์ด: ์ด๋ป๊ฒ ํฐ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๊ฒ์ธ๊ฐ? (๋ ํจ์จ์ ์ด๊ณ ๊ด๋ฆฌํ๊ธฐ ์ข๊ฒ)
โ ํด๊ฒฐ์ฑ : ์๊ฒ ๋๋ ์ ๋ง๋ ํ ํฉ์น์
ํ๋ก๊ทธ๋จ์ ๋์์ ๊ฐ์ฒด๋ค์๊ฒ ๋๋ ์ ์ํํ์.
๊ฐ์ฒด๋ ๋ฌด์์ผ๊น?
๐ ๊ฐ๋ ์ ์ฉ์ด: ๊ฐ์ฒด
๐ ๊ธฐ์ ์ ์ฉ์ด: class, instance
๊ฐ์ฒด๋?
- ํฐ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑ์ ๋๋ ๊ฒ
- ๊ธฐ๋ฅ์ ์ผ๋ถ๋ฅผ ์์๋ฐ์ ๊ฒ (๊ธฐ๋ฅ์ ์ผ๋ถ๋ฅผ ์ํํด์ผ ํ๋ค.)
- ์์ ๊ธฐ๋ฅ์ ์ํํ๋ค.
๊ฐ์ฒด์ ํน์ง
๊ฐ์ฒด์ ๊ฐ์ฒด๋ ์๋ก ํ๋ ฅ์ ํด์ผ ํ๋ค.
๐ค์ด์ : ํจ๊ป ํฐ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ํ๋ ๋ฐฉ๋ฒ
์ผ์ ์๊ฒ ์ชผ๊ฐ์ ๊ฐ์ฒด์๊ฒ ์์ํ๊ณ , ์๋ก ํ๋ ฅํ๊ฒ ๋ง๋๋ ๊ฒ.
=> ํ๋์ ์ปค๋ค๋ ๊ฐ์ฒด ์์ ๋ชจ๋ ๋ก์ง์ ๋ฃ๋ ๊ฒ์ ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ๋ค.(์ง์ํ๊ธฐ!)
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ
๊ฐ์ฒด๋ ํน์ ํ ์๋ฌด์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ํด๋น ์ผ์ ํด์ผ ํ๋ ์ฑ ์์ ๊ฐ๋๋ค.
๋ฐ๋ผ์ ์ฑ ์์ ๋คํ๋๋ก ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ค.
๊ฐ์ฒด์ ์ ๋ฌด๋ฅผ ์๊ฒ ์ชผ๊ฐ๋, ๋น์ทํ ์ ๋ฌด๋ค์ ํน์ ๊ฐ์ฒด๊ฐ ์ํํ๋๋ก ์ผ์ ๋ถ์ผ๋ณ๋ก ์ชผ๊ฐ ํ ๊ฐ์ฒด์๊ฒ ์ ์์ํ๋ค.
์ชผ๊ฐ์ง ๊ฐ์ฒด๋ค์ด ์ ํ๋ ฅํ ์ ์๋๋ก ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๊ฒ.
๊ฐ์ฒด์ ๊ตฌ๋ถ
์๋ง์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ฒ ๋๋ฏ๋ก ์ด๋ฅผ ์๋ก ๊ตฌ๋ถํด์ผ ํ๋ค.
type(ํ)์ผ๋ก ๊ตฌ๋ถํ๊ธฐ
ํ์ ๋ง๋ค๊ธฐ (class ๋ง๋ค๊ธฐ)
package com.programmers.java;
class MyClass extends Object implements Runnable {
// field area
private int a = 0;
// method area
public void run() {
a += 1;
}
MyClass mc = new MyClass();
}
MyClass๋ผ๊ณ ํ๋ ํ์ ์ ๋ง๋ค์๋ค. (ํด๋์ค ํ์ )
ํ์ ์ ๋ณ์์ ํด๋น ํ์ ์ผ๋ก ์์ฑ๋ instance๋ฅผ ์์ฑ ํ ๋์ ํ๋ค.
2. ๊ฐ์ฒด์งํฅ์ ํน์ฑ
์บก์ํ
๐ ์์ฑ๋๊ฐ ์๋ค.
๊ธฐ๋ฅ์ ์ํํ๋ ๋จ์๋ก์จ ์์ ํจ์ ๊ฐ๋๋ค. (๋ค๋ฅธ ๊ฐ์ฒด์์ ์์กด์ฑ์ ๋ฎ์ถ๋ค)
๐์ ๋ณด๊ฐ ์๋๋์ด ์๋ค.
๋ฐ์์ ๊ฐ์ฒด ๋ด์ ์ ๋ณด์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ํ๋ค.
โ ๊ฒฐ๋ก
๊ฐ์ฒด๋ ์ค์ค๋ก ๋์ํ ์ ์๋ ํ๊ฒฝ์ ๊ฐ๊ณ ์์ด์ผ ํ๋ค.
์ธ๋ถ์ ์์กดํ๊ฑฐ๋, ์ธ๋ถ์ ์นจ๋ต์ ์ ํํด์ผ ํ๋ค.
Child๋ Parent์ Blood์ ์ง์ ์ ๊ทผํ ์ ์๋ค. (X)
Child๋ Parent์ Hair์๋ ์ง์ ์ ๊ทผํ ์ ์๋ค. (O)
Childe๊ฐ Parent์ Blood์ ์ ๊ทผํ๊ธฐ ์ํด์๋ getBlood()๋ผ๋ ํจ์๋ฅผ ํตํด ์ ๊ทผํด์ผ ํ๋ค.
class Parent {
private Blood blood;
protected Hair hair;
Blood getBlood() {
return Blood;
}
}
class Child extends Parent {
void run() {
this.hair; // (O)
this.blood; // (X)
this.getBlood(); // (O)
}
}
=> ์ ๊ทผ ์ง์ ์๋ฅผ ํตํด ์บก์ํ๋ฅผ ์กฐ์ ํ๋ค.
โญ ์ ๊ทผ ์ง์ ์
- private : ๊ฐ์ฒด ์์ (์ธ๋ถ์์ ์ ๊ทผ ๋ถ๊ฐ๋ฅ)
- protected : ์์๋ ๊ฐ์ฒด์์๋ ์ ๊ทผ ๊ฐ๋ฅ
- default(friendly) : ๊ฐ์ ํจํค์ง ๋ด์์ ์ ๊ทผ ๊ฐ๋ฅ (ํจํค์ง ๊ฐ์์ฑ)
- public : ๋ชจ๋ ๋ค ์ ๊ทผ ๊ฐ๋ฅ (public class๋ ํ ํ์ผ์ ํ ๊ฐ)
๋ฒ์: private < protected < default < public
์์
๐ก ์์ํด์ค๋ค: ์์, ๋ถ๋ชจ, super, ์ถ์
๐ก ์์๋ฐ๋๋ค: ํ์, ์์, this, ๊ตฌ์ฒด
์์์ ์คํด: ๊ณตํต๋ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ๊ฐ์ฒด์๊ฒ ์ ๋ฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
์ฌ๋ฐ๋ฅธ ์์ ๊ด๊ณ: ์ถ์๊ณผ ๊ตฌ์ฒด (ex. ์์ > ๋ฌผ์ง > ์๋ฌผ > ๋๋ฌผ > ํฌ์ ๋ฅ > ์ฌ๋ > ๋จ์ > ์งฑ๊ตฌ)
์ถ์ํ
๐ก์ถ์์ฒด: ์ถ์ํ๋ ๊ฐ์ฒด
๐ก๊ตฌ์์ฒด: ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด
์ถ์์ฒด์ ๊ตฌ์์ฒด์ ๊ด๊ณ๋ ์๋์ ์ด๋ค.
ex)
์ฌ๋ > ๋จ์์ ๊ด๊ณ:์ฌ๋์ด ์ถ์์ฒด, ๋จ์๊ฐ ๊ตฌ์์ฒด
๋จ์ > ์งฑ๊ตฌ์์ ๊ด๊ณ: ๋จ์๊ฐ ์ถ์์ฒด, ์งฑ๊ตฌ๊ฐ ๊ตฌ์์ฒด
๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ์์ ์์์ ์๋ ๊ฒ์ด ํญ์ ํ์๋ณด๋ค ์ถ์์ ์ด์ด์ผ ํ๋ค.
๐ ์๋ฏธ์ ์ถ์์ฒด
class Login {
void login() {}
}
class GoogleLogin extends Login {
void login() {}
}
Loginํด๋์ค, GoogleLoginํด๋์ค์ login๋ฉ์๋๋ ๊ฐ๊ฐ์ ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๐ ์ถ์ ๊ธฐ๋ฅ์ ๊ฐ์ง ๊ฐ์ฒด
abstract class Login {
abstract void login();
}
class GoogleLogin extends Login {
@Override void login() {}
}
์ถ์ ํด๋์ค: ํ๋ ์ด์์ ์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํด๋์ค
GoogleLoginํด๋์ค(๊ตฌ์์ฒด)๋ Loginํด๋์ค(์ถ์์ฒด)์ login ๋ฉ์๋๋ฅผ ๊ตฌ์ฒดํ์์ผ์ผ ํ๋ ์๋ฌด๋ฅผ ๊ฐ์ง๋ค. (๋ฐ๋์ Override ํด์ผ ํจ)
๐ ๊ฐ์ฒด ์์ฒด๊ฐ ์ถ์์
interface Login {
void login();
}
class GoogleLogin implements Login {
@Override void login() {}
}
์ธํฐํ์ด์ค(interface): ๋ชจ๋ ๊ฒ์ด ๋ค ์ถ์์ผ๋ก๋ง ์ด๋ฃจ์ด์ง ๊ฐ์ฒด
์ธํฐํ์ด์ค๋ ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ค.
๋คํ์ฑ
ํ(type)์ ์ฌ๋ฌ ๊ฐ์ง๋ก ํํํ ์ ์๋ค.
class GoogleLogin implements Login {
@Override void login() {}
}
public void main(String[] args) {
GoogleLogin gl = new GoogleLogin();
Login l = new GoogleLogin();
}
๊ฐ์ ์ธ์คํด์ค(new GoogleLogin())๋๋ผ๋ ์ฌ๋ฌ๊ฐ์ง ํ์ผ๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
๊ตฌ์ฒด ํด๋์ค์ ์ถ์ ํด๋์ค๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
๐ค ๋คํ์ฑ์ด ํ์ํ ์ด์ (์์ )
abstract class Login {
public abstract void login();
}
class GoogleLogin extends Login {
@Override
public void login() {
System.out.println("Google ๋ก๊ทธ์ธ์ ์ํํฉ๋๋ค.");
}
}
class AppleLogin extends Login {
@Override
public void login() {
System.out.println("Apple ๋ก๊ทธ์ธ์ ์ํํฉ๋๋ค.");
}
}
public static void main(String[] args) {
Login googleLogin = new GoogleLogin();
Login appleLogin = new AppleLogin();
performLogin(googleLogin); // Google ๋ก๊ทธ์ธ์ ์ํํฉ๋๋ค.
performLogin(appleLogin); // Apple ๋ก๊ทธ์ธ์ ์ํํฉ๋๋ค.
}
public static void performLogin(Login login) {
login.login();
}
performLogin() ๋ฉ์๋๋ ๋ก๊ทธ์ธ ๋ฐฉ์์ ์๊ด์์ด ๋ชจ๋ ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํ ์ ์๋ค.
performLogin(googleLogin)์ ํธ์ถํ๋ฉด Google ๋ก๊ทธ์ธ์ ์ํํ๊ณ , performLogin(appleLogin)์ ํธ์ถํ๋ฉด Apple ๋ก๊ทธ์ธ์ ์ํํ๋ฏ๋ก ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
โ ์ ๋ฆฌ
interface Login {
void login();
}
interface Portal {
void portal();
}
class Google implements Login, Portal {
@Override
public void login() {
}
@Override
public void portal() {
}
public void onlyGoogle() {}
}
public void main(String[] args) {
Login googleLogin = new Google();
googleLogin.login();
Portal googlePortal = new Google();
googlePortal.portal();
}
googleLogin๊ณผ googlePortal์ ๊ฐ์ Google์ด๋ผ๋ ๊ฐ์ฒด์ง๋ง, ๋๊ฐ ์ ๊ทผํ๋์ ๋ฐ๋ผ ํํฐ๋ง๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฆ, Loginํ์ธ googleLogin์ Login์ธํฐํ์ด์ค๊ฐ ๊ฐ์ง๋ login๋ฉ์๋์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ Portalํ์ธ googlePortal์ Portal์ธํฐํ์ด์ค๊ฐ ๊ฐ์ง๋ portal๋ฉ์๋์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ค์ ๊ด๊ณ๋ฅผ ์ด๋ฏธ์ง๋ก ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ถ์ํ, ๋คํ์ฑ์ ํตํด Googleํด๋์ค์ login๋ฉ์๋๋ Loginํ๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ , portal๋ฉ์๋๋ Portalํ๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ , onlyGoogle๋ฉ์๋๋ Googleํ๋ง์ด ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์บก์ํ๋ฅผ ์ง์ผฐ๋ค.
๊ฐ์ฒด ๊ฐ์ ํ๋ ฅ ๊ด๊ณ์์ ์์ ๋กญ๊ฒ ์ฌ์ฉ๋์ง๋ง ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ ํํ์ด๋ค.
3. UML
UML์ "Unified Modeling Language"์ ์ฝ์
์ํํธ์จ์ด ์์คํ ์ ์๊ฐ์ ์ผ๋ก ๋ชจ๋ธ๋งํ๊ณ ์ค๊ณํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ์คํ๋ ๊ทธ๋ํฝ ์ธ์ด์ด๋ค.
UML์ ๊ฐ์ฒด ์งํฅ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์์คํ ์ ๊ตฌ์กฐ, ๋์, ์ํธ์์ฉ, ํ์ ๋ฑ์ ๋ค์ํ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ํํํ ์ ์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ: ๊ธฐ๋ฅ์ ๊ฐ์ฒด์๊ฒ ๋๋ ์ ์ํ์ํจ๋ค.
=> ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ ๊ตฌ๋ถํ๋ค.
=> ๊ฐ์ฒด๊ฐ์ ์ฐ๊ด๊ด๊ณ๊ฐ ์ด๋ ํ๋ค.
์ด๋ฌํ ์ค๊ณ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํ ๋๊ตฌ: UML
- Usecase Diagram
- Sequence Diagram
- Package Diagram
- Class Diagram
Tool ์ฌ์ดํธ: https://app.diagrams.net/, https://staruml.io/
Generalization (์ผ๋ฐํ)
์์ ๋๋ ํ์ฅ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ, ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ํน์ฑ๊ณผ ๋์์ ์์๋ฐ๋ ๊ด๊ณ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก "is-a" ๊ด๊ณ๋ก ํํ๋ค.
ํํ: B -โทA
A๊ฐ ์ถ์์ฒด, B๊ฐ ๊ตฌํ์ฒด
B๊ฐ A๋ฅผ ์์ํ๋ค. (extends)
A๊ฐ B์ ์ผ๋ฐํ ํํ์ด๋ค. (์ถ์ํ)
Realization (์ค์ฒดํ)
ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ด๊ณ
ํด๋์ค๊ฐ ์ธํฐํ์ด์ค์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
ํํ: B --โทA
B๊ฐ A๋ฅผ implements ํ๋ค
Dependency (์์กด)
ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์์กดํ๋ ๊ด๊ณ
ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฑฐ๋ ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์์กด ๊ด๊ณ๊ฐ ํ์ฑ๋๋ค.
ํํ: A --> B
A๊ฐ B๋ฅผ ์์กดํ๋ค.
A๊ฐ ๋์ํ๊ธฐ ์ํด์๋ B๊ฐ ์์ด์ผ ํ๋ค.
Association (์ฐ๊ด)
ํด๋์ค ๊ฐ์ ์ฐ๊ฒฐ์ ๋ํ๋ด๋ ๊ด๊ณ
ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ๊ด๋ จ์ด ์์์ ํํํ๋ค.
Directed Association (์ง์ ์ฐ๊ด)
์ฐ๊ด ๊ด๊ณ์์ ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐฉํฅ์ฑ์ ๋ช ์ํ๋ ๊ด๊ณ
์ผ๋ฐฉํฅ ๋๋ ์๋ฐฉํฅ์ผ๋ก ํํ๋ ์ ์์ต๋๋ค.
ํํ: A -> BA๊ฐ B๋ฅผ ์ฌ์ฉํ๋ค.
์ฃผ์ฒด: A. ๋์:B
Aggregation (์งํฉ, ์งํฉ์ฐ๊ด)
์ ์ฒด์ ๋ถ๋ถ ๊ฐ์ ๊ด๊ณ
ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์งํฉ์ ํฌํจํ๋ ๊ฒฝ์ฐ ์งํฉ ๊ด๊ณ๊ฐ ํ์ฑ๋๋ค.
์งํฉ ๊ด๊ณ์์๋ ์ ์ฒด ๊ฐ์ฒด๊ฐ ๋ถ๋ถ ๊ฐ์ฒด๋ค์ ๋ํ ์์ ๋ ์ฑ ์์ ๊ฐ์ง ์์ต๋๋ค.
ํํ: A โ- B, A โ-> B
B๊ฐ ์์ด๋ A ์ค์ค๋ก ์กด์ฌ ๊ฐ๋ฅํ๋ค.
Composition (ํฉ์ฑ, ๋ณตํฉ์ฐ๊ด)
์ ์ฒด์ ๋ถ๋ถ ๊ฐ์ ๊ฐํ ๊ด๊ณ
ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ๊ตฌ์ฑ ์์๋ก์ ์กด์ฌํ๋ฉฐ, ์ ์ฒด ๊ฐ์ฒด๊ฐ ๋ถ๋ถ ๊ฐ์ฒด๋ค์ ์์ ํ๊ฑฐ๋ ์ฑ ์์ง๋ ๊ด๊ณ์ ๋๋ค.
ํํ: A โ- B, A โ-> B
B๊ฐ ์์ผ๋ฉด A๊ฐ ์กด์ฌํ ์ ์๋ค.
โ ์ ๋ฆฌ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ์ ์ค๊ณ๋ฅผ ํํํ๊ธฐ ์ํด ํ์ํ ๊ฒ
- ๊ฐ์ฒด๋ฅผ ๋ฌด์์ผ๋ก ๋ง๋ค์๋์ง (ํ๋, ๋ฉ์๋)
- ๊ฐ์ฒด๋ค ์ฌ์ด์ ๊ด๊ณ๋ ์ด๋ ํ์ง
4. ๊ฐ์ฒด์งํฅ ์ค๊ณ
๐ค ์ด๋ป๊ฒ ํ๋ฉด ๊ฐ์ฒด์งํฅ์ ์ํ ์ ์์๊น?
=> ๊ฐ์ฒด๋ฅผ ์ ๋๋๊ณ ์ฐ๊ด ์ง์ ์ ์๋๋?
๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ํ๋ 5๊ฐ์ง ์์น
- S: SRP(Single Responsibility Principle) ๋จ์ผ ์ฑ ์ ์์น, ๊ฐ์ฒด๊ฐ ์์ ๋๋ ๊ฒฝ์ฐ ์์ ๋๋ ์ด์ ๋ ํ๋ ๋๋ฌธ์ด์ด์ผ ํ๋ค.
- O: OCP(Open-Closed Principle), ์์ ์๋ ๋ซํ๊ณ , ํ์ฅ์๋ ์ด์ด๋ผ.
- L: LSP(Liskov Substitution Principle), ์ถ์๊ฐ์ฒด๋ก ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ๊ตฌ์๊ฐ์ฒด๊ฐ ๋ค์ด๊ฐ๋ ์๋ฌด ๋ฌธ์ ์์ด์ผ ํ๋ค.
- I: ISP(Interface Segregation Principle) ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น, ์ธํฐํ์ด์ค์ ์์กดํ์ง ์๋๋ก ๋ถ๋ฆฌํ๋ผ.
- D: DIP(Dependency Inversion Principle) ์์กด์ฑ ์ญ์ ์์น
์์น์ ๋ฐ๋ผ์ ์ค๊ณ๋ฅผ ํด๋ดค๋๋ ์ฌ๋ฌ ๊ฐ์ง ๊ฒฝ์ฐ์์ ๊ณตํต์ ์ด ๋ณด์๋ค.
=> 23๊ฐ์ง์ ๋์์ธ ํจํด
์ฐธ๊ณ : https://refactoring.guru/design-patterns/catalog
Reference
UML: ํด๋์ค ๋ค์ด์ด๊ทธ๋จ๊ณผ ์์ค์ฝ๋ ๋งคํ
'๐๏ธ ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SpringBoot Part1-5 (0) | 2023.06.26 |
---|---|
SpringBoot Part1-4 (0) | 2023.06.23 |
SpringBoot Part1-3 (0) | 2023.06.22 |
SpringBoot Part1-2 (0) | 2023.06.21 |
SpringBoot Part 1-1 (0) | 2023.06.21 |
๋๊ธ