Early Binding๊ณผ Late Binding์ ์ฑ๋ฅ์์ ์ด๋ค ์ฐจ์ด๊ฐ ๋๋๊ฐ? ์ค์ ๋ก๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฐ? ์๊ฒ ๋ชจ๋ฅด๊ฒ ๋น์ฐํ๊ฒ ์ฌ์ฉํ๊ณ ์๋ ๋คํ์ ๋ฉ์๋๋ ๋ฌด์์ด ์์๊น?
์ด๋ฅธ ๋ฐ์ธ๋ฉ vs. ๋ฆ์ ๋ฐ์ธ๋ฉ - ์ฑ๋ฅ์ ์ธก๋ฉด
- ๋น์ฐํ ์ด๋ฅธ ๋ฐ์ธ๋ฉ์ด CPU ์ต์ ํ ๊ฐ๋ฅ์ฑ์ด ๋ ๋๋ค.
- ์ฆ, ๋์ ์ฑ๋ฅ์ ๊ฐ์ ธ์ฌ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ค ํจ์๋ฅผ ํธ์ถํด์ผ ํ๋์ง ์๊ณ ์๊ณ ,
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์ค์ ์ถฉ๋ถํ ์๊ฐ์ ๊ฐ์ง๊ณ ์ต์ ํ๋ฅผ ํ ์ ์๋ค.
- ์คํ์ค์๋ ์ด๋ ๊ฒ ์ถฉ๋ถํ ์๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
- ๋น๋ ์๊ฐ์ ์ค๋ ๊ฑธ๋ ค๋ ์๊ด์๋ค. ๋ค๋ง, ์คํ์์ ์ค๋๊ฑธ๋ฆฌ๋ ๊ฒ์ ์๊ธฐ๊ฐ ๋ค๋ฅด๋ค.
๋คํ์ฑ ์ง์ ์ธ์ด์์์ ์ด๋ฅธ ๋ฐ์ธ๋ฉ
- ์ผ๋จ์ ๊ฐ ์ธ์ด์ compiler์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ค.
- ๊ทธ๋์ ๊ฐ ์ธ์ด ํน์ฑ์ ๋ฐ๋ผ ๊ณต๋ถํด๋ณด์์ผ ํ๋ค.
final
ํค์๋๋ฅผ ๋ฌ๋ฉด, ์ด๋ฅธ ๋ฐ์ธ๋ฉ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
final keyword
โ๋์ด์ ์์ ํ ์ ์์ด. ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ฌ์ฉํดโ
- ์์์์ override ๋ถ๊ฐ
- ์ด๋ฅธ ๋ฐ์ธ๋ฉ์ด ๊ฐ๋ฅ
- ์ ํํ ๋ด์ฉ์ ๊ฐ ์ธ์ด์ ์คํ์ ํ์ธํ ๊ฒ. ๋ค๋ง, ์ด๋ฐ ๊ฒฝ์ฐ ๋ฐ๊พธ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ฏ๋ก ๊ทธ๋ ๊ฒ ๋์ํ ๊ฒ
- Swift์ ๊ฒฝ์ฐ์๋ โMethod Dispatchโ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํด๋ณด๋ฉด ๋์์ด ๋๋ค.
final์ ์๋ฏธ
final์ ์ด๊ธ๋๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ชจ๋ ์ปดํ์ผ ์ค๋ฅ
- ๋ณ์ ์
- ๋์ด์ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
public final int MAX_STUDENT = 10
- ํด๋์ค ์
- ๋์ด์ ์์ ๋ถ๊ฐ
- ์์ ํด๋์ค ์กด์ฌํ ์ ์์
- ์ค๋ฒ๋ผ์ด๋ฉ๋ ๋น์ฐํ ๋ถ๊ฐ
- ๋ฉ์๋ ์
- ์์ ํด๋์ค์์ ํด๋น ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ ์ ์์
- ํ๋ผ๋ฏธํฐ ์
- ์๋ ์ฝ๋์ ๊ฐ์ ์ผ์ ํ ์ ์๋ค.
- ๋ด๋ถ์์ ์ฌํ ๋น์ ๋ง๋ ๊ธฐ๋ฅ์ด๋ค.
final Best Practice
- ๋ณ์, ๋ฉ์๋, ํด๋์ค ๊ฐ๋ฅํ๋ฉด ๋ชจ๋
final
์ ๋ถ์ธ๋ค. - ๋์ค์ ์์ ๋ฐ ๋ณ๊ฒฝํด์ผํ๋ ์๊ฐ์ final์ ๋บ๋ค.
- ์์ธ
- ์์ ๋ฐ ๋ณ๊ฒฝ์ด ์ฆ์ ๊ฒ์ผ๋ก ์์๋๋ ํด๋์ค๋ ๋ฉ์๋
- ์ธ๋ถ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (์ฆ๊ฐ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ด ๊ท์ฐฎ์์ง)
- ๋ค๋ง, ์ ๊ณ์์ ์ค์ ๋ก ์ด๋ ๊ฒ๊น์ง ํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค.
Object์ ๋คํ์ ๋ฉ์๋
- ์๋ฌด์๊ฐ ์์ด ์ฌ์ฉํ๋ ๋ฉ์๋๋ค์ด ์ด๋์ ์์์๊น?
- ์ผ๋ฐํ์ ๋ํ์,
Object
์ ์๋ค. - Java์์ ์ฌ์ฉํ๋ ๋ชจ๋ Calss๋ ๋ชจ๋
Object
์์ ์์๋ฐ๋๋ค. - ๊ทธ๋ ๊ธฐ์
Object
์ ์๋ ๋ฉ์๋๋ค์ ์ด๋ค ํด๋์ค์์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์์ฃผ ์ฐ์ด๋ ๋ฉ์๋๋ค ๋ช๊ฐ๋ง ์ดํด๋ณด๋๋ก ํ์.
toString()
- ํด๋น ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ํํํด์ฃผ๋ ๋ฉ์๋
- ๊ธฐ๋ณธ๊ตฌํ:
getClass().getName() + '@' + Integer.toHexString(hashCode())
hashCode()
๋ ๋ค์์ ์์๋ณด์.
- String ๊ฒฝ์ฐ์๋ ๋ด์ฉ๋ฌผ์ ๋ณด์ฌ์ฃผ๋๊ฒ ์ข์ผ๋ ์ด๋ฐ ๊ฒฝ์ฐ ์ค๋ฒ๋ผ์ด๋ํ๋ฉด ๋๊ฒ ๋ค.
- ์ฌ์ค ๊ณต์ ๋ฌธ์์๋ ์ด ๋ฉ์๋๋ฅผ ๋ชจ๋ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉํ๋ผ๊ณ ๊ถ์ฅํ๊ธฐ๋ ํ๋ค.
๊ทผ๋ฐ ์ ์ํ๋ค..
equals()
- ๋ฌด์์ด ๊ฐ์ ๊ฒ์ด๋ผ ํ ์ ์์๊น?
- ๊ฐ๋ ์ ์ผ๋ก(๋ด์ฉ)? ๋ฌผ๋ฆฌ์ ์ผ๋ก(์ฃผ์)?, ์ด๋ ์ ๋ ์งํฉ ๊น์ด์์ ๊ฐ๋ค๊ณ ์ ์ํด์ผ ํ๋๊ฐ?
- ์ด๊ฑด ๋ง๋๋ ๋์ด ์ ์ํ ์ ๋ฐ์ ์๋ค.
- ๊ธฐ๋ณธ ๊ตฌํ: ๋จ์ํ ์ฃผ์ ๋น๊ต (
this == obj
)- ๋ฐ์ดํฐ๋ฅผ ์ผ์ผํ ๋น๊ตํ์ง ์๋๋ค.
- ์ปดํจํฐ ์ ์ฅ์์๋ ์ด ์ ์๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ ๊ฒ.
๊ฐ๋ค๋ ์๋ฏธ๋ ๋ค๋ฅผ ์ ์๋ค.
- iphone ๋๋๋ ๊ฐ์ ๊ฒ์ธ๊ฐ? ์ผ๋ จ๋ฒํธ ๊ธฐ์ค์ผ๋ก ํ๋ฉด ๋ค๋ฅธ ๊ฒ์ด ๋ ์๋ ์์ง ์์๊ฐ?
- ์ด๋ ๊ฒ ํด๋์ค๋ง๋ค ๊ฐ๋ค๋ ์๋ฏธ๋ ์ ์์๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
- ๋ฐ๋ผ์ Class ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด์ผ ํ๋ค๋ฉด ์ค๋ฒ๋ผ์ด๋ฉ์ด ํ์ํ๋ค.
- ์ด ๋,
hashCode()
๋ ๋ฐ๋์ ๊ฐ์ด ์ค๋ฒ๋ผ์ด๋ฉํด์ผ ํ๋ค.
์์
- ์ฌ์ค hashCode ๋น๊ต๊น์ง ๊ฐ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ด ๋ ์ข๋ค.
- ์๋ ์์๋ก ์ ์ด๋์๋ค.
hashCode()
- ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ํํ๋ ํด์๊ฐ์ 32๋นํธ ์ ์๋ก ๋ณํ
- ๋์น์ธ ๋ ๊ฐ์ฒด๋ ํด์๊ฐ์ด ๊ฐ๋ค.
- ๋์น๊ฐ ์๋ ๋ ๊ฐ์ฒด๋ ํด์๊ฐ์ด ๊ฐ์ ์ ์๋ค. (ํด์ ์ถฉ๋)
- ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด, ํด์๊ฐ์ ํญ์ ๊ฐ์์ผ ํ๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์
equals()
๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ค๋ฉด ์ด๋ ์๋ ์ฑ๊ฒจ์ฃผ์ด์ผ ์๋ฒฝํ ๊ฒ. - ๋ค๋ง, ๋ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ํด์๊ฐ์ด ๊ฐ์ ์ ์๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์
- ๊ธฐ๋ณธ ๊ตฌํ: ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋ฐํ
Object์ ์ด ๋ฉ์๋๊ฐ ์๋ ์ด์
- ์ฃผ ๋ชฉ์ :
HashMap
์์ ์ฌ์ฉํ๋ ค๊ณ .- Key๋ก ์ฌ์ฉ
- ๋ถ์ ํจ๊ณผ
- ๋น ๋ฅธ ๋น๊ต์ฉ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ (ํด๋์ค๊ฐ ์ ๋๋ก ๊ตฌํํ ๊ฒฝ์ฐ)
- ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ฐ์์ผ๋ก ์ฌ์ฉํ ์๋ ์์
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์
equals()
์ pair๋ก ๊ตฌํํด์ฃผ์ด์ผ ํจ
- ๋จ, ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ์์๋ง ๋น ๋ฅด๊ฒ ํ๋จ ๊ฐ๋ฅ
- ๋น ๋ฅธ ๋น๊ต์ฉ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ (ํด๋์ค๊ฐ ์ ๋๋ก ๊ตฌํํ ๊ฒฝ์ฐ)
์์
- xor ์ฐ์ฐ ์ฌ์ฉ
- ๊ทผ๋ฐ ๊ทธ๋ ๊ฒ ๋๋ฉด firstName๊ณผ lastName์ ๋ด์ฉ์ด ์ํธ๊ตํ๋์ด ๋ค์ด๊ฐ ๊ฒฝ์ฐ์ hash๊ฐ์ด ๊ฐ๊ฒ ๋์ด
- shift๋ฅผ ํตํด ํด๊ฒฐ
- ํ๋์ ์์์ผ ๋ฟ ์ณ์ ๊ฒ์ ์๋
- ์ข์ hash ํจ์๋ ๊ตฌ๊ธ์ ํ๋ฒ ๊ฒ์ํด๋ณผ ๊ฒ
equals()
์hashCode()
๊น์ง ๋ฐ์๋ ๋ฒ์ ์ด๋ค.- ์ด ๊ฒฝ์ฐ HashMap์์ ์ฌ์ฉํ๋๋ผ๋ ๋ฌธ์ ๊ฐ ์์ด ์๋ํ๋๋ก ๋์ํ๋ค.