์ง๋ ํฌ์คํ ์์๋ OCP์ DIP๊ฐ ์๋ฐฐ ๋๋ ๊ฒฝ์ฐ์ ๋ํด์ ์์๋ณด์์ต๋๋ค. ์ด๋ฒ์๋ ์คํ๋ง์ด ์๋ ์์ ์๋ฐ๋ก ํด๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค. ์ ๊น ์ง๋ ๊ธ์ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. public class DriverImpl implements Driver{ Car car = new K3(); Engine engine = new Electronic(); @Override public void findOwnCarDetail() { car.findCarName(); car.findCarBrand(); engine.WayToMove(); } } DriverImpl ์ญํ ์ ๊ตฌํ์ฒด๊ฐ ์ง์ new ํค์๋๋ก ์ ์ธ ๋์ด ์์ต๋๋ค. ์ด๋ด ๊ฒฝ์ฐ ์ผํ๋ณด๋ฉด OCP์ DIP๋ฅผ ์ ์งํจ ๊ฒ ๊ฐ์ง๋ง ์ฌ์ค ์๋๋ผ๊ณ ์ง๋ ํฌ์คํ ์์ ..
๋ฐ๋๊ณผ ์ค์ฒ๋ผ ์๋ฐํ๋ฉด ๋ฐ๋ก ๋ ์ค๋ฅด๋ ๊ฒ์ด ์์ต๋๋ค. ๋ฐ๋ก "๊ฐ์ฒด ์งํฅ ์ธ์ด" ๋ผ๋ ๊ฒ์ ๋๋ค. "๊ฐ์ฒด ์งํฅ"์ด๋ ๋ ๊ณ ๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ๋ ๊ณ ๋ธ๋ก๋ค์ ์กฐ๋ฆฝํ์ฌ ์ฐ๋ฆฌ๋ ๋ฌด์์ด๋ ๋ง๋ค ์ ์์ต๋๋ค. ๋ ๊ณ ๋ฅผ ์ด์ฉํด์ ๋๋ฌผ์์ ๋ง๋ค์๋ค๊ณ ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค. ๋๋ฌผ์์๋ ๋ ๊ณ ๋ก ๋ง๋ค์ด์ง ์ฌ์๋ ์๊ณ , ํธ๋์ด๋ ์๊ณ , ์ฝ๋ผ๋ฆฌ๋ ์๊ณ , ์ ๊ฐ ์ข์ํ๋ ํ๋ค๋ ์์ต๋๋ค. ํ์ง๋ง ์ฌํ๊ฒ๋ ๋ ์ด์ ํธ๋์ด๊ฐ ์ธ๊ธฐ๊ฐ ์์ด์ ๊ณ ๋ฆด๋ผ ๋ ๊ณ ๋ก ๋ฐ๊พธ๊ณ ์ถ์ต๋๋ค. ์ด๋ด ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ์ฝ๊ฒ ๋๋ฌผ์์์ ํธ๋์ด ๋ ๊ณ ๋ฅผ ๋นผ๊ณ ๊ณ ๋ฆด๋ผ ๋ ๊ณ ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ํธ๋์ด, ๊ณ ๋ฆด๋ผ๊ฐ ๊ฐ์ฒด๊ฐ ๋๋ ๊ฒ์ ๋๋ค. ํธ๋์ด๋ฅผ ๋บ ๋ค๊ณ ํด์ ๊ธฐ์กด์ ์๋ ์ฌ์๋ ํ๋ค ๋ ๊ณ ๋ ์ ํ ์ํฅ์ด ์์ต๋๋ค. ๋ง์ฝ ๋ผ์ด๊ฑฐ ๋ ๊ณ ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๊ณ , ํธ๋์ด์ ์ฌ์๋ฅผ ๋ง๊ตฌ์ก..