OOP
๐ก OOP
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object Oriented Programming)์ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ค
ํ๋๋ก, ํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ ์์ผ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ
๊ทธ ๊ฐ์ฒด๋ค ๊ฐ์ ์ ๊ธฐ์ ์ธ ์ํธ์์ฉ์ ํตํด ๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ด๋ค.
๐ OOP์ 5๊ฐ์ง ์์น
๏ผ. Single Responsibility Principle (๋จ์ผ ์ฑ ์ ์์น)
โจ ํด๋์ค๋ ๋จ ํ๋์ ๋ชฉ์ ์ ๊ฐ์ ธ์ผ ํ๋ฉฐ, ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ๋จ ํ๋์ ์ด์ ์ฌ์ผ ํ๋ค.
๏ผ. Open-Closed-Principle (๊ฐ๋ฐฉ ํ์ ์์น)
โจ ์ฝ๋๋ ์์ฑ๊ณผ ์ถ๊ฐ์๋ ๊ฐ๋ฐฉ๋์ง๋ง, ์์ ๊ณผ ์ญ์ ์๋ ๋ซํ์๋ค๋ ์์น.
๏ผ. Liskov Substitution Principle (๋ฆฌ์ค์ฝํ ์นํ ์์น)
โจ ์์ ๊ฐ์ฒด๋ ๋ถ๋ชจ ๊ฐ์ฒด๊ฐ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ์ํ ๊ฐ๋ฅํด์ผ ํ๋ค๋ ์์น์ ๋ปํฉ๋๋ค.
๏ผ. Interface Segregation Principle (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น)
โจ ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ๋ฉด ์๋๋ค๋ ๋ฒ์น
๏ผ. Dependency Inversion Principle (์์กด ์ญ์ ์์น)
โจ ์์คํ ๋ด๋ถ์์ ์์กด๊ด๊ณ๋ฅผ ๋งบ์ ๋๋, ๋ณํ๊ธฐ ์ฌ์ด ๊ฒ ๋ณด๋ค๋ ๋ณํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ์งํฅํด์ผ ๋๋ค.
๐ ์ฅ์
๏ผ. ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์ฉ์ด
- ๋จ์ด ๋ง๋ ํด๋์ค๋ฅผ ๊ฐ์ ธ์์ ์ด์ฉ ํ ์ ์๊ณ ์์์ ํตํด ํ์ฅํด์ ์ฌ์ฉ ๊ฐ๋ฅ
๏ผ. ์ ์ง๋ณด์๊ฐ ์ฌ์
- ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ฝ๋๋ฅผ ์์ ํด์ผํ ๋ ์ผ์ผ์ด ์ฐพ์ ์์ ํด์ผ ํ๋ ๋ฐ๋ฉด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ์์ ํด์ผ ํ ๋ถ๋ถ์ด ํด๋์ค ๋ด๋ถ์ ๋ฉค๋ฒ ๋ณ์ ํน์ ๋ฉ์๋๋ก ์๊ธฐ ๋๋ฌธ์ ํด๋น ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋๋ค.
๏ผ. ๋ํ ํ๋ก์ ํธ์ ์ ํฉ
- ํด๋์ค ๋จ์๋ก ๋ชจ๋ํ ์์ผ์ ๊ฐ๋ฐํ ์ ์์ผ๋ฏ๋ก ๋ํ ํ๋ก์ ํธ์ฒ๋ผ ์ฌ๋ฌ๋ช , ์ฌ๋ฌํ์ฌ์์ ๊ฐ๋ฐ์ด ํ์ํ ์ ์ ๋ฌด ๋ถ๋ดํ๊ธฐ ์ฝ๋ค.
๐ ๋จ์
๏ผ. ์ฒ๋ฆฌ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆผ
๏ผ. ๊ฐ์ฒด๊ฐ ๋ง์ผ๋ฉด ์ฉ๋์ด ์ปค์ง ์ ์์
๏ผ. ์ค๊ณ์ ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์
๐ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ํค์๋
๏ผ. ํด๋์ค + ์ธ์คํด์ค (๊ฐ์ฒด)
ํด๋์ค๋ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ถ์ํ๋ฅผ ๊ฑฐ์ณ
์ง๋จ์ ์ํ๋ ์์ฑ(attribute)๊ณผ ํ์(behavior)๋ฅผ ๋ณ์์ ๋ฉ์๋๋ก ์ ์ํ ๊ฒ.
์ธ์คํด์ค(๊ฐ์ฒด)๋ ํด๋์ค์์ ์ ์ํ ๊ฒ์ ํ ๋๋ก ์ค์ ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น๋ ๊ฒ์ผ๋ก
์ค์ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ
๏ผ. ์ถ์ํ
- ๋ชฉ์ ๊ณผย ๊ด๋ จ์ดย ์๋ย ๋ถ๋ถ์ย ์ ์ธํด์ย ํ์ํย ๋ถ๋ถ์ย ํฌ์ฐฉํ๋ย ๊ธฐ๋ฒ
- ๊ฐ์ฒด์ย ๊ณตํต๋ ์์ฑ๋ค ์ค ํ์ํ ๋ถ๋ถ์ ํฌ์ฐฉํด์ ํด๋์ค๋กย ์ ์ํ๋ย ์ค๊ณย ๊ธฐ๋ฒ
- ๊ตฌ์ฒด์ ์ธย ์ฌ๋ฌผ๋ค์ย ๊ณตํต์ ์ธย ํน์ง์ย ํ์ ํด์ย ์ด๋ฅผย ํ๋์ย ๊ฐ๋ (์งํฉ)์ผ๋กย ๋ค๋ฃจ๋ย ๊ฒ
๏ผ. ์บก์ํ
- ์ธ๋ถ์ย ๋ ธ์ถํ ย ํ์๊ฐย ์๋ย ์ ๋ณด๋ค์ย ์๋ย (์ ๋ณด์๋)
- ์ ๋ณดย ์๋(informationย hiding):ย ํ์๊ฐย ์๋ย ์ ๋ณด๋ย ์ธ๋ถ์์ย ์ ๊ทผํ์งย ๋ชปํ๋๋กย ์ ํํ๋ย ๊ฒ
- ๋์ย ์์ง๋,ย ๋ฎ์ย ๊ฒฐํฉ๋๋ฅผย ์ ์งํ์ฌย ์ ์ฐํจ๊ณผย ์ ์ง๋ณด์์ฑย ์ฆ๊ฐ
- ex) ๋งํธ์์ ๊ตฌ๋งค์๋ ์ํ๋ช ๊ณผ ๊ฐ๊ฒฉ๋ง ์๋ฉด๋ ๋ฟ, ๋ค์ ์์ฌ๋ฃ์ ์ฌ์ง๊ฐ ์ข ๋ค์ํ ์ ๋ณด๋ ๋ชฐ๋ผ๋ ๋๋คย ํ์ํ ์ ๋ณด๋ง ๋ณด์ฌ์ฃผ๊ฒ๋ ์ค๊ณํด์ผ ๋๋ค๋ ์๋ฏธ
๏ผ. ์์ํ
- ๋ถ๋ชจย ํด๋์ค๊ฐย ์์ย ํด๋์ค์๊ฒย ์์ฑ์ย ๋ฌผ๋ ค์ฃผ๋ย ๊ฒ
- ์ฝ๋์ย ์ฌ์ฌ์ฉ
- ์ฌ๋ฌย ๊ฐ์ฒด๋ค์ดย ๊ฐ์งย ๊ณตํต๋ย ํน์ฑ์ย ๋ถ๊ฐ์์ผย ํ๋์ย ๊ฐ๋ ์ด๋ย ๋ฒ์น์ผ๋กย ์ฑ๋ฆฝ์ํค๋ย ๊ณผ์
๏ผ. ๋คํํย
- ๊ฐ์ ํํ์ด์ง๋ง ๋ค๋ฅธ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ(์๋ฅผ ๋ค๋ฉด ๋จ์ฌ์ ์ฑ๋ณ)
- ์๋ก ๋ค๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ฐ์์ ๋ ๊ฐ์์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ๋ฅ๋ ฅ
- ์ค๋ฒ๋ผ์ด๋ฉ(Overriding) ์ ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค๊ฐ ์ฌ์ ์ํด์ ์ฌ์ฉ
- ์ค๋ฒ๋ก๋ฉ(Overloading) ์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋ ์ฌ๋ฌ๊ฐ๋ฅผ ๊ฐ์ง๋ฉด์ ๋งค๊ฐ๋ณ์์ ์ ํ๊ณผ ๊ฐ์๊ฐ ๋ค๋ฅด๋๋ก ํ๋ ๊ธฐ์