[์ดํํฐ๋ธ ์๋ฐ] ๋ฅผ ์ฝ์๋ ๊ธฐ์ต์ ๋ ์ฌ๋ ธ์ ๋ '์์๋ณด๋ค๋ ์ปดํฌ์ง์
์ ์ฌ์ฉํ๋ผ' ๋ผ๋ ์์ดํ
์ด ์๋นํ ์ธ์ ๊น์๋ค.
ํ์ง๋ง ์ปดํฌ์ง์
์ ์ฉ์ํค๋ฉด์ ๋คํ์ฑ์ ๋ง์กฑ์ํค๋ ค๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์์ผ ํ๋๋ฐ, ๋ชจ๋ ๊ตฌํํด์ผ ํ๋ฏ๋ก
์ฝ๋๊ฐ ์ฐธ ๋๋ฌ์์ง๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ฝํ๋ฆฐ์ ์ด๋ฅผ ๊ธฐ๊ฐ ๋งํ๊ฒ ํด๊ฒฐํ๋ค.
๋ค์ ์์๊ณผ ์ปดํฌ์ง์
์ ์๋ฅผ ์ดํด๋ณด๊ณ ์ด๋ฅผ ์ฝํ๋ฆฐ์ด ์ด๋ป๊ฒ ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋์ง ์ดํด ๋ณด์.
์์์ ๋ฌธ์ ์
- ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์ฌ ์๋ฐ์ ์์
- ์ํผํด๋์ค์ ์ํ, ๋ฉ์๋, ํ์ ๋ฑ ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์จ๋ค.
- ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ผ ๋ ๊ต์ฅํ ์ข์ ๋๊ตฌ
- ๊ทธ๋ ๊ธฐ์ ์ผ๋ถ๋ถ๋ง์ ์ฌ์ฉํ๊ธฐ์ ๋ถ์ ํฉํ ๋ฐฉ๋ฒ
- ์ด๋ฅผ ์ํด์ ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ค.
- ์ํผํด๋์ค์ ์ํ, ๋ฉ์๋, ํ์ ๋ฑ ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์จ๋ค.
- ์บก์ํ๋ฅผ ๊นจ๋ ์์
- ๋ด๋ถ์ ์ธ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ณ๊ฒฝ์ผ๋ก ์บก์ํ๊ฐ ๊นจ์ง๋ค.
์ปดํฌ์ง์
์ํผํด๋์ค๋ฅผ ์์ ๋ฐ๊ธฐ ๋ณด๋ค ํ์ํ ๋ถ๋ถ๋ง์ ์ทจํ๊ธฐ ์ํด,
ํ๋กํผํฐ๋ก ์ทจํ๋ฉด ๋๋ค.
์ด๋ฅผ ํ
๋ฉด,
class CounterSet<T> : HashSet<T>() {
//....
}
// ์์ ํด๋์ค์ฒ๋ผ ์ํผํด๋์ค๋ฅผ ์ง์ ์์ ๋ฐ๋ ๊ฒ์ด ์๋,
class CounterSet<T> {
private val innerSet = HashSet<T>()
// ...
}
// ์ด๋ฌํ ํํ๋ก ํ๋กํผํฐ๋ก ๊ฐ์ ธ์์ ์ ์ ํ ํ์ํ ํ์๋ง ์ฌ์ฉํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด HashSet์ ๋ชจ๋ ๊ฒ์ ๊ฐ์ ธ์ค๊ธฐ ๋ณด๋ค๋ CounterSet ๊ฐ์ฒด๊ฐ ํ์ํ ๋ถ๋ถ๋ง์ ์ปดํฌ์ง์
์ ํตํด ์ป์ innerSet ํ๋กํผํฐ๋ก ํ์ฉํ ์ ์๊ฒ ๋์๋ค.
ํ์ง๋ง,
์ปดํฌ์ง์
์ ํ์ฉํ๊ฒ ๋๋ฉด ๋คํ์ฑ์ ์ด์ ์ ํ์ฉํ์ง ๋ชปํ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
์ด๋ด ๊ฒฝ์ฐ์๋ ํฌ์๋ฉ ๋ฉ์๋๋ฅผ ํตํด ๊ทน๋ณตํ ์ ์๋ค.
class CounterSet<T> : MutableSet<T>{
private val innerSet = HashSet<T> ()
//,..
// ํ์ง๋ง MutableSet ์ธํฐํ์ด์ค์ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ฅผ innerSet์ ์ด์ฉํ์ฌ ์ค๋ฒ๋ผ์ด๋ ํด์ผ ํ๋ค.
// ๊ฐ๊ท์ฐฎ.. ์ฝ๋ ๊ฐ๋๋ฝ..
}
์ฝ๋๊ฐ ํ์ ์ด์์ผ๋ก ๊ธธ์ด์ง๋ฏ๋ก ์ฃผ์๋ง ์์ฑํ๋ค.
MutableSet์ ์ถ์ ๋ฉ์๋๊ฐ ์ผ๋ง๋ ๋ง์๋ฐ, ๊ทธ๊ฑธ ์ด๋ป๊ฒ ๋ค ๊ตฌํํ ๊น?
์ฝ๋๊ฐ ํ์ ์ด์์ผ๋ก ๋๋ฌด ๊ธธ์ด์ง๋ค. (์๊ทธ๋ง์น 9๊ฐ..)
์ฝํ๋ฆฐ์ ์ด๋ฅผ Fancy ํ๊ฒ ํด๊ฒฐํ๋ค.
๋ฐ๋ก ์์ ํจํด์ ํตํด์.
class CounterSet<T> (
private val innerSet = HashSet<T>(),
) : MutableSet<T> by innerSet {
//...
// ์ด์ ๋ by ํค์๋๋ก ์ธํด ํ๋กํผํฐ์ธ innerSet์ ์ด์ฉํด ๊ตฌํ์ ์์ํ ์ ์๋ค.
// by ํค์๋ ํ๋๋ก..!
}
์ฐธ Fancy ํ๋ค.
์ ๋ฆฌ
ํ์ง๋ง ๋คํ์ฑ๊น์ง ํ์ํ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์ ๊ฒ์ด๋ค.
์ฌ๋งํ ๊ฒฝ์ฐ๋ ์ปดํฌ์ง์
์ผ๋ก ํด๊ฒฐํ ์ผ์ด ๋ง์ ๊ฒ์ด๋ค.
์ปดํฌ์ง์
์ ํ์ฉํ๋ฉด, ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ ์ฐํ๊ฒ ํ์ฅํ ์ ์๋ค.
๊ตณ์ด ๋คํ์ฑ์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํด ์์์ ์ฌ์ฉํ ํ์ ์์ด.
์์์ ํ์ง ๋ชปํ๊ฒ ํ๋ ค๋ฉด final ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํ์ง๋ง ์์ํ๋ ค๋ ํด๋์ค์ ํน์ ๋ฉ์๋๋ค์ ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ง์ผ๋ ค๋ฉด open ํค์๋๋ฅผ ๋ถ์ด์ง ์์ผ๋ฉด ๋๋ค.
์ฝํ๋ฆฐ์ ์ฐธ ๊ฐ๋จํ๋ค. (๋ฌผ๋ก ์ด๊ฑด ์๋ฐ์ ๋น์ทํ์ง๋ง)
๋ง์ง๋ง์ผ๋ก OOP ์งํฅ ๋ฐฉ๋ฒ์ ์์๋ณด๋ค๋ ์ปดํฌ์ง์
์ฌ์ฉ์ด best๋ผ๋ ์ ์ ์ธ์งํ๋ฉด์ ๋ง๋ฌด๋ฆฌํ๋ค.