๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study

์์ธ์ ์์ธ ํด๋์ค JVM ์คํ์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋, ์ฐ๋ฆฌ๋ ์๋ฌ๋ฅผ ๋ง์ฃผํ๊ฒ ๋๋ค. ์๋ฐ์์๋ ์๋ฌ ์ด์ธ์ ์์ธ(exception)๋ผ๊ณ ๋ถ๋ฅด๋ ์ค๋ฅ๊ฐ ์๋๋ฐ, ์์ธ๋ ์ฌ์ฉ์์ ์๋ชป๋ ์กฐ์ ๋๋ ๊ฐ๋ฐ์์ ์๋ชป๋ ์ฝ๋ฉ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ํ๋ก๊ทธ๋จ ์ค๋ฅ๋ฅผ ๋งํ๋ค. ์์ธ๊ฐ ๋ฐ์๋๋ฉด ํ๋ก๊ทธ๋จ์ ๊ณง๋ฐ๋ก ์ข ๋ฃํ์ง๋ง, ์์ธ ์ฒ๋ฆฌ(Exception Handling)์ ํตํด ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ์ง ์๊ณ ์ ์ ์คํ ์ํ๊ฐ ์ ์ง๋๋๋ก ํ ์ ์๋ค. ์์ธ๋ ๋ ๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค. ํ๋๋ ์ผ๋ฐ ์์ธ(Exception)์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ์คํ ์์ธ(Runtime Exception)์ด๋ค. ์ผ๋ฐ ์์ธ๋ ์ปดํ์ผ๋ฌ ์ฒดํฌ ์์ธ๋ผ๊ณ ๋ ํ๋๋ฐ, ์๋ฐ ์์ค๋ฅผ ์ปดํ์ผ ํ๋ ๊ณผ์ ์์ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ํ์ํ์ง ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ์์ธ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ..

์ต๋ช ๊ฐ์ฒด ์ต๋ช (anonymous) ๊ฐ์ฒด๋ ์ด๋ฆ์ด ์๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค. ์ต๋ช ๊ฐ์ฒด๋ ๋จ๋ ์ผ๋ก ์์ฑํ ์ ์๊ณ ํด๋์ค๋ฅผ ์์ํ๊ฑฐ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ๋ง ์์ฑํ ์ ์๋ค. ์ต๋ช ๊ฐ์ฒด๋ ํ๋์ ์ด๊ธฐ๊ฐ์ด๋ ๋ก์ปฌ ๋ณ์์ ์ด๊ธฐ๊ฐ, ๋งค๊ฐ ๋ณ์์ ๋งค๊ฐ๊ฐ์ผ๋ก ์ฃผ๋ก ๋์ ๋๋ค. UI ์ด๋ฒคํธ ์ฒ๋ฆฌ ๊ฐ์ฒด๋ ์ค๋ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐํธํ๊ฒ ์์ฑํ ๋ชฉ์ ์ผ๋ก ์ต๋ช ๊ฐ์ฒด๊ฐ ๋ง์ด ํ์ฉ๋๋ค. ์ต๋ช ์์ ๊ฐ์ฒด ์์ฑ ๋ถ๋ชจ ํ์ ์ผ๋ก ํ๋๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ์์ ๊ฐ์ฒด๋ฅผ ์ด๊ฐ๊ฐ์ผ๋ก ๋์ ํ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์. ์ฐ์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์ํด์ ์์ ํด๋์ค๋ฅผ ์ ์ธํ๊ณ , new ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ, ํ๋๋ ๋ก์ปฌ ๋ณ์์ ๋์ ํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด๋ค. class Child extends Parent { } // ์์ ํด๋์ค ์ ์ธ class A { P..

