๐ SRP Single Responsibility Principle ๋จ์ผ ์ฑ ์ ์์น
ํด๋์ค๋ ํ๋์ ์ผ์๋ง ์ฑ ์์ง๋ค.
์ฆ, 1๊ฐ์ ํด๋์ค์ ํ๋์ ์ญํ ๋ง ๊ฐ์ ธ์ผํ๋ค.
์ค๊ณ์ค์ธ ํ๋ก๊ทธ๋๋ฐ์ ํด๋์ค๊ฐ ์ฌ๋ฌ๊ฐ์ง ์ญํ ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ๊ฒํ ํ,
๋ถํ์ํ ํ๋๋ ๋ฉ์๋๋ฅผ ์ ๊ฑฐํด์ผํ๋ค.

์๋ฅผ๋ค์ด FileReader(String str)๋ก ์ฐ์ด๋ค๊ฐ -> FileReader(File file)๋ก ๋งค๊ฐ๋ณ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๊พธ๋ฉด
์ธ๋ถ์์ ์ฐ์ด๊ณ ์๋ FileReader๋ ๋ณ๊ฒฝ์ด๋์๊ธฐ๋๋ฌธ์,
FTP Client์ FileReader ๋ํ ์์ ํด์ค์ผํ๋ค.
.
.
์ด ๋ฐ์๋, FTP Client๋ ๋๋ฌด ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
๊ฐ๊ฐ์ ๋ถ๋ฆฌ์ํฌ ํ์๊ฐ ์๋ค.

๊ทธ๋ ๊ฒ ๋๋ฉด ๋ค๋ฅธ ์๋ก์ด ๋ชจ๋ (Local File Reader, HttpClient)์ด
์ถ๊ฐ ๋ฐ ์์ ๋๋๋ผ๋ ์ํฅ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์, ์ฌํ์ฉ์ด ์ฌ์์ง๋ค.
๐ OCP Open Closed Principle ๊ฐ๋ฐฉ ํ์ ์์น(์คํ/ํด๋ก์ฆ์์น)
์์ ์ ํ์ฅ์๋ ์ด๋ ค์๊ณ ์ฃผ๋ณ์ ๋ณํ ๋ํด์๋ ๋ซํ์์ด์ผํ๋ค.
์ ๊ณต๋๋ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ง๋ง(์คํ), ์์ ์ ์ํฅ์ ๋ฐ์ง ์๋ (ํ์์ฑ)์์ ๊ณ ๋ คํ๋ค.
๋คํ์ฑ์ ์๋ก,
์ํผํด๋์ค์ ๊ทธ ์๋ธ ํด๋์ค๊ฐ ๋ฏธ๋์ ์ด๋ค ํ์ฅ๊ณผ ์์ ๋ ๋ฐฉ์(๋ฉ์๋ ๋ด์ฉ ๋ณ๊ฒฝ ๋ฑ)์ ํด๋
์ฌ์ฉ์ ์ธก์ ๊ทธ ์์ ์ ๋ํด ์ํฅ์ ๋ฐ์ง ์์์ผ ํ๋ค.
ํ์ง๋ง, ์์ ์ด ์๊ธฐ๋ฉด ๊ทธ์ ๋ฐ๋ฅธ ๋ณํ๋ ๋ฐ๋์ ์๊ธด๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ๋?
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๋ณ๋์ ์กฐ๋ฆฝ, ์ค์ ์๊ฐ ํ์ํ๋ค.
์์ํด๋์ค ๋๋ ์ธํฐํ์ด์ค๋ฅผ ์ค๊ฐ์ ๋ ์ผ๋ก์จ,
์์ ์ ๋ณํ์ ๋ํด์๋ ํ์์ ์ด์ง๋ง, ์ธํฐํ์ด์ค๋ ์ธ๋ถ์ ๋ณํ์ ๋ํด์ ํ์ฅ์ ๊ฐ๋ฐฉํด์ค ์ ์๋ค.
๋ํ์ ์ผ๋ก JDBC์ Mybatis, Hibernate ๋ฑ JAVA์์๋ Stream์์ ์ฐพ์๋ณผ ์ ์๋ค.

