๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ ์ฉ์ดํ๊ฒ ๋ง๋ ๋ค!
* ์๋ฐ ์ธ์ด์ ๋คํ์ฑ(Polymorphism)
- ์ญํ ๊ณผ ๊ตฌํ์ผ๋ก ๊ตฌ๋ถํด๋ณด์
ex) ์ด์ ์ - ์๋์ฐจ

์ด์ ์๋ ์๋์ฐจ์ ์ข ๋ฅ๊ฐ ๋ฐ๊ปด๋ ์ด์ ์ ํ ์ ์๋ค. ์๋์ฐจ์ ์์ธํ ๋ด๋ถ ๊ตฌ์กฐ๋ผ๋์ง.. ์ด๋ฐ๊ฑด ์ ๊ฒฝ ์์จ๋ ๋๋ค!
์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ?
- ํด๋ผ์ด์ธํธ๋ ๋์์ ์ญํ (์ธํฐํ์ด์ค)๋ง ์๋ฉด ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๊ตฌํ ๋์ ์์ฒด๋ฅผ ๋ณ๊ฒฝํด๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
- ์๋ฐ ์ธ์ด์ ๋คํ์ฑ์ ํ์ฉ
- ์ญํ = ์ธํฐํ์ด์ค
- ๊ตฌํ = ์ธํฐํ์ค๋ฅผ ๊ตฌํํ ํด๋์ค, ๊ตฌํ ๊ฐ์ฒด
- ๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋ ์ญํ ๊ณผ ๊ตฌํ์ ๋ช ํํ ๋ถ๋ฆฌ
- ๊ฐ์ฒด ์ค๊ณ์ ์ญํ (์ธํฐํ์ด์ค)์ ๋จผ์ ๋ถ์ฌํ๊ณ , ๊ทธ ์ญํ ์ ์ํํ๋ ๊ตฌํ ๊ฐ์ฒด ๋ง๋ค๊ธฐ
๊ฐ์ฒด์ ํ๋ ฅ์ด๋ผ๋ ๊ด๊ณ๋ถํฐ ์๊ฐ
- ํผ์ ์๋ ๊ฐ์ฒด๋ ์๋ค.
- ํด๋ผ์ด์ธํธ : ์์ฒญ, ์๋ฒ : ์๋ต
- ์๋ง์ ๊ฐ์ฒด ํด๋ผ์ด์ธํธ์ ๊ฐ์ฒด ์๋ฒ๋ ์๋ก ํ๋ ฅ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค
๋คํ์ฑ์ ๋ณธ์ง!!
- ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ฒ์ ๊ตฌํ ๊ธฐ๋ฅ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค
** ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ ์ ๋ฆฌ
- ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ด
- ํ์ฅ ๊ฐ๋ฅํ ์ค๊ณ
- ํด๋ผ์ด์ธํธ์ ์ํฅ์ ์ฃผ์ง ์๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ธํฐํ์ด์ค๋ฅผ ์์ ์ ์ผ๋ก ์ ์ค๊ณํ๋ ๊ฒ์ด ์ค์!!
์คํ๋ง๊ณผ ๊ฐ์ฒด ์งํฅ
- ๋คํ์ฑ์ด ๊ฐ์ฅ ์ค์ํ๋ค!
- ์คํ๋ง์ ๋คํ์ฑ์ ๊ทน๋ํํด์ ์ด์ฉํ ์ ์๊ฒ ๋์์ค๋ค
- ์คํ๋ง์์ ์ด์ผ๊ธฐํ๋ ์ ์ด์ ์ญ์ (IOC), ์์กด๊ด๊ณ ์ฃผ์ (DI)์ ๋คํ์ฑ์ ํ์ฉํด์ ์ญํ ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ์ง์ํ๋ค.
- ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ๋ง์น ๋ ๊ณ ๋ธ๋ญ ์กฐ๋ฆฝํ๋ฏ์ด, ๊ณต์ฐ ๋ฌด๋์ ๋ฐฐ์ฐ๋ฅผ ์ ํํ๋ฏ์ด, ๊ตฌํ์ ํธ๋ฆฌํ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค
์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (SOLID) ******
- ๋จ์ผ ์ฑ ์ ์์น(Single ์ด์ฉ๊ณ ์ ์ฉ๊ณ ..)
๋ชจ๋ ํด๋์ค ์ฆ, ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ ์(๊ธฐ๋ฅ)๋ง ๊ฐ์ง๋ค!
์) ์๋์ฐจ(ํด๋์ค) -----> ์ํธ, ์์ง,..........๋ฑ๋ฑ ์์ฒญ๋ ์ธ๋ถ ๊ธฐ๋ฅ์ด ๋ง์๋ฐ, ์ด๊ฑธ ์๋์ฐจ์ ํ๋์ ํด๋์ค์ ๋ค ๋ฃ์ง๋ง๊ณ , ๊ฐ๊ฐ ๋ถ๋ฆฌํ์ฌ ์์กด๊ด๊ณ๋ก ์ ์ํ ๊ฒ!
- ๊ฐ๋ฐฉ/ํ์ ์์น(Open/Closed ์ด์ฉ๊ณ ์ ์ฉ๊ณ )
ํด๋์ค๊ฐ ํ์ฅ์๋ ๊ฐ๋ฐฉ๋์ด์๊ณ , ์์ ์๋ ๋ซํ์์ด์ผํ๋ค!
์ฆ, ์ด๋ค ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ด์ผํ๋ค.
ํด๋์ค ์์ฑํ ๋ ์์์ ๋ฐ์์ ๊ธฐ์กด ์ฝ๋๋ ๊ทธ๋๋ก!
public class Calculator {
//์ฌ๊ฐํ ๋์ด ๊ตฌํ๋ ํจ์
public float RectangleArea(Rectangle rectangle) {
return rectangle.width * rectangle.height;
}
//์ ๋์ด ๊ตฌํ๋ ํจ์
public float CircleArea(Circle circle) {
return circle.width * circle.height;
}
//์ค๊ฐํ ๋์ด ๊ตฌํ๋ ํจ์..
//๋ํ ์ถ๊ฐ๋ ๋๋ง๋ค Calculator ํด๋์ค๊ฐ ์์ ๋์ด Calculator๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ํด๋์ค์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค!
}
๊ฐ๋ฐฉ ํ์ ์์น์ ๋ฐ๋ฅธ ์ฝ๋
public abstract class Shape { // Shape ์ถ์ ํด๋์ค๋ฅผ ์์ฑํ์ฌ
public abstract float CalculateArea(); // ๋์ด ๊ตฌํ๋ ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ ๋ค
}
public class Rectangle extends Shape { // Shape ์์๋ฐ์ ์ฌ๊ฐํ ํด๋์ค ๋ฐ๋ก ๋นผ๊ธฐ
public float width;
public float height;
@Override
public float CalculateArea() { //๋์ด๋ ๋ฐ๋ก ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ๊ตฌํ (์ด๋ ๊ฒ ํด์ผ ๋ํ์ด ์ถ๊ฐ๋์ด๋ ๊ธฐ์กด์ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค)
return width * height;
}
}
public class Circle extends Shape { // Shape ์์ ๋ฐ๊ธฐ
public float radius;
@Override
public float CalculateArea() {
return radius * radius * 3.14;
}
}
- ๋ฆฌ์ค์ฝํ ์นํ ์์น(Liscope ์ด์ฉ๊ณ ์ ์ ๊ณ )
์์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค๊ฐ, ์ด๊ฑฐ๋ฅผ ์์๋ฐ์ ํ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ์ ํด๋ ์ ์ ์๋ํด์ผํ๋ค!
- ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(Interface ์ด์ฉ๊ณ ์ ์ฉ๊ณ )
ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค ๋ณด๋ค๋ ์ฌ๋ฌ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค!
- ์์กด ์ญ์ ์์น(Dependency Inversion ์ด์ฉ๊ณ ์ ์ฉ๊ณ )
์์กด๊ด๊ณ๋ฅผ ๋งบ์๋ ์ข๋ ์ผ๋ฐ์ ์ด๊ณ ์ถ์์ ์ธ๊ฒ์ ์์กดํด์ผํ๋ค!
์ฆ, ํ์ ๊ฐ๋ ์ด ์๋๊ณ ์ข ๋ ์์๊ฐ๋ , ์ถ์ํ๋๊ฒ์ ์์กดํ๋๊ฒ์ด ์ข๋ค!
'๋ฐฑ์๋(Back-End) ๊ฐ๋ฐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ ๋ฒ์ ์ ๋ฆฌ (8,11,17,21) (0) | 2025.03.19 |
---|---|
์ ๊ทํํ์(Regex) (1) | 2025.03.01 |
REST API / RESTful ์ด๋? (0) | 2025.02.15 |
์ ์ด์ฟผ๋ฆฌ(jQuery)๋? (0) | 2025.01.20 |
์๋ฐ์คํฌ๋ฆฝํธ / ์คํฌ๋ฆฝํธ ์ธ์ด (0) | 2025.01.19 |