์ค์ฒฉ ํด๋์ค ์ค์ฒฉ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๋ณต์ก์ฑ์ ์ค์ผ ์ ์๋ค! ์ค์ฒฉ ํด๋์ค๋ ํด๋์ค ๋ด๋ถ์ ์ ์ธ๋๋ ์์น์ ๋ฐ๋ผ์ ๋ ๊ฐ์ง๋ก ๋ถ๋ฅ๋๋ค. ํด๋์ค์ ๋ฉค๋ฒ๋ก์ ์ ์ธ๋๋ ์ค์ฒฉ ํด๋์ค๋ฅผ ๋ฉค๋ฒ ํด๋์ค๋ผ๊ณ ํ๊ณ , ๋ฉ์๋ ๋ด๋ถ์์ ์ ์ธ๋๋ ์ค์ฒฉ ํด๋์ค๋ฅผ ๋ก์ปฌ ํด๋์ค๋ผ๊ณ ํ๋ค. ๋ฉค๋ฒ ํด๋์ค๋ ๊ฐ์ฒด๊ฐ ์ฌ์ฉ ์ค์ผ๋๋ ์ธ์ ๋ ์ง ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง, ๋ก์ปฌ ํด๋์ค๋ ๋ฉ์๋ ์คํ ์์๋ง ์ฌ์ฉ๋๊ณ , ๋ฉ์๋๊ฐ ์คํ ์ข ๋ฃ๋๋ฉด ์์ด์ง๋ค. public class A { class B {...} // ์ธ์คํด์ค ๋ฉค๋ฒ ํด๋์ค static class C {...} // ์ ์ ๋ฉค๋ฒ ํด๋์ค void method() { class D {...} } // ๋ก์ปฌ ํด๋์ค } ๋ฉค๋ฒ ํด๋์ค๋ ํ๋์ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ์ปดํ์ผํ๋ฉด ๋ฐ์ดํธ ์ฝ๋ ํ์ผ(.clas..

์ธํฐํ์ด์ค ์์ ์ธํฐํ์ด์ค๋ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ์์ํ ์ ์๋ค. ์ธํฐํ์ด์ค๋ ํด๋์ค์๋ ๋ฌ๋ฆฌ ๋ค์ค ์์์ ํ์ฉํ๋ค. ๋ค์๊ณผ ๊ฐ์ด extends ํค์๋ ๋ค์ ์์ํ ์ธํฐํ์ด์ค๋์ ๋์ดํ ์ ์๋ค. public interface ํ์์ธํฐํ์ด์ค extends ์์์ธํฐํ์ด์ค1, ์์์ธํฐํ์ด์ค2 {...} ํ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ํ์ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ๋ฟ๋ง ์๋๋ผ ์์ ์ธํฐํ์ด์ค์ ๋ชจ๋ ์ถ์ ๋ฉ์๋์ ๋ํ ์ค์ฒด ๋ฉ์๋๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ตฌํ ํด๋์ค๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋์ ๋ค์๊ณผ ๊ฐ์ด ํ์ ๋ฐ ์์ ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ๋ณํ์ด ๊ฐ๋ฅํ๋ค. ํ์์ธํฐํ์ด์ค ๋ณ์ = new ๊ตฌํํด๋์ค(...); ์์์ธํฐํ์ด์ค1 ๋ณ์ = new ๊ตฌํํด๋์ค(...); ์์์ธํฐํ์ด์ค2 ๋ณ์ = new ๊ตฌํํด๋..

์ธํฐํ์ด์ค์ ์ญํ ์ธํฐํ์ด์ค๋ ๊ฐ์ฒด์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ์ํ ํ์ ์ด๋ค. ๊ฐ๋ฐ ์ฝ๋๊ฐ ์ค๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋๋ ์ด์ ๋, ๊ฐ๋ฐ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ , ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๊ธฐ ์ํด์์ด๋ค. ์ธํฐํ์ด์ค๋ ํ๋์ ๊ฐ์ฒด๊ฐ ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ฒด๋ค๊ณผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ์คํ ๋ด์ฉ๊ณผ ๋ฆฌํด๊ฐ์ด ๋ค๋ฅผ ์ ์๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ ์ฝ๋ ์ธก๋ฉด์์ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์คํ ๋ด์ฉ๊ณผ ๋ฆฌํด๊ฐ์ ๋ค์ํํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ์ธํฐํ์ด์ค ์ ์ธ ์ธํฐํ์ด์ค๋ "~.java" ํํ์ ์์ค ํ์ผ๋ก ์์ฑ๋๊ณ ์ปดํ์ผ๋ฌ(javac.exe)๋ฅผ ํตํด "~.class" ํํ๋ก ์ปดํ์ผ๋๊ธฐ ๋๋ฌธ์ ๋ฌผ๋ฆฌ์ ํํ๋ ํด๋์ค์ ๋์ผํ๋ค. public interface InterfaceName { ... } ์ธํฐํ์ด์ค๋ ์์์ ๋ฉ์๋๋ง์..

ํ์ ๋ณํ๊ณผ ๋คํ์ฑ (Polymorphism) ๋คํ์ฑ์ ๊ฐ์ ํ์ ์ด์ง๋ง ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ค์ํ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ์ ์๋ ์ฑ์ง์ ๋งํ๋ค. ์๋ ํ์ ๋ณํ(Promotion) ์๋ ํ์ ๋ณํ์ ๊ฐ๋ ์ ์์์ ๋ถ๋ชจ์ ํน์ง๊ณผ ๊ธฐ๋ฅ์ ์์๋ฐ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์ ๋์ผํ๊ฒ ์ทจ๊ธ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค. // Vehicle ์๋ ํ์ ๋ณํ์ด ๋ฐ์ํ๋ค! ์ฆ, ๋งค๊ฐ ๋ณ์์ ํ์ ์ด ํด๋์ค์ผ ๊ฒฝ์ฐ, ํด๋น ํด๋์ค์ ๊ฐ์ฒด๋ฟ๋ง ์๋๋ผ ์์ ๊ฐ์ฒด๊น์ง๋ ๋งค๊ฐ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค! ๋งค๊ฐ๊ฐ์ผ๋ก ์ด๋ค ์์ ๊ฐ์ฒด๊ฐ ์ ๊ณต๋๋๋์ ๋ฐ๋ผ ๋ฉ์๋์ ์คํ ๊ฒฐ๊ณผ๋ ๋ค์ํด์ง ์ ์๋ค(๋งค๊ฐ ๋ณ์์ ๋คํ์ฑ). ์์ ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)ํ๋ค๋ฉด ๋ฉ์๋ ๋ด๋ถ์์ ์ค๋ฒ๋ผ์ด๋ฉ๋ ๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก์จ ๋ฉ์๋์ ์คํ ๊ฒฐ๊ณผ๋ ๋ค์ํด์ง๋ค. ๊ฐ์ ํ์ ๋ณํ ๊ฐ์ ..

์ด๋ ธํ ์ด์ ์ด๋ ธํ ์ด์ ์ ๋ฉํ๋ฐ์ดํฐ๋ผ๊ณ ๋ณผ์ ์๋ค. @AnnotationName ์ด๋ ธํ ์ด์ ์ ๋ค์ ์ธ ๊ฐ์ง ์ฉ๋๋ก ์ฌ์ฉ๋๋ค. 1. ์ปดํ์ผ๋ฌ์๊ฒ ์ฝ๋ ๋ฌธ๋ฒ ์๋ฌ๋ฅผ ์ฒดํฌํ๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณต 2. ์ํํธ์จ์ด ๊ฐ๋ฐ ํด์ด ๋น๋๋ ๋ฐฐ์น ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณต 3. ์คํ ์(๋ฐํ์ ์) ํน์ ๊ธฐ๋ฅ์ ์คํํ๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณต ๋ํ์ ์ผ๋ก๋ @Override๊ฐ ์๋ค. (์์ ๋ฉ์๋ ์ฌ์ ์ ์) ์ด๋ ธํ ์ด์ ํ์ ์ ์์ ์ ์ฉ ์ด๋ ธํ ์ด์ ํ์ ์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค. ๋ค์๊ณผ ๊ฐ์ด @interface๋ฅผ ์ฌ์ฉํด์ ์ด๋ ธํ ์ด์ ์ ์ ์ํ๋ฉฐ, ๊ทธ ๋ค์ ์ฌ์ฉํ ์ด๋ ธํ ์ด์ ์ด๋ฆ์ด ์จ๋ค. public @interface AnnotationName { ํ์ elementName() [default ๊ฐ]..

ํจํค์ง ์๋ฐ์์๋ ํด๋์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ค. ํจํค์ง์ ๋ฌผ๋ฆฌ์ ์ธ ํํ๋ ํ์ผ ์์คํ ์ ํด๋์ด๋ค. ํจํค์ง๋ ๋จ์ํ ํ์ผ ์์คํ ์ ํด๋ ๊ธฐ๋ฅ๋ง ํ๋ ๊ฒ์ด ์๋๋ผ ํด๋์ค์ ์ผ๋ถ๋ถ์ด๋ค. ํจํค์ง๋ ํด๋์ค๋ฅผ ์ ์ผํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์๋ณ์ ์ญํ ์ ํ๋ค. ํจํค์ง๋ ํด๋์ค๋ฅผ ์ ์ผํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์๋ณ์ ์ญํ ์ ํ๋ค. ํด๋์ค ์ด๋ฆ์ด ๋์ผํ๋๋ผ๋ ํจํค์ง๊ฐ ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ํด๋์ค๋ก ์ธ์ํ๋ค. ํด๋์ค์ ์ ์ฒด ์ด๋ฆ์ "ํจํค์ง๋ช +ํด๋์ค๋ช "์ธ๋ฐ, ํจํค์ง๊ฐ ์/ํ์๋ก ๊ตฌ๋ถ๋์ด ์๋ค๋ฉด ๋ํธ(.)๋ฅผ ์ด์ฉํด ํํํ๋ค. ์์ํจํค์ง.ํ์ํจํค์ง.ํด๋์ค ํด๋์ค๋ฅผ ์ด๋์ํฌ ๋๋ ํจํค์ง ์ ์ฒด๋ฅผ ์ด๋์์ผ์ผ ํ๋ค. ์ฆ, myPackage ๋ด์ myClass๋ฅผ yourPackage๋ก ์ฎ๊ธด๋ค๋ฉด, ํด๋น ํด๋์ค๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค! ํจํค์ง ..

์ ์ (static) ์ ์ ๋ฉค๋ฒ๋ ํด๋์ค์ ๊ณ ์ ๋ ๋ฉค๋ฒ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์ฌ์ฉํ ์ ์๋ ํ๋์ ๋ฉ์๋๋ฅผ ๋งํ๋ค. ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ฉ๋๋ฉด ์ ์ ๋ฉค๋ฒ๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋๋ฐ, ํด๋์ค ์ด๋ฆ๊ณผ ํจ๊ป ๋ํธ(.) ์ฐ์ฐ์๋ก ์ ๊ทผํ๋ค. int a = myClass.value; myClass.doSomething(a); ์ ์ ์ด๊ธฐํ ๋ธ๋ก ์ ์ ํ๋๋ ๋ค์๊ณผ ๊ฐ์ด ํ๋ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐ๊ฐ์ ์ฃผ๋ ๊ฒ์ด ๋ณดํต์ด๋ค. ๊ทธ๋ฌ๋ ๊ณ์ฐ์ด ํ์ํ ์ด๊ธฐํ ์์ ์ ๊ฒฝ์ฐ, ์ ์ ๋ธ๋ก(static block)์ ์ฌ์ฉํ ์ ์๋ค. static { ... } ์ ์ ๋ธ๋ก์ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ฉ๋ ๋ ์๋์ ์ผ๋ก ์คํ๋๋ค. ์ ์ ๋ธ๋ก์ ํด๋์ค ๋ด๋ถ์ ์ฌ๋ฌ ๊ฐ๊ฐ ์ ์ธ๋์ด๋ ์๊ด์๊ณ , ์ ์ธ๋ ์์๋๋ก ์คํ๋๋ค. public class TV..

๋ฐ์ดํฐ ํ์ ๋ฐ์ดํฐ ํ์ ์ primitive type๊ณผ reference type(์ฐธ์กฐ ํ์ )์ผ๋ก ๋๋๋ค. ์ฐธ์กฐ ํ์ ์ด๋ ๊ฐ์ฒด์ ๋ฒ์ง๋ฅผ ์ฐธ์กฐํ๋ ํ์ ์ผ๋ก, ๋ฐฐ์ด, ์ด๊ฑฐ, ํด๋์ค, ์ธํฐํ์ด์ค ํ์ ์ด ์ด์ ํด๋น๋๋ค. ์๋ฐ๋ ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ์คํ ์์ญ์, ์ค์ ๋ฐ์ดํฐ ๊ฐ์ ํ ์์ญ์ ํ ๋นํ๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์์ญ JVM์ ์ด์์ฒด์ ์์ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ(Runtime Data Area)๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ถํด์ ์ฌ์ฉํ๋ค. 1. ๋ฉ์๋ ์์ญ : ์ฝ๋์์ ์ฌ์ฉ๋๋ ํด๋์ค(~.class)๋ค์ ํด๋์ค ๋ก๋๋ก ์ฝ์ด ํด๋์ค๋ณ๋ก ๋ฐํ์ ์์ํ(runtime constant pool), ํ๋(fiedl) ๋ฐ์ดํฐ, ๋ฉ์๋(method) ๋ฐ์ดํฐ, ๋ฉ์๋ ์ฝ๋, ์์ฑ์(constructor) ์ฝ๋ ๋ฑ์ ๋ถ๋ฅํด์ ์ ์ฅํ๋ค. ๋ฉ์๋ ์..