๋ด๋ถ ํด๋์ค (inner class)
- ํด๋์ค ์์ ํด๋์ค
class B๋ฅผ class A ์์ผ๋ก ๋ฃ๊ฒ ๋๋ฉด, B๋ A์ ๋ด๋ถ ํด๋์ค๊ฐ ๋๊ณ , A๋ B์ ์ธ๋ถ ํด๋์ค๊ฐ ๋๋ค.
์ด๋ ๊ฒ ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ด๋ถ ํด๋์ค์์ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ๋ค์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค.
๋ง์ฝ ๋ฐ๋ก ํด๋์ค๊ฐ ์์ ๊ฒฝ์ฐ์๋, ํด๋์ค B๊ฐ A์ ์ ๊ทผํ๋ ค๋ฉด A์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ ๊ทผํด์ผ ํ๋ค.
ํ์ง๋ง, B๊ฐ A์ ๋ด๋ถ ํด๋์ค์ผ ๋๋ ๊ฐ์ฒด ์์ฑ ์์ด๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ฆ, ์ฝ๋์ ๋ณต์ก์ฑ์ ์ค์ผ ์ ์๋ค.(์บก์ํ)
๋ด๋ถ ํด๋์ค์ ์ ํจ ๋ฒ์(scope)๋ ๋ณ์์ ๋์ผํ๋ค.
์ธ์คํด์ค ๋ณ์, ์คํํฑ ๋ณ์, ์ง์ญ ๋ณ์์ ๋์ผํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ด๋ถ ํด๋์ค์ ์ ์ด์์ ์ ๊ทผ์ฑ
๋ด๋ถ ํด๋์ค์ ์ ์ด์๋ ๋ณ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ด์์ ๋์ผํ๋ค.
์๋ ํด๋์ค ์์๋ (default)์ public๋ง ์๋ค.
ํ์ง๋ง, ๋ด๋ถ ํด๋์ค ์์๋ ๋ชจ๋ ์ ์ด์(public, protected, private, (default))๋ฅผ ์์ ๋๋ ์ ์๋ค.
์ ์์ ์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ฉด, ์คํํฑ(static) ๋ฉค๋ฒ๋ฅผ ์ ์ํ๊ธฐ ์ํด์๋ ์คํํฑ ํด๋์ค์ด์ด์ผ๋ง ํ๋ค.
ํ์ง๋ง, ์์(final)๋ ์์ธ์ ์ผ๋ก final static์ ๋ชจ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค
์ ์์ ์์ ์ค์ํ ์ ์ ์ธ์คํด์ค ๋ฉค๋ฒ๋ static๋ฉค๋ฒ์๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง,
static๋ฉค๋ฒ๋ ์ธ์คํด์ค ๋ฉค๋ฒ์๊ฒ ์ ๊ทผ์ด ์๋๋ค๋ ์ ์ด๋ค.
์ ์์ ์ ํต์ฌ์ ๋ด๋ถ ํด๋์ค์์๋ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ๊ฐ private์ด๋ผ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ์ ๊ณผ,
์ธ๋ถ ํด๋์ค์ ์ง์ญ๋ณ์๋ final์ด ๋ถ์ ๋ณ์(์์)๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค.
JDK1.8๋ถํฐ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ฐ, ์ด์ ๋ 1.8๋ถํฐ๋ ๋ณ์์ธ๋ฐ ๊ฐ์ด ์ ๋ฐ๋๋ ๊ฒ์ ์์๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, final์ ์๋ตํด๋ ๋๋ค. ์์์ ์์๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ฝ ๋ค๋ฅธ ํด๋์ค์์ ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉ์ ํ๋ ค๋ฉด ์ธ๋ถ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ด๋ถ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค.
ํ์ง๋ง, ์คํํฑ ๋ด๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ ์ธ๋ถ ํด๋์ค๋ฅผ ๋จผ์ ์์ฑํ์ง ์์๋ ๋๋ค.
์ ์์ ๋ฅผ ์ปดํ์ผํ๋ฉด ํด๋์ค๋ ์ด 5๊ฐ๊ฐ ์์ฑ์ด ๋๋ค.
์ ์์ ๋ ์ธ๋ถ ํด๋์ค, ๋ด๋ถ ํด๋์ค, ์ง์ญ ํด๋์ค์ iv ์ด๋ฆ์ด ๋๊ฐ์ ๋ ์ง์ญ ํด๋์ค์์ ๊ฐ iv๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ธ๋ถ ํด๋์ค์ iv๋ Outer3.this.value, ๋ด๋ถ ํด๋์ค์ iv๋ this.value, ์ง์ญ ํด๋์ค์ lv๋ value๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
์ ๋ฆฌ
- ๋ด๋ถ ํด๋์ค์๋ ๋ชจ๋ ์ ๊ทผ์ ์ด์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (public, protected, private, default)
- ์คํํฑ(static) ๋ฉค๋ฒ๋ฅผ ์ ์ํ๊ธฐ ์ํด์๋ ์คํํฑ ํด๋์ค์ด์ด์ผ๋ง ํ๋ค. (์์๋ ๊ฐ๋ฅ)
- ์ธ์คํด์ค ๋ฉค๋ฒ๋ static๋ฉค๋ฒ์๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง static๋ฉค๋ฒ๋ ์ธ์คํด์ค ๋ฉค๋ฒ์๊ฒ ์ ๊ทผ์ด ์๋๋ค.
- ๋ด๋ถ ํด๋์ค์์๋ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ๊ฐ private์ด๋ผ๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ์ธ๋ถ ํด๋์ค์ ์ง์ญ๋ณ์๋ final์ด ๋ถ์ ๋ณ์(์์)๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค
- ๋ค๋ฅธ ํด๋์ค์์ ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉ์ ํ๋ ค๋ฉด ์ธ๋ถ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ,
๋ด๋ถ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค.
(์คํํฑ ๋ด๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ ์ธ๋ถ ํด๋์ค๋ฅผ ๋จผ์ ์์ฑํ์ง ์์๋ ๋๋ค.)
์ต๋ช ํด๋์ค (anonymous class)
- ์ด๋ฆ์ด ์๋ ์ผํ์ฉ ํด๋์ค. ์ ์์ ์์ฑ์ ๋์์
์ต๋ช ํด๋์ค๋ฅผ ์์ฑํ๋ ๋ฌธ๋ฒ์ ์ ์ด๋ฏธ์ง์ ๊ฐ๋ค.
์ต๋ช ํด๋์ค ๋ํ ๋ด๋ถ ํด๋์ค์ฒ๋ผ ์ธ์คํด์ค, ์คํํฑ, ์ง์ญ ์ต๋ช ํด๋์ค๊ฐ ์๋ค.
์์ ์ฝ๋๋ฅผ ์ต๋ช ํด๋์ค๋ฅผ ํ์ฉํด์ ๋ค์ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ ๊ฒ ํด๋์ค์ ์ด๋ฆ์ด ์๊ณ , ์กฐ์ ํด๋์ค์ ์ด๋ฆ์ด๋, ์ธํฐํ์ด์ค์ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ์์ ์์ฑ์ ๋์์ ํ๋ค.
์ผํ์ฑ ํด๋์ค๋ก ์ต๋ช ํด๋์ค ์ ๋๊ฐ ์๋ค ์ ๋๋ง ์๊ฐ์ ํ๊ณ , ํ์ํ ์ํฉ์ด ์ฌ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ฉด ๋๋ค.