39. Java์ ์ก์ธ์ค ์์ ์๋ ๋ฌด์์ ๋๊น? ์ด๋ฆ์ ์ง์ ํ์ญ์์ค. ๊ทธ๊ฒ๋ค์ ๋ฌด์์ ์ํด ์ฌ์ฉ๋ฉ๋๊น?
๋๋ ์ด์ ์ ์บก์ํ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ Java ์์์ ๋ํ ์ง๋ฌธ์์ ์ก์ธ์ค ์์ ์๋ฅผ ๋ค๋ฃจ์์ต๋๋ค. ํ์ง๋ง ๊ทธ๋๋ ์๊ธฐ์์ผ ๋๋ฆฌ๊ฒ ์ต๋๋ค. Java์ ์ก์ธ์ค ํ์ ์๋ ํน์ Java ๊ตฌ์ฑ ์์์ ๋ถ์ฌ๋ ์ก์ธ์ค ์์ค์ ์ค๋ช ํ๋ ํค์๋์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ก์ธ์ค ํ์ ์๊ฐ ์กด์ฌํฉ๋๋ค.- public โ ์ด ์์ ์๋ก ํ์๋ ์์๋ ๊ณต๊ฐ์ ๋๋ค. ์ฆ, public ํ์ ์๋ก ์ ์ธ๋ ํ๋, ๋ฉ์๋, ํด๋์ค๋ ์์ฒด ํจํค์ง์ ์ธ๋ถ ํจํค์ง ๋ชจ๋์์ ๋ค๋ฅธ ํด๋์ค์ ํ์๋ฉ๋๋ค.
- protected โ ์ด ์์ ์๋ก ํ์๋ ์์๋ ๋ค๋ฅธ ํจํค์ง์ ์๋๋ผ๋ ํ์ฌ ํจํค์ง ๋๋ ํ์ ํด๋์ค์ ์์ฒด ํด๋์ค ์ด๋์์๋ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- ์ก์ธ์ค ์์ ์๊ฐ ํ์๋์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ (๋๋ ์์ ์๊ฐ ์ ํ ์์)์ด ์์์ ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค. ๋ค๋ฅธ ํจํค์ง์ ์๋ ํ์ ํด๋์ค์ ํ์๋๋ค๋ ์ ์ ์ ์ธํ๋ฉด ์ด์ ํญ๋ชฉ๊ณผ ์ ์ฌํฉ๋๋ค.
- private โ ์ด๊ฒ์ ๋ชจ๋ ์์ ์ ์ค์์ ๊ฐ์ฅ ๋น๊ณต๊ฐ์ ๋๋ค. ํ์ฌ ํด๋์ค ๋ด์ ์์์๋ง ์ก์ธ์คํ ์ ์์ต๋๋ค.
40. ์ ์ ๋ฐ ๋น์ ์ ๋ฉ์๋์ ์ฃผ์ ๊ธฐ๋ฅ์ ์ค๋ช ํ์ธ์.
์ฃผ์ ์ฐจ์ด์ ์ ์ ์ ๋ฉ์๋๊ฐ ํด๋์ค์ ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ก ์ด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ํ์๋ ์์ต๋๋ค. ์ ์ ๋ฉ์๋๋ ํด๋์ค ์ ํ์์๋ง ํธ์ถํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ณ ์์ด๋ฅผ ์ฐ๋ค๋ฌ๋ ์ ์ ๋ฉ์๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.public class CatService {
public static void petTheCat(Cat cat) {
System.out.println("Pet the cat: " + cat.getName());
}
์ด๋ฅผ ํธ์ถํ๊ธฐ ์ํด CatService ํด๋์ค ์ ์ธ์คํด์ค๊ฐ ํ์ํ์ง ์์ต๋๋ค .
Cat cat = new Cat(7, "Bobby");
CatService.petTheCat(cat);
๋์กฐ์ ์ผ๋ก, ์ผ๋ฐ์ ์ธ ๋ฉ์๋๋ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ(์ํด)๋ฉ๋๋ค. ์ด๋ฅผ ํธ์ถํ๋ ค๋ฉด ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ธ์คํด์ค(๊ฐ์ฒด)๊ฐ ์์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณ ์์ด๊ฐ ๋น์ ์ ๋ฉ์๋ meow()๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค .
class Cat {
public void meow() {
System.out.println("Meow! Meow! Meow!");
}
์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ค๋ฉด ๊ณ ์์ด์ ํน์ ์ธ์คํด์ค๊ฐ ํ์ํฉ๋๋ค.
Cat cat = new Cat(7, "Bobby");
cat.meow();
41. ์ ์ ๋ฐ ๋น์ ์ ๋ฉ์๋์ ์ ์ฉ๋๋ ์ฃผ์ ์ ํ ์ฌํญ์ ๋ฌด์์ ๋๊น?
์์ ๋งํ๋ฏ์ด ์ผ๋ฐ์ ์ธ(๋น์ ์ ) ๋ฉ์๋์ ์ฃผ์ ์ ํ ์ฌํญ์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์ธ์คํด์ค๊ฐ ํญ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ์ ๋ฉ์๋์๋ ์ด๊ฒ์ด ํ์ํ์ง ์์ต๋๋ค. ๋ํ ์ด์ ๋ฉ์๋์ ๋ํ ํ์ฌ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ฏ๋ก ์ ์ ๋ฉ์๋๋ ๊ฐ์ฒด ์์์ ๋ํ this ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.42. static ํค์๋๋ ๋ฌด์์ ์๋ฏธํ๋์? ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๊ฑฐ๋ ์ค๋ฒ๋ก๋ํ ์ ์๋์?
static ํค์๋ ๋ก ํ์๋ ์์๋ ํด๋์ค ์ธ์คํด์ค์ ์ํ์ง ์๊ณ ํด๋์ค ์์ฒด์ ์ํฉ๋๋ค. ํด๋์ค ์์ฒด๊ฐ ๋ก๋๋ ๋ ๋ก๋๋ฉ๋๋ค. ์ ์ ์์๋ ํ๋ก๊ทธ๋จ ์ ์ฒด์์ ๋์ผํ์ง๋ง ๋น์ ์ ์์๋ ํน์ ๊ฐ์ฒด์์๋ง ๋์ผํฉ๋๋ค. ๋ค์ ์์๋ ์ ์ ์ผ ์ ์์ต๋๋ค.- ํด๋์ค์ ํ๋;
- ํด๋์ค์ ์ด๊ธฐํ ๋ธ๋ก;
- ํด๋์ค์ ๋ฉ์๋;
- ํด๋์ค์ ์ค์ฒฉ ํด๋์ค(๋ฌผ๋ก ์ด๊ฒ์ ๋์ด๋ฐ๋ณต์ด๊ธฐ๋ ํฉ๋๋ค).
43. ๋ฉ์๋๊ฐ ์ ์ ์ด๋ฉด์ ๋์์ ์ถ์์ ์ผ ์ ์๋์?
๋๋ ์ด์ ๊ธฐ์ฌ์์ ์ด์ ๋ํด ์ด๋ฏธ ๋ต๋ณํ์ต๋๋ค. ๋ฉ์๋๋ ์ถ์์ด๋ฉด์ ๋์์ ์ ์ ์ผ ์ ์์ต๋๋ค. ๋ฉ์๋๊ฐ ์ถ์์ ์ธ ๊ฒฝ์ฐ ์ด๋ ํด๋น ๋ฉ์๋๊ฐ ํ์ ํด๋์ค์์ ์ฌ์ ์๋์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ์ ๋ฉ์๋๋ ํด๋์ค์ ์ํ๋ฉฐ ์ฌ์ ์๋ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ์์ ๋ง๋ค์ด๋ด๋ฉฐ, ์ปดํ์ผ๋ฌ๋ ์ด์ ๋ํด ์์์ฐจ๋ฆฌ๊ณ ํ๋ฅผ ๋ ๋๋ค. ์ด๋ฌํ ์ํฉ์ ์ฒํ๊ฒ ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ์ ํ์ฑ์ ๋ํด ์ง์งํ๊ฒ ์๊ฐํด์ผ ํฉ๋๋ค(ํํธ: ๋ถ๋ช ํ ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์์).44. ๋น์ ์ ๋ฉ์๋ ์ค๊ฐ์ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋์? ๊ทธ ๋ฐ๋? ์?
๋น์ ์ ๋ฉ์๋์์ ์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฌด๊ฒ๋ ๊ทธ๊ฒ์ ๋ฐฉํดํ์ง ์์ต๋๋ค. ์ฆ, ๊ทธ ๋ฐ๋๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ ์ ๋ฉ์๋๋ ํด๋์ค์ ํน์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ์ง ์๊ณ ๋ ๋น์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํด๋์ค์ ์ ์ ๋ฉค๋ฒ๋ this ์ฐธ์กฐ ์ ์ก์ธ์คํ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์ . ํด๋์ค์ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๋ ์ํ๋ ๋งํผ ๊ฐ์ง ์ ์์ผ๋ฉฐ ๊ฐ ๊ฐ์ฒด์๋ ์์ฒด ์ฐธ์กฐ์ธ this ์ฐธ์กฐ๊ฐ ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์ ์ผ๊น์ ? ์ด, ๊ทธ๋ ์ง ์์์. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ์ ์์๋ ํน์ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ์์ด๋ ๋น์ ์ ์์๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ๋ฉ์๋๋ ํน์ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ๋น์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์๋ ์ธ์๋ก ๋ค์ด์จ ๊ฒ:public static void petTheCat(Cat cat) {
System.out.println("Pet the cat: " + cat.getName());
}
์ฌ๊ธฐ์๋ ์ ์ petTheCat() ๋ฉ์๋ ์์ Cat ๊ฐ์ฒด ์ ์ผ๋ฐ์ ์ธ ๋น์ ์ ๋ฉ์๋์ธ getName์ ํธ์ถํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค .
45. ์ธํฐํ์ด์ค๋ ๋ฌด์์ ๋๊น? ์ต์ข ์ธํฐํ์ด์ค๊ฐ ์์ ์ ์๋์?
Java์๋ ๋ค์ค ์์์ด ์๋ค๋ ์ ์ ๊ธฐ์ตํ ๊ฒ์ ๋๋ค. ์ธํฐํ์ด์ค๋ ์ด์ ๋ํ ๋์์ ๋๋ค. ์ธํฐํ์ด์ค๋ ๋งค์ฐ ๊ฐ๋จํ ํด๋์ค์ ๊ฐ์ต๋๋ค. ๊ธฐ๋ฅ์ ์ ์ํ์ง๋ง ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์๋๋๋ค. ํด๋น ์์ ์ ์ด๋ฌํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค์ ๋งก๊ฒจ์ง๋๋ค. ์ธํฐํ์ด์ค์ ์:public interface Animal {
void speak();
}
ํด๋์ค์ ์ํ ์ธํฐํ์ด์ค ๊ตฌํ์ ์
class Cat implements Animal {
@Override
public void speak() {
System.out.println("Meow! Meow! Meow!");
}
}
์ธํฐํ์ด์ค ์ฌ์ฉ์ ๋ํด ์์์ผ ํ ์ค์ํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์ธํฐํ์ด์ค ๋ฉ์๋์๋ ํค๋๋ง ํฌํจ๋์ด์ผ ํฉ๋๋ค. ํน์ ๋ฉ์๋ ๋ณธ๋ฌธ์ด ์์ด์๋ ์ ๋ฉ๋๋ค. ์ฆ, ์ถ์์ ์ด์ด์ผ ํฉ๋๋ค( abstract ํค์๋ ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ ). ์์ธ๊ฐ ์์ต๋๋ค: ๋ฉ์๋ ๋ณธ๋ฌธ์ด ํ์ํ ์ ์ ๋ฉ์๋์ ๊ธฐ๋ณธ ๋ฉ์๋์ ๋๋ค.
-
ํด๋์ค๋ ๋ง์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์์ ๋งํ๋ฏ์ด ์ธํฐํ์ด์ค๋ ๋ค์ค ์์์ ๋์์ ๋๋ค. ์ธํฐํ์ด์ค ์ด๋ฆ์ ๋ฉ์๋ ํค๋์์ ์ผํ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. Lion ํด๋์ค๋ Animal, Wild ๋ฅผ ๊ตฌํํฉ๋๋ค .
-
์ธํฐํ์ด์ค๋ ์ธํฐํ์ด์ค ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ฉ๋๋ค .
-
ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ Implements ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
ํน์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์์ ์ ์ถ์์ผ๋ก ์ ์ธํด์ผ ํฉ๋๋ค.
-
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ฃผ์ ๋ชฉ์ ์ ๋คํ์ฑ์ ๊ตฌํํ๋ ๊ฒ์ ๋๋ค(๊ฐ์ฒด์ ๋ค์ํ ํ์์ ์ทจํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ).
-
์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋์ ๋ํ ์ก์ธ์ค ํ์ ์๋ ์ธํฐํ์ด์ค์ ํ์๋์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก public ์ด๋ฉฐ public ์ด์ธ์ ํ์ ์๋ ์ง์ ํ ์ ์์ต๋๋ค . Java 9๋ถํฐ ๋ฉ์๋์ ๊ฐ์ธ ์์ ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
๊ธฐ๋ณธ์ ์ผ๋ก ์ธํฐํ์ด์ค ๋ณ์๋ static final ์ ๋๋ค . ์ฆ, ์์์ ๋๋ค. ํญ์ ์ธํฐํ์ด์ค์์ ์ง์ ์ด๊ธฐํํด์ผ ํฉ๋๋ค.
-
์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
46. โโ์ ์ ํ๋๋ ์ด๋์์ ์ด๊ธฐํํ ์ ์๋์?
์ ์ ํ๋๋ฅผ ์ด๊ธฐํํ ์ ์์ต๋๋ค.- ์ ์ธ ์ฆ์ ๋ฑํธ( = )๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ ์ ์ด๊ธฐํ ๋ธ๋ก์์;
- ๋น์ ์ ์ด๊ธฐํ ๋ธ๋ก์์(๊ทธ๋ฌ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ง๋ค ์ด ์ด๊ธฐํ ๋ธ๋ก์ด ์คํ๋ ๋ ์ ์ ํ๋๊ฐ ๋ฎ์ด์ฐ์ฌ์ง๋ค๋ ์ ์ ์ดํดํด์ผ ํฉ๋๋ค.
- ํด๋์ค ์์ฑ์์์. ์์ฑ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค(์ฆ, ์ด ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ง๋ค) ํ๋๋ฅผ ๋ฎ์ด์๋๋ค.
- ์ ์ ๋ฉ์๋์์;
- ๋น์ ์ ๋ฉ์๋์์;
- ์ค์ฒฉ๋ ์ ์ ๋ฐ ๋น์ ์ , ๋ก์ปฌ ๋ฐ ์ต๋ช ํด๋์ค์ ์์ต๋๋ค.
47. ์ต๋ช ํด๋์ค๋ ๋ฌด์์ ๋๊น?
์ต๋ช ํด๋์ค๋ ์์ฒด ์ ํ์ด ์๋ ํด๋์ค์ ๋๋ค. ๋ด๊ฐ ๋ฌด์จ ๋ง์ํ๋๊ฑฐ์ผ? ์ธํฐํ์ด์ค์ ๋ํด ์ด์ผ๊ธฐํ ๋ ๊ฐ์ฒด์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค๊ณ ์ธ๊ธํ์ต๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค์ ์ธ์คํด์ค๋ง ์์ฑํ ์ ์์ต๋๋ค. ์ผ๋ถ ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ํ์ง ์์ง๋ง ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๊ฐ์ฒด์ ์ ์ผํ ์ฉ๋์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ํ ๊ตฌํ ํด๋์ค๋ฅผ ๋ง๋ค ํ์๋ ์์ต๋๋ค. ์ด๋ป๊ฒ ํ์๊ฒ ์ต๋๊น? ์ข์์! ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ! Animal ์ธํฐํ์ด์ค ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค .public final interface Animal {
public void speak();
}
์ฃผ์ด์ง ์ธํฐํ์ด์ค๋ฅผ ์ธ์คํด์คํํ๊ธฐ ์ํด ์ต๋ช
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ:
Animal cat = new Animal() {
@Override
public void speak() {
System.out.println("Meow! Meow! Meow!");
}
};
๊ทธ๋ฐ ๋ค์ ์ด ๊ฐ์ฒด์ ๊ตฌํ๋ talk() ๋ฉ์๋๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฆ, ์ต๋ช
ํด๋์ค๋ ์ง๊ธ ๋ฐ๋ก ์ฌ๊ธฐ์์ ์ธํฐํ์ด์ค์ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ตฌํ๋์ง ์์/์ถ์ ๋ฉ์๋๊ฐ ์์ผ๋ฏ๋ก ์ธํฐํ์ด์ค/์ถ์ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์์ ์ธ๊ธํ๋ฏ์ด ์ต๋ช
ํด๋์ค๋ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์ถ์ ํด๋์ค์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๋ฐ์๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฒด๊ฐ ํ ๋ฒ ์ฌ์ฉ๋๊ฑฐ๋ ์ง์ ๋ ๋ฉ์๋ ๊ตฌํ์ด ํ ๋ฒ๋ง ํ์ํ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. ํ์ํ ์ถ์ ํด๋์ค/์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ณ๋์ ํด๋์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ต๋ช
ํด๋์ค๋ ์ง์ฅ์์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์์น์ ์ผ๋ก ์ผ๋ฐ ์์
์ด ์ฌ์ ํ ์ ํธ๋ฉ๋๋ค. ์ด ๊ธฐ์ฌ์์
์ต๋ช
ํด๋์ค์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค .
48. ๊ธฐ๋ณธ ํด๋์ค๋ ๋ฌด์์ ๋๊น?
Java์๋ ๊ธฐ๋ณธ ํด๋์ค์ ๊ฐ์ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์คํด์ ์์ง๊ฐ ์๋ ์ง๋ฌธ, ์๋ง๋ ์์์ ์ง๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์ ์ดํด๋ณธ ์์ ์ ํ์ ๊ฐ๋ ๋ง ์์ต๋๋ค. Java์๋ byte , short , int , long , float , double , char , boolean ์ 8๊ฐ์ง ๊ธฐ๋ณธ ์ ํ์ด ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์ธ์ .49. ๋ํผ ํด๋์ค๋ ๋ฌด์์ ๋๊น?
Java์์ ๊ธฐ๋ณธ ์ ํ์ ์ฌ์ฉํ ๋์ ์ฃผ์ ๋ฌธ์ ์ ์ ํด๋น ์ ํ์ด ํด๋์ค๊ฐ ์๋๋ฉฐ Java๊ฐ OOP ์ธ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์ฆ, ์ด ์ธ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด ๊ฐ์ ์ํธ ์์ฉ์ ํด๋นํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ ๊ฐ์ฒด๊ฐ ์๋๋๋ค. ์ฌ๊ธฐ์๋ ๋ฉ์๋๊ฐ ์์ผ๋ฉฐ ์ฌ์ง์ด Object ํด๋์ค์ ํ์ค ๋ฉ์๋๋ ์์ต๋๋ค. ํ์ง๋ง Map ์์ ๊ธฐ๋ณธ ์์๋ฅผ ํค๋ก ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น์ ? ๊ทธ๋ฐ ๋ค์ hashCode() ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค . ๊ฑฐ๊ธฐ์์ equals() ๋ฉ์๋๋ฅผ ํธ์ถํ ์๋ ์์ต๋๋ค . ๊ทธ๋ผ ์ด์ฉ์ง? ๊ธฐ๋ณธ์ด ์๋ ์์ ์ด ํ์ํ ์๊ฐ์ด ๋ง์ด ์์ต๋๋ค. ์ด๋ OOP์ ๊ฐ๋ ์์ฒด๋ฅผ ์๋ฐํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์์ ๊ธฐ๋ณธ ์์๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๋ฐ๋์งํ์ง ์์ ์์๋ก ๋ง๋ญ๋๋ค. ํ์ง๋ง ์ํฉ์ ์๊ฐ๋ณด๋ค ๋์์ง ์์ต๋๋ค. ๊ฒฐ๊ตญ Java์๋ ์์ ๋ํผ(Primitive Wrapper)๋ผ๋ ๊ฐ๋ ์ด ์์ต๋๋ค. Java์์๋ ๋ชจ๋ ๊ธฐ๋ณธ ์ ํ์ ๋ํผ ํด๋์ค๋ผ๋ ์์ด ์์ต๋๋ค.- ๋ฐ์ดํธ -> Byte.class
- ์งง์ -> Short.class
- int -> Integer.class
- ๊ธด -> Long.class
- ํ๋กํธ -> Float.class
- ๋๋ธ -> Double.class
- ๋ฌธ์ -> Character.class
- ๋ถ์ธ -> ๋ถ์ธ.ํด๋์ค
50. ์ค์ฒฉ ํด๋์ค๋ ๋ฌด์์ ๋๊น? ์ด๋์ ์ฌ์ฉ๋๋์?
์ค์ฒฉ ํด๋์ค๋ ๊ทธ ์์ฒด๊ฐ ๋ค๋ฅธ ํด๋์ค์ ๋ฉค๋ฒ์ธ ํด๋์ค์ ๋๋ค. Java์๋ ์ด๋ฌํ ์ค์ฒฉ ํด๋์ค๊ฐ 4๊ฐ์ง ์์ต๋๋ค. 1. ๋ด๋ถ ํด๋์ค ์ด๋ฌํ ์ข ๋ฅ์ ํด๋์ค๋ ๋ค๋ฅธ ํด๋์ค์ ๋ณธ๋ฌธ์์ ์ง์ ์ ์ธ๋ฉ๋๋ค. ๋ด๋ถ ํด๋์ค๋ ๋น์ ์ ์ค์ฒฉ ํด๋์ค์ด๋ฉฐ ์ธ๋ถ ํด๋์ค์ ๋ชจ๋ ์ ์ฉ ํ๋ ๋๋ ์ธ์คํด์ค ๋ฉ์๋์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ฃฉ๋ง์ด๋ผ๋ ๋๋ฌผ์ด ์๋ ๋๋ฌผ์์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.public class Zoo {
class Zebra {
public void eat(String food) {
System.out.println("Zebra eats " + food);
}
}
}
๋ณต์กํ์ง ์์ฃ ? ๋ด๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Zoo.Zebra zebra = new Zoo().new Zebra();
zebra.eat("apple");
์ด๋ฏธ ๋ณธ ๊ฒ์ฒ๋ผ, ๋จผ์ ์ธํด๋ก์ง ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ญ๋๋ค. ๋ํ ๋ด๋ถ ํด๋์ค(๋น์ ์ ์ค์ฒฉ ํด๋์ค)๋ ์ ์ ๋ฉ์๋๋ ์ ์ ํ๋๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ์ ์ ์ง์ ํ๊ณ ์ถ์ต๋๋ค . ์ด๋ ๋ด๋ถ ํด๋์ค๊ฐ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์ ์์์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ผ๋ฏ๋ก ์์ฒด์ ์ผ๋ก ์ ์ ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. 2. ์ ์ ์ค์ฒฉ ํด๋์ค ์ด ํด๋์ค๋ ์ด์ ๋ฒ์ฃผ์ ์ ์ฌํ์ง๋ง ํด๋์ค ์ ์ธ์ static ์ก์ธ์ค ์์ ์๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์ข
๋ฅ์ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๋น์ ์ ํ๋์ ์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก ๋ด๋ถ ํด๋์ค๋ณด๋ค๋ ์ธ๋ถ ํด๋์ค์ ์ ์ ๋ถ๋ถ์ฒ๋ผ ๋ณด์
๋๋ค. ํ์ง๋ง ์ด ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๋ชจ๋ ์ ์ ๋ฉค๋ฒ, ์ฌ์ง์ด ๋น๊ณต๊ฐ ๋ฉค๋ฒ์๋ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ ์ ์ค์ฒฉ ํด๋์ค์ ์:
public class Zoo {
static class Zebra {
public void eat(String food) {
System.out.println("Zebra eats " + food);
}
}
}
์ด์ ๊ณผ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์์ฑ๋์์ต๋๋ค.
Zoo.Zebra zebra = new Zoo.Zebra();
zebra.eat("apple");
์ฌ๊ธฐ์๋ ์ ์ ์ค์ฒฉ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ธ๋ถ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์ธ๋ถ ํด๋์ค ๋ด์์ ์ด๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ์ค์ฒฉ ํด๋์ค์ ์ด๋ฆ๋ง ์๋ฉด ๋ฉ๋๋ค. 3. ๋ก์ปฌ ํด๋์ค ๋ก์ปฌ ํด๋์ค๋ ๋ฉ์๋ ๋ณธ๋ฌธ ๋ด๋ถ์ ์ ์ธ๋ ํด๋์ค์
๋๋ค. ๋ก์ปฌ ํด๋์ค์ ๊ฐ์ฒด๋ ๋ฐ๊นฅ์ชฝ ๋ฉ์๋ ๋ด์์๋ง ์์ฑํ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์:
public class Zoo {
public void feed(String animal, String food) {
switch(animal) {
case "zebra":
class Zebra {
public void eat(String food) {
System.out.println("Zebra eats " + food);
}
}
Zebra zebra = new Zebra();
zebra.eat(food);
...
์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Zoo zoo = new Zoo();
zoo.feed("zebra", "apple");
Feed() ๋ฉ์๋ ์ ๋ํ ์ฝ๋๋ฅผ ๋ณด์ง ๋ชปํ๋ค ๋ฉด ๋ก์ปฌ ํด๋์ค๊ฐ ์กด์ฌํ๋ค๊ณ ์์ฌ์กฐ์ฐจ ํ์ง ์์์ ๊ฒ์
๋๋ค. ๊ทธ๋ ์ง ์์ต๋๊น? ๋ก์ปฌ ํด๋์ค๋ static ๋๋ temporary ๊ฐ ๋ ์ ์์ง๋ง abstract ๋๋ final ๋ก ํ์๋ ์ ์์ต๋๋ค (์ด ๋ ์์ ์๋ฅผ ๋์์ ์ฌ์ฉํ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ๋ฏ๋ก ๋ ๋ค๋ ์๋๊ณ ๋ ๋ค๋ ์๋). 4. ์ต๋ช
ํด๋์ค ์์์ ์ด๋ฏธ ์ต๋ช
ํด๋์ค์ ๋ํด ์ด์ผ๊ธฐํ์ผ๋ฉฐ ๊ธฐ์ตํ๊ฒ ์ง๋ง ์ต๋ช
ํด๋์ค๋ ์ธํฐํ์ด์ค์ ํด๋์ค๋ผ๋ ๋ ๊ฐ์ง ์์ค์์ ์์ฑ๋ ์ ์์ต๋๋ค. ์ฌ์ฉ ์ด์ ์ค์ฒฉ๋ ์ ์ ๋ฐ ๋น์ ์ ํด๋์ค๊ฐ ์ฌ์ฉ๋๋ ์ด์ ๋ ๋๋ก๋ ๋ ์ผ๋ฐ์ ์ธ ํด๋์ค์ ์์ ํด๋์ค๋ฅผ ํฌํจํ๊ณ ํจ๊ป ์ ์งํ์ฌ ๋ ๋์ ์์ง๋ ฅ๊ณผ ๊ณตํต ๋ชฉ์ ์ ๊ฐ๋ ๊ฒ์ด ๋ ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ฒฉ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ์บก์ํ๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ํด๋์ค๊ฐ ๋จ์ผ ๋ฉ์๋ ๋ด์์๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๋ก์ปฌ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์ ์ฝ๋๋ฅผ ๋ถ์ฐ์์ผ์ผ ํฉ๋๊น? ์๋์. ๋ด ๊ฒฝํ์ ๋ก์ปฌ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ ๋ณธ ์ ์ด ์๋ค๊ณ ๋ง๋ถ์ด๊ฒ ์ต๋๋ค. ์๋ํ๋ฉด ๋ก์ปฌ ํด๋์ค๊ฐ ํ์ํ์ง ์ฌ๋ถ๋ ๋งค์ฐ ๋
ผ๋์ ์ฌ์ง๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ธํฐํ์ด์ค ๋๋ ์ถ์ ํด๋์ค์ ํน์ ๊ตฌํ์ด ํ ๋ฒ๋ง ํ์ํ ๊ฒฝ์ฐ ์ต๋ช
ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๊ตฌํ์ด ํฌํจ๋ ๋ณ๋์ ๋ณธ๊ฒฉ์ ์ธ ํด๋์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. ๋์ , ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๋จ์ํ๊ฒ ์ ์งํ๊ณ ์ต๋ช
ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ค์ ์์ด๋ฒ๋ ธ์ต๋๋ค(๋ฌผ๋ก ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์ด๋ฅผ ์์ง ์์์ต๋๋ค). ์ฌ๊ธฐ์ ์๋ ๊ธฐ์ฌ๋ฅผ ํตํด ์ค์ฒฉ ํด๋์ค์ ๋ํ ์ดํด๊ฐ ํฅ์๋ ๊ฒ์
๋๋ค.
51. ํด๋์ค๋ ์ด๋ค ์ ๊ทผ ์์ ์๋ฅผ ๊ฐ์ง ์ ์๋์?
๋ค์ํ ์ ํ์ ํด๋์ค๊ฐ ์์ผ๋ฉฐ ๋ค์ํ ์ก์ธ์ค ํ์ ์๊ฐ ์ ์ฉ๋ฉ๋๋ค.- ์ธ๋ถ ํด๋์ค์๋ ๊ณต์ฉ ์ก์ธ์ค ์์ ์๊ฐ ์๊ฑฐ๋ ์์ ์๊ฐ ์ ํ ์์ ์ ์์ต๋๋ค (๊ธฐ๋ณธ ์์ ์).
- ๋ด๋ถ ํด๋์ค (๋น์ ์ ์ค์ฒฉ ํด๋์ค)๋ 4๊ฐ์ ์ก์ธ์ค ํ์ ์ ์ค ํ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์ค์ฒฉ๋ ์ ์ ํด๋์ค๋ protected๋ฅผ ์ ์ธํ ์ก์ธ์ค ํ์ ์ ์ค ํ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค . ์๋ํ๋ฉด ์ด ์์ ์๋ ํด๋์ค์ ๋ชจ๋ ์ ์ ๋ฉค๋ฒ์ ๋ชจ์๋๋ ์์์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์ ๋๋ค(์ ์ ๋ฉค๋ฒ๋ ์์๋์ง ์์).
- ๋ก์ปฌ ํด๋์ค๋ ๊ธฐ๋ณธ ์์ ์๋ง ๊ฐ์ง ์ ์์ต๋๋ค(์ฆ, ์์ ์๊ฐ ์ ํ ์์).
- ์ต๋ช ํด๋์ค ์๋ ํด๋์ค ์ ์ธ์ด ์์ผ๋ฏ๋ก ์ก์ธ์ค ํ์ ์๊ฐ ์ ํ ์์ต๋๋ค.
GO TO FULL VERSION