๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ฐ๋๋ฐ ์์ด ์์๋๋ฉด ์ข์ ๋ด์ฉ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค.
์ ๊ทผ์ ์ด์์ ์บก์ํ
- ๋ฉค๋ฒ ๋ณ์ ์ง์ ์ ๊ทผ ๋ชปํ๋๋ก ํด์ผํจ
- ๋ฉ์๋๋ฅผ ํตํด์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ๋ด๋ถ์ ์ด๋ค ๋ณ์๊ฐ ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ , ์ํต์ ๋ฉ์๋๋ก๋ง ํด!
- ์ผ๋จ ์ด๊ฒ ๊ธฐ๋ณธ
getter, setter
- ๋๊ตฐ๊ฐ๊ฐ ๋ด๋ถ ์ ๋ณด๋ฅผ ๊ถ๊ธํดํ๊ฑฐ๋ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋ ์ด์ด์ฃผ๋ ๋ฉ์๋
- ํ์ํ ์์ ์ ํ์ํ ๊ฒ๋ง ์ด๊ฒ ๋ค๋ ๋ฐ์
- ์ฝ๊ฒ ํด์ฃผ๋ ค๋ฉด getter, ์ฐ๊ฒ ํด์ฃผ๋ ค๋ฉด setter
- ์์ฆ ์ธ์ด์์๋ immutable property์ ๊ฐ์ ๊ฒ์ด ์์ด ๋ฐฉ์์ด ๋ฐ๋๊ณ ์๊ธด ํ๋ค.
- get, set์ ๋ค๋ฅธ ์์
์ ํด์ผํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฑธ ์ผ๋จ ๊ธฐ๋ณธ์ผ๋ก ํจ
- ํน์ํ ๊ฒฝ์ฐ(์ฑ๋ฅ ๋ฑ)์ public์ผ๋ก ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ด์ด์ค
ํจ์๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ฅ์
- ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ ์ฅํ์ง ์๊ณ ํ์ํ ๋๋ง๋ค getter์์ โ๊ณ์ฐโ ๊ฐ๋ฅ
- ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ง ์๊ณ ๊ณ์ฐํด์ ๋์ง
- setter์์ ์ถ๊ฐ์ ์ธ ๋ก์ง์ ์คํํ ์ ์์
- ์์์ ๋์ด๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ โ๋ฌด์โ
- ์์์ ํตํ ๋คํ์ฑ ๊ตฌํ ๊ฐ๋ฅ
Best Practice
- ๋ฉค๋ฒ ๋ณ์๋ private
- infomation hiding
- ์ ๊ฐ์ฒด๋ ์์ฑํจ๊ณผ ๋์์ ์ ํจํด์ผ ํ๋ค.
- ๊ฐ์ฒด๋ ์ด์์๋ ๋์ ์ธ์ ๋ ์ ํจํ ์ํ์ฌ์ผ ์ด์์ ์
- ์ค์๋ ๋ฐฉ์งํ ์ ์์
- ์์ฑ์๋ฅผ ํตํด ๊ฐ์ ํ ์ ์์
- getter๋ ์์ ๋กญ๊ฒ ์ถ๊ฐ
- ์ ํ์ ์๋ ์ ๋ณด๋ ์๋ณด์ฌ์ฃผ๋๊ฒ ์ ์
- ํ์ง๋ง ๋ณด์ฌ์ค๋ ํฐ ๋ฌธ์ ๋ ์์
- ๊ทธ๋์ ์์ ๋กญ๊ฒ ์ด์ด๋
- ํ์ง๋ง ๊ฐ์ฒด์ Reference๋ฅผ ๋๊ธฐ๋ ๊ฒฝ์ฐ ์ฃผ์ํด์ผ ํจ
- C++์ ๊ฒฝ์ฐ โ์ฝ๊ธฐ ์ ์ฉโ ๋ ํผ๋ฐ์ค๋ฅผ ๋ฐํํ ์ ์์ด ์ด๋ฐ ๋ฌธ์ ์์ ์์ ๋ก์
- setter๋ ๊ณ ๋ฏผ ํ ์ถ๊ฐ
- ์ด์์ ์ธ ๊ฐ์ฒด์ ์ํ ์์ ๋ฒ
- ๊ฐ์ฒด์ ์ฌ์ฉ์๊ฐ ๋์์ ์ง์
- ๋์์ ๊ฒฐ๊ณผ๋ก ๊ฐ์ฒด ์์ ์๋ ์ํ๋ฅผ ๋ณ๊ฒฝ
- ์ฆ, ์ค์ค๋ก ๋ณ๊ฒฝ!
- ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฐ๊พธ๋ ๋ ์์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ํผํ์.
- ๋ฌด์กฐ๊ฑด ์ถ๊ฐํ๋ ๊ฒฝ์ฐ๋ ์๊ธด ํจ.. (์๋ฌด ์๊ฐ ์์ด)
- ๋ง์ฝ SDK์ธ ๊ฒฝ์ฐ์๋ ๋ฏธ๋๋ฅผ ๋๋นํ์ฌ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ๋ ์์
- ์ด์์ ์ธ ๊ฐ์ฒด์ ์ํ ์์ ๋ฒ
์บก์ํ
๊ฐ์ฒด์ ๋ฐ์ดํฐ์ ๋์์ ํ๋๋ก ๋ฌถ์ โ Class
๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ๋ก๋ถํฐ ๋ณดํธ โ getter, setter, ์ ๊ทผ์ ์ด์
- ์ฌ์ฉ์๋ ํด๋์ค ์์ ์ ํ์ ์์
- ํจ์๋ ์ด๋ ๊ฒ ๋์
- ์ถ์ํ
- ํจ์๋ฅผ ๋ถ๋ฆฌํ ๋ ์ ์ฉํ๋ ์์น์ ํด๋์ค์๋ ์ ์ฉํ๋ฉด ๋จ
์ถ์ํ
๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์๋์ง ์๊ฒ ๋ค.
- ์ถ์ ์๋ฃํ(Abstract data type)์ชฝ ๊ด์
- ํด๋์ค๋ฅผ โ์ฌ์ฉโํ๋ ์ฌ๋์ ๊ด์
- ์บก์ํ(๋ฐ์ดํฐ ๋ฌถ์)์ ์ข ๋ ๋ฐฉ์ ์ด ๊ฐ์๋ ๊ด์
- ์ฌ์ฉ์๋ ํด๋์ค๋ฅผ โ์๋ฃํโ์ผ๋ก ์ฌ์ฉํ ์ ์์
- ๊ทธ ์์ ๋ค์ด๊ฐ ๋ฉค๋ฒ ๋ณ์๊ฐ ์ ํํ ๋ญ์ง ๋ชฐ๋ผ๋ ๋จ
- ํด๋์ค๋ก๋ถํฐ ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ
- ์ ์ฐจ์ ๋ฐ์ดํฐ ์ถ์ํ(Procedural data abstraction)์ชฝ ๊ด์
- ํด๋์ค๋ฅผ โ์ ์โํ๋ ์ฌ๋์ ๊ด์
- ๋ฉ์๋์ ์ข ๋ ๋ฐฉ์ ์ด ๊ฐ์๋ ๊ด์
- ๋ฐ์ดํฐ๋ฅผ ์ง์ ์กฐ์ํ๋ ๋์ โ๋ฉ์๋โ๋ฅผ ํธ์ถ
- ๋์์ ๊ฐ์ฒด(behavior objects) ์ง์์ด๋ผ๊ณ ํ๊ธฐ๋ ํจ (์ ์ X)
์ถ์ํ์ ๋จ์
- ๋์์์ด ๋ฐ์ดํฐ๋ง ์๋ ํด๋์ค๋ ์ธ๋ฐ์๋ ์ฝ๋๋ง ๋์ด๋จ
- DTO(Data Transfer Object)
- ์ด๋ฐ ๊ฒฝ์ฐ ๊ทธ๋ฅ public์ ์ฐ๊ธฐ๋ ํจ..
- ์ด๋ป๊ฒ ์ถ์ํ๋ฅผ ํด์ผํ๋์ง ๋๋ ทํ โ๊ฐ๊ด์ ๊ธฐ์คโ์ด ์์
- ์ธ๊ฐ์ ๋๋ ทํ ์ค์ฒด๊ฐ ์๋ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ด๋ ค์ํจ
- ์ดํดํ๋๋ผ๋ ๊ฐ์ ๋ค๋ฅด๊ฒ ์ดํดํจ
- ๋คํ์ฑ, ์์, ์ธํฐํ์ด์ค๋ก ๊ฐ๋ฉด์ ๋ ๋ฌธ์ ๊ฐ ๋จ
๋ฉ์๋ ์ด๋ฆ ์ง๋ ๋ฐฉ๋ฒ
๋ถ๋ฌด๊ธฐ์ ๋ฌผ์ ๋ฟ๋ฆฌ๋ ํ์์ ์๊ฐํด๋ณด๋ฉด..
- ๋์์ ์ด์ ์ ๋ง์ถ๊ธฐ
- ๋น๊ธฐ๊ธฐ: pull
- ๋๋ฅด๊ธฐ: press
- ์ฉ๋์ ์ด์ ์ ๋ง์ถ๊ธฐ
- ๋ฟ๋ฆฌ๊ธฐ: spray
์ข์ ํํ๋ ฅ์ ๊ฐ์ง๋ ์ฝ๋
- ๋ฌผํ๋ฅด๋ฏ ์ฝํ๋ ๋ณ์๋ช
- ๋จ์๋ก ํ๋ฒ ์ฒดํฌํด์ฃผ์(
remainingWaterInML
) - ๋๊ฐ์ง์ ์ผ์ ํ๋ ๊ฒฝ์ฐ And๋ฅผ ์จ์ ํํํด์ฃผ์(
sprayAndGetUsedAmountWater()
)- ๋ฌผ๋ก ์ ํ๋๊ฒ ๊ฐ์ฅ ์ข๋ค.
- ๋ง์ฝ ๊ทธ๋์ผ ํ๋ค๋ฉด ํ์คํ๊ฒ ํํํ๋๊ฒ ๋ซ๋ค๋ ์๋ฏธ
- ๋งค์ง ๋๋ฒ๋ณด๋ค๋ ์์ํ ๋ณ์๋ฅผ ์ฌ์ฉํ์.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉฐ ๋ฐ์ํ๋ ์ค์๋ค
- ๋ชจ๋ ์ธ๊ณ๋ฅผ ์๋ฎฌ๋ ์ด์
ํ๋ ค๋ ์๋๋ฅผ ํ์ง ๋ง์.
- ํ์ํ ๊ฒ๋ง ๋ง๋ค์.
- ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์์ฑํ๋ ๊ฒ์ ์ธ๋ฐ์๋ ์ ์ง๋ณด์ ๋น์ฉ์ ์ฆ๊ฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ์ฝ๋๋ฅผ ์ฌ๋ฌ๋ฒ ๊ณ ์น๋ ๊ฑด ์ผ๋ฐ์ ์ด๋ค.
- ์ ์ด๋ 2, 3๋ฒ์ ๋ค์์ด์ผ ์ข์ ์ฝ๋๊ฐ ๋์จ๋ค.
- ๋น์ฐํ ๊ฒ์ด๋ผ ๋ฐ์๋ค์ฌ๋ผ.
์ข์ ํ๋ก๊ทธ๋๋ฐ ์ต๊ด
- ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ ์ญ์ ํ๋ค.
- ๊ณ ์น๋ ์ผ์ด ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ ์ ๋ฌด์ ๋ค๋ฆ์๋ค.
- ๊ทธ ๊ณผ์ ์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ ์ ์ง๋ณด์ ๋น์ฉ์ ์ฆ๊ฐ์ํจ๋ค.
- ํ์ํ ์์ ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ผ.
- ๋ฏธ๋ฆฌ ๋ง๋ค๋ ค๊ณ ํ๋ ํ๋์ ๊ฒฐ๊ตญ ๋ถํ์ํ ๋์์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
- ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ณ ์ด์ ๋ถ์ฌ๋ผ.
- ์ฒ์ ์ฝ๋๋ฅผ ์งค ๋ ๊ฐ์ ์ ๊ฑฐ์ ํ๋ฆด ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ๋ผ๋๋ฅผ ์ง๊ณ , ์ด์ ์ถํ ํ์ฅ์ด ๊ฐ๋ฅํ ๋ก ๋ง๋๋ ๊ฒ์ด ์ข๋ค.
์ ์ฐ์ฑ์ ๋ ์ผ๊ตด
์ ์ฐ์ฑ ๋์ ์ค๊ณ๊ฐ ์ต๊ณ ๋ ์๋๋ค.
- ๋๋ฌด ์ชผ๊ฐค ๊ฒฝ์ฐ ์ฌ๋ฌ ํ์ผ์ ๋๋ ๋ค์ด์ผ ํจ
- ํ๋์ ์ฝํ ์คํธ๋ก ์ ๋ ๊ฒ์ด ๋ณด๋ค ๋์ ์ํต์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ๋จผ ๋ฏธ๋ ๋๋ฌธ์ ์ง๋์น๊ฒ ์ชผ๊ฐ๋ ๊ฒ์ ์ค๋ฒ ์์ง๋์ด๋ง
- ํ๋ก๊ทธ๋๋จธ์ ๊ธฐ๋ณธ์์ธ๋ฅผ ๋จผ์ ๊ฐ์ง ๊ฒ
- ์ฝ๊ธฐ ๋ช ํํ ์ฝ๋ ์์ฑ
- ์ค์๋ฅผ ์ ์ง๋ฅด๊ธฐ ์ด๋ ค์ด ์ฝ๋ ์์ฑ
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฝ๋ ์์ฑ
- ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ๋๋ฒ๊น
- ๊ทธ ์ดํ ํ์์ ๋ฐ๋ผ ์ ์ ์ ์ฐ์ฑ์ ํค์ฐ๋ ๋ฒ์ ๋ฐฐ์ฐ๊ธฐ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์๊ณ ์์ผ๋ฉด ์ข์ ์ฌ๊ณ ๋ฐฉ์
- ๊ฐ์ฒด๋ ์์จ์ฑ์ ๊ฐ์ง๋ค.
- โ๋ถ๋ฌด๊ธฐ๋ก ํ๋ถ์ ๋ฌผ์ ์คโ:
waterSpray.addWaterTo(flowerPot)
- โ๋ถ๋ฌด๊ธฐ๋ฅผ ์คํ
๋ ํ๋ถ์ ๋๊ฐ ๋ฌผ์ ์คโ:
flowerPot.addWater(waterSpray)
- ์ ์๊ฐ ๋ณด๋ค ํ์ค์ธ๊ณ์์ ์์ฐ์ค๋ฌ์ฐ๋, ์ฝ๋ ์ธ๊ณ์์๋ ํ์๊ฐ ๋ณด๋ค ๋์ ๋ฐฉ์
- ๊ฐ์ธ์ ์๊ฐ: ์์ด์ ์ธ ์ฌ๊ณ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์ง๋ ๊ฒ์ด ๋ณด๋ค ์์ํจ
- ์ฃผ์ด๋ถํฐ ์๊ฐ
- โ๋ถ๋ฌด๊ธฐ๋ก ํ๋ถ์ ๋ฌผ์ ์คโ: