JAVA
๋ชฉ์ฐจ
์ ์ธ ์์น์ ๋ฐ๋ฅธ ๋ณ์์ ์ข ๋ฅ
์๋ฐ์์๋ ํด๋์ค ์์ ๋ณ์์ ๋ฉ์๋๊ฐ ์กด์ฌํ๋๋ฐ ์ด ์์์๋ ์ด๋ ์์ญ์ ์ ์ธ์ ํด์ฃผ๋๋์ ๋ฐ๋ผ ์ข ๋ฅ๊ฐ ๋ฌ๋ผ์ง๊ณ ์์ฑ์๊ธฐ๊ฐ ๋ค๋ฅด๋ค.
1 2 3 4 5 6 7 8 9 10 | Class Variables { int iv; // ์ธ์คํด์ค ๋ณ์ static in cv; // ํด๋์ค ๋ณ์ (static ๋ณ์, ๊ณต์ ๋ณ์) void method() { int lv = 0; // ์ง์ญ๋ณ์ } } | cs |
์์ ์ฝ๋์ฒ๋ผ ํด๋์ค๋ฅผ ์์ฑํด์ค ๊ฒฝ์ฐ ๊ฐ ๋ณ์๋ค์ ์ฐจ์ด๋ ๋ค์ ํ์ ๊ฐ๋ค
๋ณ์์ ์ข ๋ฅ |
์ ์ธ ์์น |
์์ฑ์๊ธฐ |
ํด๋์ค ๋ณ์ |
ํด๋์ค์์ญ |
ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ |
์ธ์คํด์ค ๋ณ์ |
์ธ์คํด์ค๊ฐ ์์ฑ๋์์ ๋ |
|
์ง์ญ ๋ณ์ |
๋ฉ์๋, ์์ฑ์, ์ด๊ธฐํ ๋ธ๋ญ ๋ด๋ถ ๋ฑ |
๋ณ์ ์ ์ธ๋ฌธ์ด ์ํ๋์์ ๋ |
์ถ๊ฐ์ ์ผ๋ก ๊ฐ๊ฐ์ ๋ณ์๋ค์ด JVM์ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ์ด๋์ ์ฌ๋ผ๊ฐ๋์ง ์ดํด๋ณด๋ฉด
Runtime Data Area
๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์ ํฌ๊ฒ 5๊ฐ์ง๋ก ๋์ด์๋ค
์ด ์ค ํด๋์ค ๋ณ์๋ ๋ฉ์๋ ์์ญ(Method Area)์ JVM์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ๊ฐ ๋ ํจ๊ป ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค. ๋ฉ์๋ ์์ญ์ ํ๋์ด๊ณ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๊ฒ ๋๋ค
์ธ์คํด์ค ๋ณ์๋ ํ(Heap)์ ์์ฑ์ด ๋๊ณ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋ ๋ง๋ค ํจ๊ป ์์ฑ๋๋ค
Stack Frame
์ง์ญ๋ณ์๋ JVM Stack ์์ ์์ฑ์ด ๋๋๋ฐ JVM์ ๊ณต๋ถํ ๋ ์ ๋ฆฌํ๋ฏ์ด JVM Stack ์์๋ ๋ฉ์๋๊ฐ ํธ์ถ ๋ ๋ ์คํํ๋ ์์ด ์ฐจ๊ณก์ฐจ๊ณก ์์ด๊ฒ ๋๋๋ฐ ๊ทธ ์คํํ๋ ์ ์์ ์ง์ญ๋ณ์ ๋ฐฐ์ด(Local Variable Array) ๋ถ๋ถ์ ์์น๋๋ค. ์ง์ญ๋ณ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๋๋ฐ 0์ ๋ฉ์๋๊ฐ ์ํ ํด๋์ค ์ธ์คํด์ค์ this ๋ ํผ๋ฐ์ค์ด๊ณ , 1๋ถํฐ๋ ๋ฉ์๋์ ์ ๋ฌ๋ ํ๋ผ๋ฏธํฐ๋ค์ด ์ ์ฅ๋๋ฉฐ, ๋ฉ์๋ ํ๋ผ๋ฏธํฐ ์ดํ์๋ ๋ฉ์๋์ ์ง์ญ ๋ณ์๋ค์ด ์ ์ฅ๋๋ค.
์ฌ๊ธฐ์ ๊ถ๊ธํ ์ ์ ๊ทธ๋ผ ์ด๋จ ๋ ํด๋์ค ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๋์ธ๋ฐ
ํด๋์ค ๋ณ์๋ ๊ณต์ ํ๋ค๋ ์ ์์ ํํธ๋ฅผ ๋ฐ์ผ๋ฉด ๊ณตํต์ ์ธ ํน์ฑ์ ๋ํ๋ผ ๋ ์ ์ธํด์ฃผ๊ณ ์ธ์คํด์ค ๋ณ์๋ ๊ฐ๊ฐ ๊ณ ์ ์ ํน์ฑ์ ๋ํ๋ผ ๋ ์ ์ธํด์ฃผ๋ฉด ๋๋ค
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์นด๋๊ฐ ์์ ๋ ์นด๋์ ๊ฐ ๋ฌธ์๋ค์ ์ธ์คํด์ค ๋ณ์๋ก ์ ์ธํ๋ฉด ์ข๊ณ ์นด๋๋ค์ ๊ณตํต์ ์ธ ํน์ฑ์ธ ๊ฐ๋กํญ๊ณผ ์ธ๋กํญ์ ํด๋์ค ๋ณ์๋ก ์ ์ธํ๋ ๊ฒ์ด ์ข๋ค ( ๋ฌผ๋ก ์ ๋ต์ ์๋ค )
์๋ฐ ๋ฉ์๋(Method)
๋ณดํต ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ์ ๋ ฅ๊ฐ์ ๋ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ ํจ์๋ผ๋ ๊ฒ์ด ์กด์ฌํ๋๋ฐ ์๋ฐ์์๋ ํด๋์ค ๋ฐ์ ์กด์ฌํ๋๊ฒ์ด ๋ถ๊ฐ๋ฅ ํ๊ธฐ ๋๋ฌธ์ ํด๋์ค ๋ด์ ํจ์๊ฐ ์กด์ฌ ํ๋ค. ์ด ํด๋์ค ๋ด์ ํจ์๋ฅผ ๋ฉ์๋(Method)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
( ์ฐธ๊ณ - ํ์ด์ฌ๊ณผ ๊ฐ์ด ํจ์์ ๋ฉ์๋๊ฐ ๊ณต์กดํ๋ ๊ฒฝ์ฐ์๋ ๊ทธ ๋ช ์นญ์ ๊ตฌ๋ถํด์ ๋ถ๋ฆ. ์๋ฐ์ ๊ฒฝ์ฐ๋ ๋ฉ์๋๊ฐ ์ ํํ ๋ช ์นญ )
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฐ์ ๊ทธ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ค.
์ฝ๋ฉ์ ํ๋ค๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ฑ์ฅํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ๊ทธ ์ฝ๋๋ฅผ ๋ฉ์๋๋ก ๋ง๋ค์ด์ฃผ๊ณ ์ฌ์ฉํ๋ ํธ์ด ์ข๋ค ( ๋ฌผ๋ก ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค )
์๋ฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ๋ฉ์๋(์๋ฐ API)๊ฐ ์๊ณ ๊ทธ ํ์ฉ๋ ๋ํ ๋๋ค. ๋ด๊ฐ ๋ง๋ค์ง ์์ ๋ฉ์๋์ด์ง๋ง ์ ๋ ฅ๊ฐ์ผ๋ก ์ด๋ค ์ธ์๊ฐ ํ์ํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์ด๋ค ๊ฐ์ด ๋ฐํ๋๋์ง๋ง ์๋ฉด ์ฐ๋ฆฌ๋ ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฌํ ํน์ฑ์ ๋ณด๊ณ ๋ฉ์๋๋ฅผ ๋ธ๋๋ฐ์ค๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๋ฉ์๋์ ์ฅ์ ์ ์๋ฐ API๋ฅผ ๊ฒฝํํ ๊ฒ ์ฒ๋ผ ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ์๋ค. ๋ํ ์์์ ์ธ๊ธํ๋ฏ์ด ์ค๋ณต๋ ์ฝ๋์ ์ ๊ฑฐ๋ ์ฅ์ ์ด๋ค. ์ค๋ณต๋ ์ฝ๋์ ์ฅ์ ์์ ๋ ๋์๊ฐ๋ฉด ์ ์ง๋ณด์์ ์ฉ์ด์ฑ๋ ๋ณผ ์ ์๋ค. ์ค๋ณต๋ ์ฝ๋๊ฐ ๋ง์ผ๋ฉด ํด๋น ๋ก์ง์ ์์ ํ ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ์ง๋ง ํ๋์ ๋ฉ์๋๋ก ๋ง๋ค์ด๋๋ฉด ํด๋น ๋ฉ์๋๋ง ์์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์ ๊ด๋ฆฌ๋ ์ฝ๊ณ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ๋ ๋ฎ์ถ ์ ์๋ค.
๋ฉ์๋ ๊ตฌ์ฑ ์์
๋ฉ์๋ ์ ์ธ ๋ฐ ๊ตฌํ
๋ฉ์๋์ ๊ตฌ์ฑ ์์
1. ์ ์ธ๋ถ (๋ฐํํ์ , ๋ฉ์๋์ด๋ฆ, ๋งค๊ฐ๋ณ์)
2. ๊ตฌํ๋ถ (์ํ ๋ฌธ์ฅ, return๋ฌธ)
๋ฉ์๋๋ ์ ์ธ๋ถ์ ๊ตฌํ๋ถ๋ก ๋๋์ด์ ธ ์๋๋ฐ ์ ์ธ๋ถ์๋ ๋ฐํ ํ์ , ๋ฉ์๋ ์ด๋ฆ, ๋งค๊ฐ๋ณ์ ์ ์ธ์ด ๋ค์ด๊ฐ๋ค. ๋งค๊ฐ๋ณ์๋ ํ์ํ ๋งํผ ์ ์ธํ ์ ์๊ณ ๊ฐ ๋ณ์ ๊ฐ์ ๊ตฌ๋ถ์ ์ผํ(,)๋ฅผ ์ฌ์ฉํ๋ค.
๋งค๊ฐ๋ณ์ ์ ์ธ ์ ์ฃผ์ํ ์ ์ ์ผ๋ฐ ๋ณ์์๋ ๋ฌ๋ฆฌ ํ์ ์ด ๊ฐ์๋ ๋ณ์์ ํ์ ์ ์๋ต ํ ์ ์๋ค.
1 2 3 | void print (int x, int y) {} // OK void print (int x, y) {} // ์๋ฌ, ๋งค๊ฐ๋ณ์ y์ ํ์
์ด ์๋ค. | cs |
(๋ฉ์๋์ ์ด๋ฆ์ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ ์ ์๋๋ก ํจ์ถ์ ์ด๋ฉด์ ์๋ฏธ์๋ ์ด๋ฆ์ผ๋ก ์ง๋๋ก ๋ ธ๋ ฅํด์ผํ๋ค.)
๊ตฌํ๋ถ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ์ ๋ ์ํ๋ ์ฝ๋์ return๋ฌธ์ด ๋ค์ด๊ฐ๋ค. ๋ชจ๋ ๋ฉ์๋๋ ํ๋์ return๋ฌธ์ด ์กด์ฌํด์ผ ํ๋๋ฐ ๋ฐํํ์ ์ด void์ธ ๊ฒฝ์ฐ์๋ return๋ฌธ์ด ์์ด๋ ๋ฌธ์ ๊ฐ ์๋๋ฐ ์ด๋ return๋ฌธ์ ์์ฑํด์ฃผ์ง ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก return; ์ ์ถ๊ฐํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
** return๊ฐ์ ํ์ ์ ๋ฐํํ์ ๊ณผ ์ผ์นํ๊ฑฐ๋ ์ ์ด๋ ์๋ ํ๋ณํ์ด ๊ฐ๋ฅํ ๊ฒ์ด์ด์ผ ํ๋ค
(์ฐธ๊ณ - ๋ฐฐ์ด, ์ธ์คํด์ค ์ด์ฉํ๋ฉด ๋ ์ด์์ ๊ฐ์ ๋ฐํํ๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค)
1 2 3 4 5 6 7 8 9 | void printAdd (int x, int y) { int result = x + y; System.out.println(result); } void printMultiply (int x, int y) { int result = x * y; System.out.println(result); } | cs |
๋ฉ์๋์์ ์ ๋๋ก ์ดํดํ๋ฉด ์ข์ ๊ฒ์ด ๋ฐ๋ก ์ง์ญ๋ณ์ ๊ฐ๋ ์ธ๋ฐ ์์ ์ ์๋ ๋ ๋ฉ์๋์์ ์ ์ธ๋ ์ง์ญ๋ณ์๋ x, y, result๋ก ๊ฐ์ ์ด๋ฆ์ด์ง๋ง ๋ฌธ์ ์๋ค. ์๋ํ๋ฉด ์ด๋ฆ๋ง ๊ฐ์ ๋ฟ ์๋ก ๋ค๋ฅธ ๊ณต๊ฐ์ ์กด์ฌํ๋ ๋ค๋ฅธ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฉ์๋๋ ํ๋์ ์คํํ๋ ์์ผ๋ก ๋ณผ ์ ์๋๋ฐ ๊ฐ ๋ฉ์๋๋ค์ ๊ฐ์์ ์คํํ๋ ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ๊ณต๊ฐ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
๋ฉ์๋ ํ๋ฆ
๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ์ง๊ธ๊น์ง ์คํ๋๋ ๋ฉ์๋๋ ์ ์ ๋ฉ์ถ๊ณ ํธ์ถ๋ ๋ฉ์๋์ ์ฝ๋๋ค์ด ์คํ๋๋ค. ํธ์ถ๋ ๋ฉ์๋์ ์์ ์ด ๋ชจ๋ ๋๋๋ฉด ๋ค์ ํธ์ถํ ๋ฉ์๋๋ก ๋์์ ์ดํ์ ์ฝ๋๋ฅผ ์คํํ๋ค.
๋ฉ์๋ ํ๋ฆ
1. ๋ฉ์๋ add ํธ์ถ. ํธ์ถ ์ ์ง์ ํ 1L๊ณผ 2L์ด ๋ฉ์๋ add์ ๋งค๊ฐ๋ณ์ a, b์ ๊ฐ๊ฐ ๋ณต์ฌ๋๋ค.
* ๋ฉ์๋ add์ ๋งค๊ฐ๋ณ์ ํ์ ์ด long์ด๋ฏ๋ก long ๋๋ long์ผ๋ก ์๋ ํ๋ณํ์ด ๊ฐ๋ฅํ ๊ฐ์ ์ ๋ฌํด์ผํจ
2. ๋ฉ์๋ add์ ๊ตฌํ๋ถ ์ฝ๋๊ฐ ์ํ๋๋ค
3. ๋ชจ๋ ๋ฌธ์ฅ์ด ์คํ๋๊ฑฐ๋ return๋ฌธ ๋ง๋๋ฉด ํธ์ถํ ๋ฉ์๋๋ก ๋๋์์์ ์ดํ ๋ฌธ์ฅ์ ์ํํ๋ค.
* ๋ฐํ๊ฐ์ ์ ์ฅํ๋ value์ญ์ ๋ฐํํ์ ๊ณผ ๊ฐ๊ฑฐ๋ ์๋ ํ๋ณํ๋์ด ์ ์ฅ๋ ์ ์๋ ํ์ ์ด์ด์ผํจ
๋งค๊ฐ๋ณ์ ์ ํจ์ฑ ๊ฒ์ฌ
๋ฉ์๋์ ๊ตฌํ๋ถ๋ฅผ ์์ฑํ ๋, ์ ์ผ ๋จผ์ ํด์ผํ ์์ ์ด ๋ฐ๋ก ๋งค๊ฐ๋ณ์์ ๊ฐ์ด ์ ์ ํ์ง ํ์ธํ๋ ์์ ์ด๋ค. 'ํธ์ถํ๋ ์ชฝ์์ ์์์ ์ ์ ํ ๊ฐ์ ๋๊ฒจ์ฃผ๊ฒ ์ง' ๋ผ๋ ์๊ฐ์ ๋ฒ๋ ค์ผ๋ง ํ๋ค. ํ์ ๋ง ๋ง์ผ๋ฉด ์ด๋ค ๊ฐ๋ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ๋์ด์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด ๊ณ ๋ฏผํ๊ณ ๊ทธ์ ๋๋นํ ์ฝ๋๋ฅผ ์์ฑํด์ผํ๋ค. ์ ์ ํ์ง ์์ ๊ฐ์ด ๋ค์ด์์ ๋ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ณด์ ํ๋๊ฐ, ๋ณด์ ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด ์ค๋จ์ํค๊ณ ํธ์ถํ ๋ฌธ์ฅ์ผ๋ก ๋๋๋ ค๋ณด๋ด์ผํ๋ค. ๊ฐ๊ณผํ๊ธฐ ์ฝ์ง๋ง ์ค์ํ ๋ถ๋ถ์ด๋ค.
์ฐธ๊ณ ์์ : Java์ ์ ์ 3rd Edtion
์ฐธ๊ณ ์๋ฃ : http://steady-snail.tistory.com/67?category=780927