๐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ด๋?
- Object Oriented Programming
- ํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ ์์ผ, ์ํ์ธ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๊ฐ์ฒด๋ค ๊ฐ์ ์ ๊ธฐ์ ์ธ ์ํธ ์์ฉ์ ํตํด ๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ
์ฅ์
- ์ฝ๋ ์ฌ์ฌ์ฉ ์ฉ์ด
- ์ ์ง ๋ณด์ ์ฌ์
- ๋ํ ํ๋ก์ ํธ์ ์ ํฉ
๋จ์
- ์ฒ๋ฆฌ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆผ
- ๊ฐ์ฒด๊ฐ ๋ง์ผ๋ฉด ์ฉ๋์ด ์ปค์ง ์ ์์
- ์ค๊ณ ์ ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ ํ์
๐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง
์ถ์ํ (Abstraction)
- ๊ฐ์ฒด๋ค์ด ๊ณตํต์ ์ผ๋ก ํ์๋ก ํ๋ ์์ฑ์ด๋ ๋์์ ํ๋๋ก ์ถ์ถํด๋ด๋ ์์
- ์ธ๋ถ์ ์ธ ์ฌ๋ฌผ์ ๊ณตํต์ ์ธ ํน์ง์ ํ์ ํ ํ, ํ๋์ ๋ฌถ์์ผ๋ก ๋ง๋ค์ด ๋ด๋ ๊ฒ์ด ์ถ์ํ
์บก์ํ (Encapsulation)
- ์ ๋ณด ์๋ํ๋ฅผ ํตํด ์์ง๋, ๋ฎ์ ๊ฒฐํฉ๋๋ฅผ ์ ์งํ ์ ์๋๋ก ์ค๊ณํ๋ ๊ฒ
- ํ ๊ณณ์ ๋ณํ๊ฐ ์ผ์ด๋๋ ๋ค๋ฅธ ๊ณณ์ ๋ฏธ์น๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ต์ํ ์ํค๋ ๊ฒ
- ๊ฐ์ฒด ๋ด๋ถ์ ์ด๋ค ๋์์ ๋ํ ๊ตฌํ์ด ์ด๋ป๊ฒ ๋์ด์๋ ์ง ๊ฐ์ถ๋ ๊ฒ
- ๊ฐ์ฒด๋ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฉํ ์ ์๋๋ก ์์ง๋ ฅ์ด ๊ฐํด์ผ ํ๊ณ , ๋ค๋ฅธ ๋ชจ๋์ ์ฐธ์กฐํ๋ ๊ฒฐํฉ๋๋ ๋ฎ์์ผ ํจ
- ๋ชฉ์ : ์ฝ๋๋ฅผ ์ฌ์์ ์์ด ์ฌํ์ฉ, ์ ๊ทผ ์ ์ด์๋ฅผ ํตํ ์ ๋ณด ์๋
์์
- ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ด ์ง๋ ๊ณตํต๋ ํน์ฑ์ ๋ถ๊ฐ์์ผ ํ๋์ ๊ฐ๋ ์ด๋ ๋ฒ์น์ผ๋ก ์ฑ๋ฆฝํ๋ ๊ณผ์
- ๊ธฐ์กด์ ํด๋์ค๋ฅผ ์ฌ ์ฌ์ฉํ์ฌ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ๋ ์๋ฐ์ ๋ฌธ๋ฒ์ ์์
- "~๋ก ๋ถํฐ ์์ ๋ฐ์๋ค" ๋ณด๋ค๋ "~๋ก ๋ถํฐ ํ์ฅ๋์๋ค"๊ฐ ๋ ์ ์ ํ ํํ
๋คํ์ฑ (Polymorphism)
- ์๋ก ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋์ ์ํ์ ๋ช ๋ น ๋ฐ์์ ๋, ๊ฐ์์ ํน์ฑ์ ๋ง๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ ๊ฒ
- ๊ฐ์ฒด ์งํฅ ํจ๋ฌ๋ค์์ ํต์ฌ
- ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํด์ฃผ๊ณ ์ ์ฐํจ์ ๊ฐ๊ฒ ํด์ค
- ์์ : ์ค๋ฒ ๋ผ์ด๋ฉ, ์ค๋ฒ ๋ก๋ฉ
๐ ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์์น (SOLID)
SRP(Single Responsibility) : ๋จ์ผ ์ฑ ์์ ์์น
- ํด๋์ค๋ ๋จ ํ ๊ฐ์ ์ฑ ์(๊ธฐ๋ฅ)์ ๊ฐ์ ธ์ผ ํจ
- ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ๋จ ํ๋์ฌ์ผ ํจ
- ์ด๋ฅผ ์งํค์ง ์์ผ๋ฉด ์ ์ง ๋ณด์๊ฐ ์ด๋ ค์์ง (ํ๋์ ์ฑ ์ ๋ณ๊ฒฝ์ ๋ค๋ฅธ ์ฝ๋๋ ์ํฅ)
OCP(Open-Closed) : ๊ฐ๋ฐฉ-ํจ์ ์์น
- ํ์ฅ์๋ ์ด๋ ค ์๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํจ
- ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ธฐ๋ฅ์ ์์ ํ๊ฑฐ๋ ์ถ๊ฐ ํ ์ ์๋๋ก ์ค๊ณํด์ผ ํจ
- ์ด๋ฅผ ์งํค์ง ์์ผ๋ฉด ๊ฐ์ฒด ์งํฅ์ ์ฅ์ ์ด ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์์
LSP(Liskov Substitution) : ๋ฆฌ์ค์ฝํ ์นํ ์์น
- ํ์ ํ์ ๊ฐ์ฒด๋ ์์ ํ์ ๊ฐ์ฒด์์ ๊ฐ๋ฅํ ํ์๋ฅผ ์ํํ ์ ์์ด์ผ ํจ
- ์์ ๊ด๊ณ์์๋ ๊ผญ ์ผ๋ฐํ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํด์ผํ๋ค๋ ์๋ฏธ
- ํด๋น ์์น์ ์งํค์ง ์์ผ๋ฉด ๊ฐ๋ฐฉ ํ์ ์์น ์๋ฐ
ISP(Interface Segregation) : ์ธํฐํ์ด์ค ๋ถ๋ฆฌ์ ์์น
- ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ๋ ๋ฉ์๋์๋ง ์์กดํด์ผ ํ๋ค๋ ์์น
- ์ธํฐํ์ด์ค๋ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์๊ฒ ๋ถ๋ฆฌ ๋์ด์ผ ํจ
- ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ํ์๋ก ํ๋ ์ธํฐํ์ด์ค๋ค์ ๋ถ๋ฆฌํจ์ผ๋ก์จ, ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ์ด ์๊ฒจ๋ ์ํฅ์ ๋ฐ์ง ์๋๋ก ์ค๊ณํด์ผ ํ๋ ๊ฒ์ด ํต์ฌ
DIP(Dependency Inversion) : ์์กด ์ญ์ ์์น
- ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ ๋, ๋ณํ๊ธฐ ์ฌ์ด ๊ฒ(๊ตฌ์ฒด์ ์ธ ๊ฒ) ๋ณด๋ค๋ ๋ณํ๊ธฐ ์ด๋ ค์ด ๊ฒ(์ถ์์ ์ธ ๊ฒ)์ ์์กด
- ์ฆ, ๊ตฌ์ฒดํ ๋ ํด๋์ค ๋ณด๋ค๋ ์ถ์ ํด๋์ค๋ ์ธํฐํ์ด์ค์ ์์กดํด์ผ ํ๋ค๋ ๋ป
- ์ ์์ค ๋ชจ๋์ด ๊ณ ์์ค ๋ชจ๋์์ ์ ์ํ ์ถ์ ํ์ ์ ์์กด
- ์ ์์ค ๋ชจ๋์ด ๋ณ๊ฒฝ๋์ด๋ ๊ณ ์์ค ๋ชจ๋์ ๋ณ๊ฒฝ์ด ํ์ ์๋ ํํ๊ฐ ์ด์์
์ฐธ๊ณ :
https://velog.io/@haero_kim/SOLID-%EC%9B%90%EC%B9%99-%EC%96%B4%EB%A0%B5%EC%A7%80-%EC%95%8A%EB%8B%A4
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ํด๋์ค์ ๊ฐ์ฒด (0) | 2022.12.22 |
---|---|
[Java] ๋ฌธ์๊ฐ ์ซ์์ธ์ง ๋ฌธ์์ธ์ง ํ๋จํ๊ธฐ (Character.isDigit(), Character.isLetter()) (0) | 2022.12.22 |
[Java] ๋ฐฐ์ด(Array) (0) | 2022.12.19 |
[Java] ์ ์ด๋ฌธ - ๋ฐ๋ณต๋ฌธ (for, ํฅ์๋ for, while, do-while, break, continue) (0) | 2022.12.16 |
[Java] ์ ์ด๋ฌธ - ์กฐ๊ฑด๋ฌธ(if, if - else, switch, ํฅ์๋ switch) (0) | 2022.12.16 |
๋๊ธ