๋ง๊ทธ๋๋ก '์ ์ (๊ณ ์ ๋)'์ด๋ ๋ป
ํด๋์ค, ๋ฉ์๋, ๋ณ์์ ์ง์ ์๋ก ์ฌ์ฉํ ์ ์๋ค.
์ธ์คํด์ค ์์ฑ๊ณผ ๊ด๊ณ์์ด ํด๋์ค๊ฐ ๋ก๋ฉ๋ ๋ ํจ๊ป ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋๋ค.
(= ์ธ์คํด์ค ์์ฑํ์ง ์๊ณ ํด๋์ค๋ช ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค)
<์ ๊ทผ ํ์>
ํด๋์ค๋ช .๋ฉค๋ฒ์ ์ญ๋ณ์
ํด๋์ค๋ช .๋ฉ์๋()
์ด ๋ง ๋ป์ด ์ฒ์์ ์๋ฟ์ง ์์ ์๋ ์๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ๊ณต๊ฐ์ ์ด 3 ๊ฐ๋ก ์ด๋ฃจ์ด์ง๋ค.
a. Static Area --> ํ๋ก๊ทธ๋จ ์์ํ ๋ ํ ๋น๋๋ฉฐ ๋๋ ๋๊น์ง ์ ์ง
b. Stack --> ๋ฉ์๋ ํธ์ถ๋ ๋ ํ ๋น๋๋ฉฐ ๋ฉ์๋๊ฐ ๋๋๋ฉด ์ข
๋ฃ
c. Heap --> ํ๋ก๊ทธ๋จ ๋๋ ๋๊น์ง ์ ์ง
์ง๊ธ ์ด ๊ธ์์ ๋ฐฐ์ฐ๊ณ ์ ํ๋ Static์ a๋ฒ์ธ Static Area์ ํด๋์ค์ ํจ๊ป ๊ฐ์ฅ ๋จผ์ ์ ์ฅ๋๋ค.
๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ค์ ์ ๋ฆฌํด ๋ณด์๋ฉด,
static area -> ํด๋์ค/ ํด๋์ค(์ ์ ) ๋ณ์/ ํด๋์ค(์ ์ ) ํจ์
stack -> ์ฐธ์กฐ๋ณ์ / int ๊ฐ / ๋ฉ์๋ ๋ฑ (์ฃผ๋ก ๋ฉ์๋ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ ๋ณด ์ ์ฅ)
heap -> ๊ฐ์ฒด/ ๋ฐฐ์ด/ ๋ฌธ์์ด ๋ฑ
- ๋ชจ๋ ์ธ์คํด์ค๊ฐ ํ๋์ ๋ณ์๋ฅผ ๊ณต์ ํ๋ฉฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ฐธ์กฐ๋ณ์ ์์ด ํด๋์ค ๋ช ๋ง์ผ๋ก ํด๋น ๋ฉค๋ฒ์ ์ ๊ทผ๊ฐ๋ฅ
- Static ๋งค์๋ ๋ด์์ ์ธ์คํด์ค ๋ฉค๋ฒ๋ณ์* ์ ๊ทผ ๋ถ๊ฐ๋ฅ
- Static ๋งค์๋ ๋ด์์ ์ผ๋ฐ ๋งค์๋ ํธ์ถ ๋ถ๊ฐ๋ฅ
- this / super ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
* ๋ฉค๋ฒ๋ณ์ : ํด๋์ค ๋ด/ ๋ฉ์๋ ์ธ์์ ์ ์ธ๋ ๋ณ์
1๋ฒ๊ณผ 2๋ฒ์ด ์ฑ๋ฆฝ๋๋ ์ด์
static ๋ฉ์๋๊ฐ ํธ์ถ๋ ์์ ์ ์ผ๋ฐ ๋ฉ์๋์ ๋ณ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ๋ผ์ ์์ง ์๊ธฐ ๋๋ฌธ์ ์ด์ ์ ๊ทผํ ์ ์๋ค.
3๋ฒ์ด ์ฑ๋ฆฝ๋๋ ์ด์
๋ฉ์๋ ์คํ ์์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ธฐ ์ ์ด๋ฏ๋ก ์ธ์คํด์ค์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ this์ super๋ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ์ฌ์ฉํ ์ ์๋ค
Ex ํด๋์ค์ ์ ์ ๋ณ์ 2๊ฐ, ์ธ์คํด์ค ๋ฉค๋ฒ๋ณ์ 1๊ฐ ์ ์ธ
Ex ํด๋์ค ๋ด์ ์ ์ ๋ฉ์๋ 1๊ฐ ์ ์ธ
Ex ํด๋์ค ๋ด Main ๋ฉ์๋์ ๊ฐ์ฒด ์์ฑ
public class Ex {
int x = verification(1);
static int y = verification(2);
public static void main(String[] args) {
System.out.println("๋ฉ์ธ ๊น๊ฟ");
Ex e = new Ex(); // int x๋ฅผ ์คํํ๊ธฐ ์ํด ๊ฐ์ฒด ์์ฑ
} // main() ๋ฉ์๋ ๋
public static int verification(int num) {
System.out.println(num);
return num;
} // verification() ๋ฉ์๋ ๋
static int z = verification(3);
}
๊ฒฐ๊ณผ
2
3
๋ฉ์ธ ๊น๊ฟ
1
๊ณผ์ ์ค๋ช
1. ํด๋์ค๊ฐ Static Area ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ
2. Static์ด ์ ์ธ๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ
3. Static ๋ฉค๋ฒ๋ณ์์ธ y์ z๋ฅผ ๋ก๋ฉํ๊ธฐ ์ํด verification ๋ฉ์๋ ํธ์ถ๋จ
=> 2, 3 ์ถ๋ ฅ
4. main() ๋ฉ์๋ ์๋ ํธ์ถ
=> "๋ฉ์ธ ๊น๊ฟ" ์ถ๋ ฅ
5. Ex ํด๋์ค์ ์ธ์คํด์ค ์์ฑ๊ณผ ๋์์ ์ธ์คํด์ค ๋ฉค๋ฒ๋ณ์์ธ x๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ
6. int x์ ๊ฐ์ ํ ๋นํ๊ธฐ ์ํด verification ๋ฉ์๋๊ฐ ํธ์ถ
=> 1 ์ถ๋ ฅ
๊ทธ๋ฆผ ์ค๋ช
๋ ์ด๋ ค์ฐ๋๊น ๊ทธ๋ฆผ์ผ๋ก ์ดํดํด ๋ณด์.. ~
๋ฉ๋ชจ๋ฆฌ๋ค
1. ํด๋์ค๊ฐ Static Area ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ
2. Static์ด ์ ์ธ๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ
3. Static ๋ฉค๋ฒ๋ณ์์ธ y์ z๋ฅผ ๋ก๋ฉํ๊ธฐ ์ํด verification ๋ฉ์๋ ํธ์ถ๋จ
=> 2, 3 ์ถ๋ ฅ
4. main() ๋ฉ์๋ ์๋ ํธ์ถ
=> "๋ฉ์ธ ๊น๊ฟ" ์ถ๋ ฅ
5. Ex ํด๋์ค์ ์ธ์คํด์ค ์์ฑ๊ณผ ๋์์ ์ธ์คํด์ค ๋ฉค๋ฒ๋ณ์์ธ x๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ
(๊ทธ๋ฆผ์ x ์์ int ๊น๋จน์์ด์ .. )
6. int x์ ๊ฐ์ ํ ๋นํ๊ธฐ ์ํด verification ๋ฉ์๋๊ฐ ํธ์ถ
=> 1 ์ถ๋ ฅ
๊ทธ๋ผ ๋๋์ฒด static์ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
๊ตณ์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํด๋์ค๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค๋ ์ ์์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉ๋์ง ์๊ณ ํ ๋ฒ๋ง ์ฌ์ฉ๋ ๋ ์ฆ, ๊ตณ์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์๊ฐ ์์ ๋ ์คํํฑ์ ์ฌ์ฉํ๋ฉด ์ข๋ค. (-> ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ข์)
๋ํ, static ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ฒด์์ ๊ฐ์ ๊ณต์ ํ๊ฑฐ๋ ์ฑ๊ธํค ๋์์ธ ํจํด์์๋ ์ฌ์ฉํ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋, ์ด๋ค ํด๋์ค๊ฐ ์ต์ด ํ ๋ฒ๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋์์ธ ํจํด
์๋ฅผ ๋ค์๋ฉด
Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1 == p2); // false ์ถ๋ ฅ
p1๊ณผ p2์ ์ฃผ์๋ฅผ ๋น๊ตํด ๋ณด๋ฉด ๋น์ฐํ false๊ฐ ๋์จ๋ค.
์ด ๋ ์ฐธ์กฐ๋ณ์์ ์ฃผ์๋ฅผ ๊ฐ๋๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ฑ๊ธํค์ด๋ค.
์์ฑ์๋ฅผ private๋ก ์ ์ธํด์ ์์ฑ์ ๋ถ๊ฐ๋ฅํ๊ฒ ํ๋ค
๋ฉ์๋๋ฅผ ํ๋ ์์ฑํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ก ๊ตฌํํ๋ค
์ฆ, ์ฑ๊ธํค ํจํด์ ๋จ ํ๋์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ๋ ๋์์ธ ํจํด์ด๋ค
'Person ์ฑ๊ธํค ํจํด ํด๋์ค๋ฅผ ์์ฑํ๊ณ ๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ์ธํ ๋ค ์ฃผ์๋ฅผ ๋น๊ตํด ๋ณด์์ค '
class Person {
// ํด๋์ค ๋ด๋ถ ๊ฐ์ฒด ์์ฑ๊ณผ ์ง์ ์ ๊ทผ์ ๋ง๋๋ค.
private static Person person = new Person();
// ํด๋์ค ์ธ๋ถ์์์ ๊ฐ์ฒด ์์ฑ์ ๋ง๋๋ค.
private Person() {}
// ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ํ์ฉ + ์ ๊ทผ์ ์ํด static ์ฌ์ฉ
static Person getInstance() {
return person; // person ๊ฐ์ฒด ๋ฐํ -> person ํด๋์ค ๋ฉ์๋์ ๊ฐ์ฒด ์ ๊ทผ ๊ฐ๋ฅ
}
}
Person p1 = new Person();
Person p2 = new Person();
System.out.println(p1 == p2); // true ์ถ๋ ฅ
๋ฒจ๋ก๊ทธ ์ ์ผ๋ฉด์ ์๊ฒ ๋ ์ฌ์ค
์ธ์คํด์ค ๋ฉค๋ฒ๋ณ์๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด์ผ๋ง ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ค!
์ด์ฉ์ง ์ ์๋์ด ์คํํฑ์ ๊ฐ์ฒด ์์ฑ ์ ํด๋ ํด๋์ค๋ก๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค๊ณ ๊ฐ์กฐํ๋๋ผ