OOP์ 4๋ ์์น
1. ์บก์ํ (Encapsulation)
๋ฐ์ดํฐ ๋ณดํธ๋ฅผ ์ํด ํด๋์ค์ ์์ฑ์ private์ผ๋ก ์ค์ ํ๊ณ , getter์ setter ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํ๋๋ก ํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ฅผ ์ธ๋ถ์์ ์ง์ ๋ณ๊ฒฝํ์ง ๋ชปํ๊ฒ ํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๋ค.
2. ์ถ์ํ (Abstraction)
์ถ์ํ๋ ๋ณต์กํ ์์คํ
์ ์ธ๋ถ ์ฌํญ์ ์จ๊ธฐ๊ณ , ํ์ํ ๋ถ๋ถ๋ง์ ๋๋ฌ๋ด๋ ๊ฐ๋
์ด๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค. abstract class์ interface๋ฅผ ํ์ฉํ์ฌ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ์ ์ํ๊ณ , ์ด๋ฅผ ๊ตฌํํ๋ ๋ค์ํ ํด๋์ค์์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
3. ๋คํ์ฑ (Polymorphism)
๋คํ์ฑ์ ๊ฐ์ ์ธํฐํ์ด์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ํน์ฑ์ด๋ค. ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ(Overloading)๊ณผ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(Overriding)์ ํตํด ์ ์ฐํ ์ค๊ณ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
4. ์์ (Inheritance)
์์์ ๊ธฐ์กด ํด๋์ค(๋ถ๋ชจ ํด๋์ค)์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ตฌ์กฐ์ด๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ์์คํ
์ ๋ณต์ก์ฑ์ ์ค์ผ ์ ์๋ค.
SOLID 5๋ ์์น
1. S - ๋จ์ผ ์ฑ ์ ์์น (Single Responsibility Principle)
ํด๋์ค๋ ์ค์ง ํ๋์ ์ฑ
์๋ง ๊ฐ์ ธ์ผ ํ๋ฉฐ, ํด๋์ค์ ๋ณ๊ฒฝ์ ์ค์ง ๊ทธ ์ฑ
์ ๋๋ฌธ์ด์ด์ผ ํ๋ค. ์ฆ, ํ๋์ ํด๋์ค๊ฐ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๋ด๋นํ์ง ์๋๋ก ์ค๊ณํ์ฌ ์ฝ๋์ ์ดํด์ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ค.
2. O - ๊ฐ๋ฐฉ/ํ์ ์์น (Open/Closed Principle)
์ํํธ์จ์ด ๊ฐ์ฒด(ํด๋์ค, ๋ชจ๋ ๋ฑ)๋ ํ์ฅ์ ๋ํด์๋ ์ด๋ ค(Open) ์์ด์ผ ํ๊ณ , ์์ ์ ๋ํด์๋ ๋ซํ(Closed) ์์ด์ผ ํ๋ค. ์ฆ, ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ๋ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํด์ผ ํ๋ค.
3. L - ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
์๋ธํ์
์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ ํ์
์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ฉฐ, ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ ์ ์งํด์ผ ํ๋ค. ์ฆ, ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๋์ฒด ๊ฐ๋ฅ์ฑ์ ๊ฐ์ ธ์ผ ํ๋ฉฐ, ๋ถ๋ชจ ํด๋์ค๊ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด๊ฐ ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ์์ด์ผ ํ๋ค.
4. I - ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface Segregation Principle)
ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๊ฐ ๋ฒ์ฉ ์ธํฐํ์ด์ค ํ๋๋ณด๋ค ๋ซ๋ค. ์ฆ, ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ์ง ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ ๊ตฌ์ฑํด์ผ ํ๋ค.
5. D - ์์กด ์ญ์ ์์น (Dependency Inversion Principle)
๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ฉฐ, ๋ ๋ค ์ถ์ํ์ ์์กดํด์ผ ํ๋ค. ์ฆ, ๊ตฌ์ฒด์ ์ธ ๊ตฌํ๋ณด๋ค๋ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค์ ์์กดํ์ฌ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ์ผ ํ๋ค.
์ด๋ฌํ SOLID ์์น์ ์ ์ฉํ๋ฉด ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋๊ณ , ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ์ด ์ฉ์ดํด์ง๋ฉฐ, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ๋ฒ๊ทธ ๋ฐ์ ํ๋ฅ ์ ์ค์ผ ์ ์๋ค.
'๐จ๏ธ Backend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
QueryDSL ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.06.18 |
---|---|
JPA์์ ๋ณ๊ฒฝ ๊ฐ์ง์ ๋ณํฉ(Merge) ์ดํดํ๊ธฐ (0) | 2025.03.26 |
H2 Database๋? ๋น ๋ฅด๊ณ ๊ฐ๋ฒผ์ด ํ ์คํธ DB์ ๋ชจ๋ ๊ฒ (0) | 2025.03.12 |
JPA๋? ๊ฐ๋ , ์์์ฑ ์ปจํ ์คํธ, JPQL๊น์ง ํ๋ฒ์ ์ ๋ฆฌ (1) | 2025.03.06 |
Spring WebSocket๊ณผ STOMP, ๊ทธ๋ฆฌ๊ณ Kafka๋ฅผ ํ์ฉํ ์ค์๊ฐ ํต์ (3) | 2025.03.01 |