Oop.md
Last updated
Last updated
์์ฆ์๋ ๋๋ถ๋ถ์ด ๋น์ฐํ ๋ฌธ๋ฒ์ด๋ผ๊ณ ๋ฐฐ์ฐ๊ณ OOP๋ก ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ์ผ๋ง๋ ํ๊ธฐ์ ์ธ ์์ด๋์ด์ธ์ง ๋ชจ๋ฅด์ง๋ง, C์ ๊ฐ์ ์ ์ฐจ์งํฅ์ธ์ด๋ฅผ ๋จผ์ ๊ฒฝํํด๋ณธ ์ฌ๋๋ค์ ์ผ๋ง๋ ์ ์ธ๊ณ์ธ ๊ฐ๋ ์ธ์ง ๋๋ ๊ฒ์ด๋ค.
์ ์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Procedual Programming)์ ํ๋ก์ธ์ค๊ฐ ํจ์ ๋จ์๋ก ์์๋๋ก ์งํ๋๋ ๊ฒ์ ์๋ฏธํ๋ ๋ฐ๋ฉด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(์ดํ OOP)๋ ๊ฐ์ฒด ๋ค์ ์ ๊ธฐ์ ์ธ ๊ด๊ณ๋ฅผ ํตํด ํ๋ก์ธ์ค๊ฐ ์งํ๋๋ค.
OOP๋ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ ํจ๋ฌ๋ค์ ์ค ํ๋๋ก, ํ์ค ์ธ๊ณ๋ฅผ ํ๋ก๊ทธ๋จ ์ค๊ณ์ ๋ฐ์ํ๋ค๋ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๋ก ์ด๋ค.
์ ์ฐ์ฑ -> ๋ณ๊ฒฝ, ๊ฐ๋ฐ ๋ฐ ๋ณด์ ์ฉ์ด
์ง๊ด์ ์ธ ์ฝ๋ ๋ถ์ ๊ฐ๋ฅ
๊ฐํ ์์ง๋ ฅ, ์ฝํ ๊ฒฐํฉ๋ ฅ
์์ง๋ ฅ? ๊ฒฐํฉ๋ ฅ?
์์ง๋ ฅ(cohesion)
ํ๋ก๊ทธ๋จ์ ํ ์์๊ฐ ํน์ ๋ชฉ์ ์ ์ํด ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ๊ธฐ๋ฅ๋ค์ด ๋ชจ์ฌ์ ๊ตฌํ๋์ด ์๊ณ , ์ง๋์น๊ฒ ๋ง์ ์ผ์ ํ์ง ์์ผ๋ฉด ๊ทธ๊ฒ์ ์์ง๋ ฅ์ด ๋๋ค๊ณ ํํํ๋ค.
๊ฒฐํฉ๋ ฅ(coupling)
ํ๋ก๊ทธ๋จ ์ฝ๋์ ํ ์์๊ฐ ๋ค๋ฅธ ๊ฒ๊ณผ ์ผ๋ง๋ ์ฐ๊ฒฐ๋์ด ์๋์ง, ์ผ๋ง๋ ์์กด์ ์ธ์ง๋ฅผ ๋ํ๋ด๋ ์ ๋ -> ๊ฒฐํฉ๋ ฅ์ด ๋ฎ๋ค๋ ๊ฒ์ ๋ค๋ฅธ ์์๋ค๊ณผ ๊ด๊ณ๋ฅผ ํฌ๊ฒ ๋งบ๊ณ ์์ง ์๊ณ ๋ ์์กด์ ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
OOP๋ ํ๋์ ๋ฌธ์ ํด๊ฒฐ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ๋์ ๊ฐ์ฒด๋ฅผ ํ์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์งํฅํ๋ฏ๋ก ์์ง๋ ฅ์ ๊ฐํํ๋ฉฐ, ํด๋์ค ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์์ธํจ์ผ๋ก์จ ๊ฒฐํฉ๋ ฅ์ ์ฝํ๊ฒ ํ ์ ์๋ค.
๊ฐ์ฒด๋ ๋์์ ๋ํ๋ธ๋ค.
๊ตฌ์ฑ์์ ํ๋ํ๋๋ฅผ ๊ฐ์ฒด๋ผ๊ณ ํ๋ค.
ex) ์ฌ๊ณผ, ์์ญ์ด, ์์ ๋ฑ๋ฑ
๊ฐ์ฒด๋ค์ด ๊ณตํต์ ์ผ๋ก ๊ฐ๋ ์์ฑ(attribute)์ ํ์(method)๋ฅผ ์ ์ํ๋ค.
OOP์์ ์ฝ๋ ์์ฑ์ ๊ธฐ๋ณธ ๋จ์์ด๋ฉฐ ๊ฐ์ฒด๋ฅผ ์ด๋ฃจ๋ ํ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ค๋ฅธ ํด๋์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์์ธํด์ผํ๋ค.
Object to Class ๋ถ์ด๋นต - ๊ฐ์ฒด ๋ฟก์ด๋นตํ - ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ Class
ํด๋์ค๋ก๋ถํฐ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ, ์ฆ ๊ฐ์ฒด๋ค์ ์์ฑ์ ์กฐ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
ex) ์ฑ ์(object)์ ๋ ๋ค. -> Method
ํ๋์ ๊ฐ์ฒด์ ๋ํด ๊ทธ ๊ฐ์ฒด๊ฐ ํน์ ํ ๋ชฉ์ ์ ์ํด ํ์ํ ๋ณ์๋ ๋ฉ์๋๋ฅผ ํ๋๋ก ๋ฌถ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ ๋ณด์ ์๋ํ ์บก์ํ๋ฅผ ํ๋ ๊ฐ์ฅ ์ค์ํ ์ด์ ๊ฐ ์ฌ๊ธฐ์ ์๋ค. ๋ง์ฝ ์ํ์ด๋ผ๋ ํด๋์ค์ ์๊ณ ๋ผ๋ ๋ณ์๊ฐ public์ผ๋ก ์ง์ ๋์ด์๋ค๋ฉด ์ธ๋ถ์์ ์๊ณ ์ํ๋ฅผ ํ์ ํ ์ ์๊ณ ๋ฉ์๋๋ก ์ด๋ฅผ ๋ฐ๊ฟ ์๋ ์๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ์ ๋ณด์ ์ฑ์ ๋ฐ๋ผ private, protected ์ ๊ฐ์ ์ ๊ทผ ์ ํ์๋ฅผ ์ ๋ถ์ฌ ์ ์ธํ๊ณ getter, setter, property์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผ๊ฐ๋ฅํ๋๋ก ํ๋ค.
์ด๋ ๊ฒ ์ฝ๋ฉํ๋ค๋ฉด ์์ ๋กญ๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ์ฌ ๋ณด์์ฑ์ด ์นจํด๋๋ค.
์์ ๊ฐ์ด setter, getter๋ฅผ ์ด์ฉํด ๋ณด์์ฑ์ ๊ฐํํ๋ค.
์ถ์ํ๋ ๊ฐ์ฒด๋ค์ด ๊ฐ์ง ๊ณตํต์ ํน์ฑ๋ค์ ํ์ ํ๊ณ ๋ถํ์ํ ํน์ฑ๋ค์ ์ ๊ฑฐํ๋ ๊ณผ์ ์ด๋ค. ๊ฐ์ฒด๋ค์ด ๊ฐ์ง ๋์์ ๊ธฐ์ค์ผ๋ก ๋ฉ์๋๋ฅผ ๋ง๋๋๋ฐ, ์์ฑ์์ฃผ๊ฐ ์๋ ๋์ ์์ฃผ๋ก ์์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๊ฐ์ฒด์ ๋์์ ์ฐ๊ด์ด ๋์ง ์๋ ์์๋ค์ ๊ฒฉ๊ตญ์ ๋ถํ์ํ๊ธฐ ๋๋ฌธ์ ๋์์ ๋จผ์ ์ ์ํ๊ณ ๋์์ ํ์ํ ์์ฑ๋ค์ ์ ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
๊ฐ์ ์๋ฃํ์ ์ฌ๋ฌ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋์ ํ์ฌ ๋ค์ํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด๋ด๋ ์ฑ์ง์ ๋งํ๋ค. ํ๋์ ํ์ ์ผ๋ก ๋ค์ํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ผ๋ฉฐ ๊ฐ์ฒด๋ฅผ ๋ถํํํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค. ์ฃผ๋ก interface๋ฅผ ์ฌ์ฉํ์ฌ ๋คํ์ฑ์ ๊ตฌํํ๋ค.
์์ ์ฝ๋์ฒ๋ผ, ๊ฐ์ฒด์ ํน์ฑ์ ๋ฐ๋ผ์ ์ธํฐํ์ด์ค๋ฅด ํตํด ์์ ๊ฐ์ด ๋ค์ํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด๋ผ ์ ์๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ๋คํ์ฑ์ด๋ค.
OOP์ ๊ฐ์ฅ ํฐ ํน์ฑ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์์์ฑ์ด๋ค. ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ผ ํ๋ ๊ฒฝ์ฐ, ํ ๋ฒ ์์ฑ๋ ์ฝ๋๋ฅผ ํ์ฉํ์ฌ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค.