You Can Become A
๋ฆ๊ฒ ์์ํด๋ ๋๊ตฌ๋ ์ง ๋ ธ๋ ฅํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ ์ ์์ด์ !
OOP
๐ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น - S.O.L.I.D
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5์์น S.O.L.I.D ๋ชจ๋ ์ฝ๋์์ LSP๋ฅผ ์งํค๊ธฐ์๋ ์ด๋ ค์. ๋ฆฌ์ค์ฝํ ์นํ ์์น์ ๋ฐ๋ฅด๋ฉด ์์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋์ ํ๋๋ผ๋ ์๋์ ๋ง๊ฒ ์๋๋์ด์ผ ๋๋ค๊ณ ํ์ต๋๋ค. SOLID ์์น์ด๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ์์ ์ง์ผ์ค์ผ ํ 5๊ฐ์ ์ํํธ์จ์ด ๊ฐ๋ฐ ์์น( SRP, OCP, LSP, ISP, DIP )์ ๋งํ๋ค. SRP(Single Responsibility Principle): ๋จ์ผ ์ฑ ์ ์์น OCP(Open Closed Priciple): ๊ฐ๋ฐฉ ํ์ ์์น LSP(Listov Substitution Priciple): ๋ฆฌ์ค์ฝํ ์นํ ์์น ISP(Interface Segregation Principle): ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น DIP(Dependency Inver..
๐ ๊ฐ์ฒด์ ๊ฒฐํฉ๋ & ์์ง๋ ์๋ฏธ์ ๋จ๊ณ ๐ฏ ์ด์ ๋ฆฌ
์ํํธ์จ์ด์ ๋ชจ๋ ๋ ๋ฆฝ์ฑ ์๊ณ ๋ก ํ๋ก๊ทธ๋๋ฐ์ด๋ ๋ฌธ์ ๋ฅผ ์ ์ํ๊ณ ํ๋์ฉ ํด๊ฒฐํด๋๊ฐ๋ ๊ณผ์ ์ ๋งํ๋ค. ๋ง์ฝ ๋ฌธ์ ๊ฐ ๋ณต์กํ๊ณ ํฐ ๋ฌธ์ ๋ผ๋ฉด, ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ์ชผ๊ฐ์ด์ ํ๋์ฉ ํ์ด๋๊ฐ๊ฒ ๋ ๊ฒ์ธ๋ฐ, ์ด ๋ ๋ฌธ์ ๋ฅผ ์์ ๋ถ๋ถ์ผ๋ก ์ชผ๊ฐ๋๊ฐ๋ ๊ฒ์ ๋ชจ๋ํ๋ผ๊ณ ํ๋ค. ๋ชจ๋์ ์ํํธ์จ์ด๋ฅผ ๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๋๋์ด์ง ์์ค ๋จ์๋ฅผ ๋งํ๋ค. ๋ ๋ฆฝ์ ์ผ๋ก ์ปดํ์ผ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ ํน์ ํ๋์ ํจ์๋ ํด๋์ค๋ ๋ชจ๋์ด ๋๋ค. ๋ณดํต ์ข์ ์ํํธ์จ์ด ์ผ์๋ก ๋ชจ๋์ ๋ ๋ฆฝ์ฑ์ด ๋๋ค๊ณ ํ๋ค. ์ข์ ๋ชจ๋ํ๋ ๋ชฉ์ ์ ๋ง๋ ๊ธฐ๋ฅ๋ง์ผ๋ก ๋ชจ๋์ ๋๋๊ฒ ๋๋๋ฐ, ๊ฐ๊ฐ์ ๋ชจ๋์ ์ฃผ์ด์ง ๊ธฐ๋ฅ๋ง์ ๋ ๋ฆฝ์ ์ผ๋ก ์ํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ฑ์ด ๋๊ณ ์ฝ๋์ ์ดํด/์์ ์ด ์ฉ์ดํ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ๋ค์ด ํด๋น ๋ชจ๋์ ์์ ํ๋๋ผ๋ ๋ค๋ฅธ ๋ชจ๋์ ๋ผ์น๋ ์ํฅ์ด ์ ๊ฒ ๋๋ฉฐ,..
๐ OOP ์บก์ํ & ์ ๋ณด ์๋ ๊ฐ๋ ์๋ฒฝ ์ดํดํ๊ธฐ
์บก์ํ (Encapsulation) ์บก์ํ๋ ์ฝ๊ฒ ๋งํ๋ฉด ๋ณ์๋ ๋ฉ์๋๋ค์ ์บก์๋ก ๊ฐ์ธ์ ์๋ณด์ด๊ฒ ํ๋ ์ ๋ณด ์๋ ๊ฐ๋ ์ค ํ๋์ด๋ค. ์ฐ๋ฆฌ๊ฐ ๋จน๋ ์์ฝ์ ์๊ฐํด๋ณด๋ฉด ๋๋ค. ์์ฝ์ ์ค์ ์ฝ ๋ด์ฉ์ ๊ฐ๋ฃจ์ฝ์ด์ง๋ง, ์ด๊ฒ์ ์บก์๋ก ๊ฐ์ธ๋ฉด์ ๋ง์ ์๋ํ์ฌ ์ฌ๋์ด ๋จน๊ธฐ ํธํ๊ฒ ํ์์ผ๋ฉฐ, ๋ํ ๋ณต์กํ ์ฌ๋ฃ๋ค์ ๋ฐฐํฉ์ ์บก์๋ก ํฌ์ฅํ์ฌ ๋ค๋ฃจ๊ธฐ ํธํ๊ฒ ํ์๋ค. ์ด์ฒ๋ผ ์บก์ํ๋ ๊ฐ์ฒด์ ์์ฑ(Field)๊ณผ ํ์(Method)๋ฅผ ํ๋๋ก ๋ฌถ๊ณ , ์ธ๋ถ๋ก ๋ถํฐ ๋ด๋ถ๋ฅผ ๊ฐ์ธ ์จ๊ฒจ ์๋ํ๋ค. ๋ํ ์ธ๋ถ์ ์๋ชป๋ ์ ๊ทผ์ผ๋ก ๊ฐ์ด ๋ณํ๋ ์๋์น ์๋ ๋์์ ๋ฐฉ์งํ๋ ๋ณดํธ ํจ๊ณผ๋ ๋๋ฆด ์ ์๋ค. ์๋ฐ์์๋ ๋ํ์ ์ผ๋ก protected , default , private์ ์ ๊ทผ์ ์ด์๋ฅผ ํตํด ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. class Time { private ..
๐ ์๋ฐ์ ๋คํ์ฑ(Polymorphism) ์๋ฒฝ ์ดํดํ๊ธฐ
๋คํ์ฑ (Polymorphism) ๋คํ์ฑ(ๅคๅฝขๆง) ์ด๋, ๊ทธ ์์ฒด์ ์๋ฏธ๋ฅผ ํ์ค ๊ตญ์ด์ฌ์ ์์ ์ฐพ์๋ณด๋ฉด, '๊ฐ์ ์ข ์ ์๋ฌผ์ด๋ฉด์๋ ์ด๋ค ํํ๋ ํ์ง์ด ๋ค์ํ๊ฒ ๋ํ๋๋ ํ์' ์ด๋ผ ์ ์๋์ด ์๋ค. ์ด๋ฅผ ํ๋ก๊ทธ๋๋ฐ์ ๋์ ํด๋ณด๋ฉด, ๋คํ์ฑ(polymorphism)์ด๋ ๊ฐ์ ์๋ฃํ์ ์ฌ๋ฌ๊ฐ์ง ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋์ ํ์ฌ ๋ค์ํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด๋ผ ์ ์๋ ์ฑ์ง์ ์๋ฏธํ๋ค. ์ด๋ฅผ ํตํด ์กฐ์ ํด๋์ค์ ์ฐธ์กฐ ๋ณ์๋ก ์์ ํด๋์ค์ ์ฐธ์กฐ ๋ณ์๋ฅผ ๋ค๋ฃจ๊ฑฐ๋, ๋์ผํ ์ด๋ฆ์ ๊ฐ์ ์ฌ๋ฌ ํํ์ ๋งค์๋๋ฅผ ๋ง๋ค ์ ์๋ค. ์๋ฐ์์ ๋ํ์ ์ผ๋ก ์ค๋ฒ๋ก๋ฉ, ์ค๋ฒ๋ผ์ด๋ฉ, ์ ์บ์คํ , ๋ค์ด์บ์คํ , ์ธํฐํ์ด์ค, ์ถ์๋ฉ์๋, ์ถ์ํด๋์ค ๋ฐฉ๋ฒ์ด ๋ชจ๋ ๋คํ์ฑ์ ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฆ, ๋คํ์ฑ์ ํด๋์ค๊ฐ ์์ ๊ด๊ณ์ ์์๋ ๋ํ๋๋ ๋ค์ฑ๋ก์ด ์ฑ์ง ์ธ ๊ฒ์ด..
๐ ๊ฐ์ฒด ์งํฅ ๊ฐ๋ ๊ณผ ์ถ์ํ ์๋ฒฝ ์ดํดํ๊ธฐ
๊ฐ์ฒด ์งํฅ(OOP) ๊ฐ๋ ๊ณผ ํน์ง ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ด๋, ๋ง์ ๊ฐ์ฒด(Objcet)๋ค์ด ๋ชจ์ฌ์ ์ํธ ํ๋ ฅํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ ๋ฐฉ๋ฒ์ ์ผ์ปซ๋๋ค. ์ข๋ ์ฝ๊ฒ ๋งํ๋ฉด, ํ๋ก๊ทธ๋จ์ ๋ฌถ์ ๋จ์๋ก ์๊ฒ ์ชผ๊ฐ์, ์ถํ์ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ ํธํ๊ฒ ๋ง๋ค์ด ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์ด์ฒ๋ผ ๋ ๊ณ ๋ธ๋ญ ์กฐ๋ฆฝํ๋ฏ์ด ์ปดํฌ๋ํธ๋ฅผ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ธฐ ๋๋ฌธ์, ํ์ ์์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋๋ค. ๋ํ์ ์ผ๋ก ๋ง์ด ์๋ ค์ง Java์ธ์ด๋ฅผ ํฌํจํ์ฌ Ruby Python, C++, Objectivc-C, C#, Kotlin ๋ฑ์ด ๋ชจ๋ ๊ฐ์ฒด์งํฅ ์์๋ฅผ ๊ฐ์ง ์ธ์ด์ด๋ค. ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์ ๋ต์ ๊ผญ ๋ฐ๋์ ๊ฐ์ฒด ์งํฅ ์ธ์ด(Java, kotlin ๋ฑ)์์๋ง ์ฌ์ฉ๋๋ ๊ฒ์ ์๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ..
โ ์๋ฐ ๊ฐ์ฒด ์งํฅ(OOP) ํด๋์ค ๋ฌธ๋ฒ - ํ๋ฐฉ ๊ฐ์ด๋
ํด๋์ค(class) ๊ตฌ์ฑ ์๋ฐ์์ ํด๋์ค(class)๋ ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ ํ ๋๋ ์ค๊ณ๋์ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค. ์๋ฐ์์๋ ์ด๋ฌํ ์ค๊ณ๋๋ฅผ ๊ฐ์ง๊ณ , ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ๋ ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ์ด์ด๋๊ฐ๋ค. ํด๋์ค๋ ๊ฐ์ฒด์ ์์ฑ ๋ณ์๋ฅผ ๋ํ๋ด๋ ํ๋(field)์ ๊ฐ์ฒด์ ํจ์๋ฅผ ๋ํ๋ด๋ ๋ฉ์๋(method)๋ก ๊ตฌ์ฑ๋์ด์๋ค. ํด๋์ค, ๊ฐ์ฒด, ์ธ์คํด์ค, ๋ฉ์๋, ํ๋ ๋ฑ ์๋ฐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ฐ๋ค ๋ณด๋ฉด ์ ๋ง ๋ง์ ์ฉ์ด๋ค์ด ๋์จ๋ค. ํนํ ํด๋์ค๋, ๊ฐ์ฒด, ์ธ์คํด์ค ๋ถ๋ถ์ ๋น์ทํ๋ฉด์๋ ๊ตฌ๋ถ์ด ๋์ด ์์ด ๋ง์ด ํผ๋ํ๋ ํธ์ด๋ค. ๋๊ตฐ๊ฐ์๊ฒ ์ค๋ช ํ๊ธฐ ์ํด์๋ ์ฉ์ด๋ฅผ ์ ํํ ๊ตฌ๋ถํด์ ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์ ํ์คํ ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ์. ํด๋์ค : ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ํ ํ๋ฆฟ(์ค๊ณ๋) ๊ฐ์ฒด : ํด๋์ค(ํ ํ๋ฆฟ)๊ณผ n..