์ดํ๋ฆฌ์ผ์ด์ ์ ์ฅ์์๋ ์ธ๋ถ์ ์ผ๋ก ๋ง์ Database๊ฐ ์์ ์ ์๋ค.
Database๊ฐ ๋์ด๋ ์๋ก ๊ณ์ ๋ณ๊ฒฝ๋๋ ์ํฉ์ด ์์ ์ ์๋๋ฐ,
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ JDBC ์ธํฐํ์ด์ค๊ฐ ์๋ค.
์ดํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์ ์ผ๋ก๋ ํ ํ๋์ ํต๋ก์ธ JDBC ์ธํฐํ์ด์ค๋ง์ ๊ฐ์ง๊ณ ์์ง๋ง,
JDBC ์ธํฐํ์ด์ค ์ธ๋ถ์ ์ผ๋ก๋ N๊ฐ ์ด์์ผ๋ก ํ์ฅํ ์ ์๋ค.
๐ LSP(Liskov Substitution Principle) ๋ฆฌ์ค์ฝํ ์นํ์์น
์๋ธํ์
์ ์ธ์ ๋ ์์ ์ ๊ธฐ๋ฐ(์์) ํ์
์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผํ๋ค
ํ์ง๋ง ์ฌ๊ธฐ์ ํ์ ํด๋์ค๊ฐ ์ค์ํ๊ฒ ์ง์ผ์ผํ ๊ฒ์
์์ ์ ์์ ํ์ (์ธํฐํ์ด์ค)์ ๊ท์ฝ์ ๋ค ์ง์ผ์ผํ๋ค๋ ์ ์ด๋ค.
๋คํ์ฑ์ ์ง์ํ๊ธฐ ์ํ ์์น, ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ ๋ฏฟ๊ณ ์ฌ์ฉํ๋ ค๋ฉด, ์ด ์์น์ด ํ์ํ๋ค.
๋จ์ํ ์ปดํ์ผ ํจ์ค๋ฅผ ๋์ด์๋ ์ด์ผ๊ธฐ๋ค.
์๋ฅผ๋ค์ด, ์๋์ฐจ ์ธํฐํ์ด์ค์ ์์ ์ ์์ผ๋ก ๊ฐ๋ผ๋ ๊ธฐ๋ฅ์ด๋ค.
ํ์ง๋ง ์ด ๊ธฐ๋ฅ์ ํ์ํด๋์ค์์ ๋ค๋ก ๊ฐ๊ฒ ๊ตฌํํ๋ฉด LSP๊ฐ ์๋ฐ๋๋ค.
์์ ๊ธฐ๋ฅ์ ๋๋ฆฌ๋๋ผ๋ ๋ฐ๋์ ์์ผ๋ก ๊ฐ์ผํ๋ค.
์ถ๊ฐ ) ์์๋ ํ์๋ฅผ ํฌ๊ดํ๋ ์ผ๋ฐ์ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
ํฌ์ ๋ฅ - ์ธ๊ฐ ์ ๊ฐ๋ ์์ ์ธ๊ฐ์ ์ธ์ ๋ ํฌ์ ๋ฅ์ ์ํ๋ ๊ฒ์ ๋ ์ฌ๋ฆฌ๋ฉด ๋๋ค.
์ํผํด๋์ค์์ ๊ตฌํ ๊ฐ๋ฅํ ๊ฒ์ ์๋ธํด๋์ค๋ก ๋์ฒด ์๋์ด ๊ฐ๋ฅํ์ง ๊ณ ๋ คํด์ผํ๋ค.
๐ ISP (Interface Segregation Principle) ์ธํฐํ์ด์ค ๋ถ๋ฆฌ์์น
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉด ์๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ํ์ง ์๋ ๋ฉ์๋๋ฅผ ๊ฐ์ํด์๋ ์๋๋ค๋ ์๋ฏธ์ด๋ค. ์ธํฐํ์ด์ค์ ์ ์๋์ด ์๋ ๊ฒ์ ๊ตฌํํ๋ ํด๋์ค์์ ๋ชจ๋ ๊ตฌํํด์ผ ํ๋ฉฐ, ๊ทธ ์์ ์๋ง์ง ์์ ๋ฉ์๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ์ค๊ณ๊ฐ ๋ง๊ฐ์ง ๊ฐ๋ฅ์ฑ์ด ์๋ค.
ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ๊ณผ ์ค๊ณ์ ๋ฐ๋ผ์ SRP(๋จ์ผ ์ฑ ์ ์์น) / ISP(์ธํฐํ์ด์ค ๋ถ๋ฆฌ์์น)๋ฅผ ์ ํํ๋ค.
์ง๋๋ผ๋ ๊ฐ์ฒด๋ ์๋ ๋๋ณด์๋ด, ์๋์ฐจ ์ ์ฉ๊ธธ ์๋ด, ์์ ๊ฑฐ ์ ์ฉ๊ธธ ์๋ด, ์งํ์ฒ ๋ ธ์ ๋ฑ๋ฑ ๋ง์ ๊ธฐ๋ฅ์ด์์ ์ ์๋ค.
์ด๋ ์งํ์ฒ ์ดํ์ ๋ง๋ค ๋, ์ง๋๋ฅผ ์์๋ฐ์ผ๋ฉด ๋ค๋ฅธ ํ์์๋ ์๋์ฐจ ์ ์ฉ๊ธธ ์๋ด๊น์ง ๊ตฌํํด์ผํ๋ ๋ถํ์์ฑ์ด ์๊ธด๋ค. ๋ฐ๋ผ์ ๋๋ณด์๋ด, ์๋์ฐจ ์ ์ฉ๊ธธ ์๋ด์ ๋ฐ๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๊ฐ ๋ง๋ค์๋ ๊ฒ์ด ์ธํฐํ์ด์ค ๋ถ๋ฆฌ์์น์ด๋ค.
๐ DIP (Dependency Inversion Principle)์์กด ์ญ์ ์์น
์์ ๋ณด๋ค ๋ณํ๊ธฐ ์ฌ์ด ๊ฒ์ ์์กดํ์ง ๋ง์์ผํ๋ค.
๊ธฐ๋ณธ ์ญํ ์ ์์กดํด์ผ์ง, ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค๋ ๊ฒ์ด๋ค.
(์ํผ ํด๋์ค๋ ์๋ธ ํด๋์ค์ ์์กดํ๋ค.)
์ฌ๋์ ์ท์ ์์กดํ ์ ์๋ค.
์ฌ์ฑ์ท, ๋ด ์ท, ๋จ์ฑ์ท์ด ์๋๋ผ, '์ท'์ ์์กดํ๋ค.


