-
์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ : static ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์๋ฏธ
-
new ์ฐ์ฐ์๋ฅผ ํตํ ๊ฐ์ฒด ์์ฑ์ ์์์ ๋ญ๋นํจ, new ๋ฅผ ์ฌ์ฉํ๋ฉด heap์์ญ์ ํญ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ๋ณด๋จ
-
๋ฐ๋ผ์, ๊ฐ์ฒด๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฑํ๊ธฐ ์ํด์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉ
-
์ฅ์
- (1) ์ด๋ฆ์ ๊ฐ์ - ๋ฉ์๋ ์ฌ๋ฌ๊ฐ ๋ง๋ค ์ ์์
- (2) ์ธ์คํด์ค ์ฌ์ฌ์ฉ - ๋ถํ์ํ๊ฒ ์ธ์คํด์ค๋ฅผ ๋ฐ๋ณตํด์ ์์ฑํ ํ์ ์์ด ์ฌ์ฌ์ฉํ ์ ์์(flyweight ํจํด)
- (3) ๋คํ์ฑ, ๊ณต๋ณ์ด ๊ฐ๋ฅํจ - ๋ฐํํ ํด๋์ค๋ฅผ ์์ ๋กญ๊ฒ ์ ํ ๊ฐ๋ฅ. ์๋ฅผ ๋ค์ด, Car car = CarFactory.getInstance("sportCar");
- (4) ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ฒด ๋ฐํ - CarFactory.getInstance("truck"), CarFactory.getInstance("sportCar"), ...
- (5) ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์์ฑํ ๋, ๋ฐํ ๊ฐ์ฒด ํด๋์ค๊ฐ ์กด์ฌํ์ง ์์๋๋จ - Future ํจํด๊ณผ ์ ์ฌ(๋น ๋ฐ์ค์ ๊ณต)
-
๋จ์
- (1) ์์ ๋ถ๊ฐ๋ฅ - ์์ฑ์๊ฐ private ์ด๊ธฐ ๋๋ฌธ
- (2) ๋ฉ์๋ ์ฐพ๊ธฐ ์ด๋ ค์ - ์ด๋ฆ์ด ์ฌ๋ฌ๊ฐ์
- ๋น๋ ํจํด : "์์ฑ์์ ๋งค๊ฐ๋ณ์๊ฐ ๋ง์ -> ์์ฑ์ ์ค๋ฒ๋ก๋ฉ ๋ง์ดํจ, ๋งค๊ฐ๋ณ์ ์์ ํผ๋" ํด๊ฒฐํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ๋น๋ ํด๋์ค๋ฅผ ์ ์ํด์ ํด๋น ํด๋์ค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ
- ์ฑ๊ธํค : ์ธ์คํด์ค ํ๋๋ง ์์ฑํ๊ณ ๊ณต์
- ๊ตฌํ ๋ฐฉ๋ฒ - (1) public static final -> (2) ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋ -> (3) ์ด๊ฑฐํ
- ๊ตณ์ด ์ด๋ ๊ฒ ๊น์ง ํ ํ์๋ ์์, ๋ฌผ๋ก ์ฑ๊ธํค๊ฐ์ ๋์์ธ ํจํด์๋ ์ ์ฉํด์ผํจ
- ์ ๋ต ํจํด, ์๊ณ ๋ฆฌ์ฆ์ ์ธ๋ถ์์ ํต์งธ๋ก ๋ฃ์ด์ค
- ์์์์ ๋์จ ๋ง์ถค๋ฒ ๊ฒ์ฌ๊ธฐ์ ๋ฌธ์ ์ ์ "์์ฃผ ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ด ๊ตฌ์ฒด์ ์ผ๋ก ์์ฑ๋์ด ์์"
- ์๋ฅผ ๋ค์ด, ์ธ์ด๋ง๋ค ๋ง์ถค๋ฒ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํด๋น ๋ถ๋ถ์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๊ฒ ๊ตฌํํด์ผํจ(์ ๋ต ํจํด)
- ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ๋ ๊ณ ๋ คํด์ผํจ
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ผ๋ ์๋ฏธ๋ ๊ณต์ ๊ฐ๋ฅํ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๋๋ ํฌํจ์
- ์ฆ, ๋ด๋ถ iv๊ฐ ๋ถ๋ณ์ด ์๋ ๊ฒฝ์ฐ, ๋ํ ๋๊ธฐํ ์ฒ๋ฆฌ๊ฐ ์๋์๋ ๊ฒฝ์ฐ๋ ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๊ณต์ ํด์ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ ํผ๋์ ์ผ๊ธฐํ ์ ์์
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ํ์ํ์ง๋ง, 100% ํ์ํด์ฃผ์ง ์์
- ์ฐธ์กฐ๊ฐ ๊ฑธ๋ ค์์ง๋ง ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์๋ ํ์ํ์ง ๋ชปํจ
- ๋ํ์ ์ผ๋ก Flyweight ํจํด์์ ๋งต์ ์ ์ฅ๋ ์์ฐ๋ ๊ฐ์ฒด ํ์ ๋ชปํจ
- ์์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๊ฐ๋ฐ์๊ฐ ์ฐธ์กฐ๋ฅผ ํด์ ํด์ผํจ
-
ํต์ฌ์ "๊ตฌ์ฒด ํด๋์ค๋ฅผ ํ์ฅํด ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ๋ฉด์ equals() ๊ท์ฝ์ ๋ง์กฑ์ํฌ ๋ฐฉ๋ฒ์ ์กด์ฌํ์ง ์๋๋ค."
-
equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์ง ์์์ผํ๋ ์ํฉ
- (1) ๊ฐ ์ธ์คํด์ค๋ ๊ณ ์ ํจ : ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐธ์กฐ ๋น๊ต๊ฐ ์ ์์
- (2) ์ธ์คํด์ค์ '๋ ผ๋ฆฌ์ ๋์น์ฑ'์ ๊ฒ์ฌํ ์ผ์ด ์์ : ๊ฐ ๋น๊ต(๋ ผ๋ฆฌ์ ๋์น์ฑ)๋ฅผ ์๋ฏธํจ
- (3) ์กฐ์์์ ์ฌ์ ์ํ equals()๊ฐ ์์์์๋ ๋ฑ ๋ค์ด๋ง๋๋ค
- ์กฐ์, ์์์ iv์ ๊ฐ์๊ฐ ๊ฐ๊ฑฐ๋ ๋ค๋ฆ
- ์์์์ iv๊ฐ ์ถ๊ฐ๋๊ณ equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์
- ๋์น๊ด๊ณ(๋น์ฌ์ฑ, ๋์นญ์ฑ, ์ถ์ด์ฑ, ์ผ๊ด์ฑ, null-์๋) ์ถฉ์กฑ ๋ชปํจ
- ์์ง์ equals()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๊ธฐ ์ํ ๊ท์น
- (1) == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ ๋ ฅ์ด ์๊ธฐ ์์ ์ธ์ง ํ์ธ
- (2) instanceof ๋ฅผ ํตํด ํ์ ํ์ธ
- (3) ๋์๋๋ 'ํต์ฌ' ํ๋๋ค์ด ๋ชจ๋ ์ผ์นํ๋์ง ํ๋์ฉ ํ์ธ
- (4) ๋์นญ์ ? ์ถ์ด์ฑ? ์ผ๊ด์ ? ์ค์ค๋ก ์๋ฌธ
- ํต์ฌ์ "equals()๋ฅผ ์ฌ์ ์ํ ํด๋์ค ๋ชจ๋ hashCode๋ฅผ ์ฌ์ ์ํด์ผํจ"
- ๊ฐ์ ๊ฐ์ฒด๋ ๊ฐ์ ํด์์ฝ๋๋ฅผ ๋ฐํํด์ผ ํ๊ธฐ ๋๋ฌธ
- ํด์์ฝ๋(hashCode) : ๋์งํธ ์ง๋ฌธ, ๋์งํธ ์ฆ๊ฑฐ์ฉ์ผ๋ก์ ๋ง์ด ์ฌ์ฉํจ, ํ์ผ์ ๊ฑด๋๋ฆฌ๋ฉด ๋์งํธ ์ง๋ฌธ์ด ๋ณ๊ฒฝ๋จ
- ํด์์ฝ๋๋ฅผ ์ป๊ธฐ ์ํด ํธ์ถํ ๋ ๋ง๋ค ํด์ ๊ฐ์ ๋งค๋ฒ ๊ณ์ฐํ ํ์ ์์
- ํ๋ฒ๋ง ๊ณ์ฐํ๊ณ ์ ์ฅ ํด๋์๋ค๊ฐ ๊ทธ ๊ฐ์ ๋ฐํ
- ํด์๊ฐ์ ๋ถ๋ณ
- hashCode() ๋ฉ์๋์ ๊ฒฝ์ฐ, ์ค๋ ๋ ์์ ์ฑ๊น์ง ๊ณ ๋ คํด์ผํจ
- ๊ธฐ๋ณธ์ ์ผ๋ก, ํด๋์ค_์ด๋ฆ@16์ง์_ํด์์ฝ๋
- ๋ชจ๋ ํ์ ํด๋์ค์์ toString์ ์ฌ์ ์, ๊ทธ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ์ฃผ์ ์ ๋ณด ๋ชจ๋ ๋ฐํ
- ๋๋ฒ๊น ์ฉ์ด
- ๊ฐ์ฒด ์ ๋ณด ํ์ ์ฉ์ด
- Cloneable ์ธํผํ ์ด์ค, clone ๊ฐ๋ฅํ ํด๋์ค ์์ ์๋ฏธ
- clone์ ์๋ณธ ๊ฐ์ฒด์ ์ํฅ x, ๋ณต์ ๋ ๊ฐ์ฒด์ ๋ถ๋ณ์์ ๋ณด์ฅํด์ผํจ
- ์ฃผ์ํ ์
- ๊น์ ๋ณต์ฌ vs ์์ ๋ณต์ฌ
- ๋๊ธฐํ ์ฒ๋ฆฌ
- ๋ณต์ฌ ์์ฑ์, ๋ณต์ฌ ํฉํฐ๋ฆฌ ํ์ฉ ํ ์ ์์
- ์ ๋งํ๋ฉด "๋ณต์ ๊ธฐ๋ฅ์ ์์ฑ์์ ํฉํฐ๋ฆฌ๋ฅผ ์ด์ฉํ๋๊ฒ ์ข์"
- ๊ธฐ๋ณธ ๋น๊ต ๊ธฐ์ค, ๊ธฐ๋ณธ ๋น๊ต ๊ธฐ์ค ์ด์ธ Comparator๋ก ๊ตฌํ
- ๋์น์ฑ + ์์ ๋น๊ต, ๊ฐ์ฒด์ ์์ ๋น๊ต
- ๋ฐ์ฌ์ฑ, ๋์นญ์ฑ, ์ถ์ด์ฑ ์ถฉ์กฑ
- <์ >๋ ์ถ์ฒํ์ง ์์, == ๊ณผ compareTo() ํ์ฉ