์ด๋ Open Closed Principle ๊ฐ๋ฐฉ ํ์ ์์น๊ณผ ๋น์ทํ ์๋ฆฌ์ด๋ค.
์๋ SOLID ๋ ๊ฐ์ฒด ์งํฅ 4๋ ํน์ฑ์ ๊ธฐ๋ฐํจ์ผ๋ก์จ ์๋ก ์ ์ฌํ ๋ชจ์๊ณผ ์๋ฏธ๋ฅผ ๋ด๊ณผ ์๋ค.
๊ฐ์ฒด ์งํฅ์ ํต์ฌ์ ๋คํ์ฑ์ด๋ค.
ํ์ง๋ง ๋คํ์ฑ ๋ง์ผ๋ก๋ ์ฝ๊ฒ ๋ถํ์ ๊ฐ์ ๋ผ์ฐ๋ฏ ๊ฐ๋ฐํ ์ ์๋ค.
๊ตฌํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ ์ํฉ์ด ์จ๋ค.
๋คํ์ฑ ๋ง์ผ๋ก๋ OCP, DIP๋ฅผ ์งํฌ ์ ์๋ค.
๋ญ๊ฐ๊ฐ ๋ ํ์ํ๋ค๋ ๋ง์ด๋ค.
๊ทธ๊ฒ ๋ญ๊น.
๋ต์ ์คํ๋ง์ ์๋ค.
DI, ์์กด์ฑ ์ฃผ์ ์ด๋ค.
์ด์จ๋ ,
์ด๋ค ์์น์ด๋ ๋ฐํ์๋ "์ญํ ์ ๋ช ํํ ํด์ผํ๋ค"๋ ์๊ฐ์ ํ์๋ก ๊ฐ์ ธ์ผ ํ๋ค.
๐ POJO JAVA๋?
POJO(Plain Old Java Object)
์์ํ ์๋ฐ ์ค๋ธ์ ํธ๋ฅผ ๋ปํ๋ค.
1. ํน์ ๊ท์ฝ์ ์ข
์๋์ง ์๋๋ค.
ํน์ Library, Module์์ ์ ์๋ ํด๋์ค๋ฅผ ์์๋ฐ์์ ๊ตฌํํ์ง ์์๋ ๋๋ค.
POJO๊ฐ ๋๊ธฐ ์ํด์๋ ์ธ๋ถ์ ์์กด์ฑ์ ๋์ง ์๊ณ , ์์ํ JAVA๋ก ๊ตฌ์ฑ์ด ๊ฐ๋ฅํด์ผํ๋ค.
2. ํน์ ํ๊ฒฝ์ ์ข
์๋์ง ์๋๋ค.
๋ง์ผ ํน์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์
์ธ๋ถ ์ข ์์ ์ธ HTTP REQUEST, SESSION ๋ฑ POJO๋ฅผ ์๋ฐฐํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
๋ํ ๋ง์ด ์ฌ์ฉํ๊ณ ๋ ์์ง๋ง @Annotation ๊ธฐ๋ฐ์ผ๋ก ์ค์ ํ๋ ๋ถ๋ถ๋
์์ฐํ๋ POJO๋ผ๊ณ ๋ณผ ์ ์๋ค.
POJO Framework
Spring, Hibernate
ํ๋์ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํด์๋
์์คํ
์ ๋ณต์กํจ , ๋น์ฆ๋์ค ๋ก์ง์ ๋ณต์กํจ ๋ฑ ๋ค์ํ ์ด๋ ค์์ ๋ง์ดํ๊ฒ ๋๋ค.
์์ ๋ ํ๋ ์ ์ํฌ๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅผ ํ๊ณ ์์ผ๋ฉฐ, ๋ํ POJO๋ฅผ ์งํฅํ๊ณ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ์๋น์ค ๋ก์ง์ ์ง์คํ๊ณ ์ด๋ฅผ POJO๋ก ์ฝ๊ฒ ๊ฐ๋ฐ ํ ์ ์๋๋ก ์ง์ํ๊ณ ์๋ค.
๋ค์ ์ง๋ฌธ๋ค์ ์ ๊ธฐ์ตํด๋ณด์.
์์ ์ ์ฝ๋์ if/else , switch๊ฐ ๋๋ฌดํ๊ณ ์์ง์์๊ฐ?
์ฑ
์๊ณผ ์ญํ ์ด ๋ค๋ฅธ ์ฝ๋ ํ๋์ ํด๋์ค์ ๋ค ๋ค์ด๊ฐ ์์ง ์์๊ฐ?
์ ์ฐจ์งํฅ์ ์ผ๋ก ํ๊ฐ์ ํ์ผ์ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ฃ๊ณ ์์ง ์์๊ฐ?
๋ด๊ฐ ๋ง๋ ๊ฐ์ฒด๊ฐ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฐ?
'์ด๋ก > Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐธ์กฐ์๋ฃํ reference data type (1) | 2021.07.19 |
---|---|
์์ฑ์ Constructor (0) | 2021.07.19 |
๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ํน์ง OOP Memory (0) | 2021.07.15 |
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ Object-Oriented Programming(OOP)์ด๋ (1) | 2021.07.15 |
[JAVA] ๊ฐ์ฒด์งํฅ์์์ ๋ฌผ๋ฆฌ ๊ฐ์ฒด์ ๊ฐ๋ ๊ฐ์ฒด / ์์ง๋์ ๊ฒฐํฉ๋ (2) | 2021.06.03 |