์ •์  : static

๊ธยท2024๋…„ 3์›” 14์ผ
0

JAVA

๋ชฉ๋ก ๋ณด๊ธฐ
3/7
post-thumbnail

๐Ÿค 1) Static์ด๋ž€

๋ง๊ทธ๋Œ€๋กœ '์ •์ (๊ณ ์ •๋œ)'์ด๋ž€ ๋œป
ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ๋ณ€์ˆ˜์˜ ์ง€์ •์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿค 2) Static ํŠน์ง•

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ ๊ด€๊ณ„์—†์ด ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋  ๋•Œ ํ•จ๊ป˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ๋œ๋‹ค.
(= ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ํด๋ž˜์Šค๋ช…์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค)

<์ ‘๊ทผ ํ˜•์‹>
ํด๋ž˜์Šค๋ช….๋ฉค๋ฒ„์ „์—ญ๋ณ€์ˆ˜
ํด๋ž˜์Šค๋ช….๋ฉ”์„œ๋“œ()

์ด ๋ง ๋œป์ด ์ฒ˜์Œ์— ์™€๋‹ฟ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ ๊ณต๊ฐ„์€ ์ด 3 ๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

a. Static Area --> ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ํ•  ๋•Œ ํ• ๋‹น๋˜๋ฉฐ ๋๋‚  ๋•Œ๊นŒ์ง€ ์œ ์ง€
b. Stack --> ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋  ๋•Œ ํ• ๋‹น๋˜๋ฉฐ ๋ฉ”์„œ๋“œ๊ฐ€ ๋๋‚˜๋ฉด ์ข…๋ฃŒ
c. Heap --> ํ”„๋กœ๊ทธ๋žจ ๋๋‚  ๋•Œ๊นŒ์ง€ ์œ ์ง€

์ง€๊ธˆ ์ด ๊ธ€์—์„œ ๋ฐฐ์šฐ๊ณ ์ž ํ•˜๋Š” Static์€ a๋ฒˆ์ธ Static Area์— ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ๊ฐ€์žฅ ๋จผ์ € ์ €์žฅ๋œ๋‹ค.

๊ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ •๋ฆฌํ•ด ๋ณด์ž๋ฉด,
static area -> ํด๋ž˜์Šค/ ํด๋ž˜์Šค(์ •์ ) ๋ณ€์ˆ˜/ ํด๋ž˜์Šค(์ •์ ) ํ•จ์ˆ˜
stack -> ์ฐธ์กฐ๋ณ€์ˆ˜ / int ๊ฐ’ / ๋ฉ”์„œ๋“œ ๋“ฑ (์ฃผ๋กœ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด ์ €์žฅ)
heap -> ๊ฐ์ฒด/ ๋ฐฐ์—ด/ ๋ฌธ์ž์—ด ๋“ฑ

๐Ÿ’™ (1) Static ๋ฉค๋ฒ„๋ณ€์ˆ˜

  • ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ์ฐธ์กฐ๋ณ€์ˆ˜ ์—†์ด ํด๋ž˜์Šค ๋ช…๋งŒ์œผ๋กœ ํ•ด๋‹น ๋ฉค๋ฒ„์— ์ ‘๊ทผ๊ฐ€๋Šฅ

๐Ÿ’™ (2) Static ๋งค์„œ๋“œ

    1. Static ๋งค์„œ๋“œ ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„๋ณ€์ˆ˜* ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ
    1. Static ๋งค์„œ๋“œ ๋‚ด์—์„œ ์ผ๋ฐ˜ ๋งค์„œ๋“œ ํ˜ธ์ถœ ๋ถˆ๊ฐ€๋Šฅ
    1. this / super ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ

* ๋ฉค๋ฒ„๋ณ€์ˆ˜ : ํด๋ž˜์Šค ๋‚ด/ ๋ฉ”์„œ๋“œ ์™ธ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜

1๋ฒˆ๊ณผ 2๋ฒˆ์ด ์„ฑ๋ฆฝ๋˜๋Š” ์ด์œ 

static ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ์‹œ์ ์— ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ์™€ ๋ณ€์ˆ˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์˜ฌ๋ผ์™€ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

3๋ฒˆ์ด ์„ฑ๋ฆฝ๋˜๋Š” ์ด์œ 

๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ์— ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์ด๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” this์™€ super๋Š” ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค


๐Ÿค 3) Static ์˜ˆ์‹œ

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 ์ถœ๋ ฅ


๐Ÿค 3) Static ์‚ฌ์šฉ - ์‹ฑ๊ธ€ํ†ค (Singleton)

๊ทธ๋Ÿผ ๋„๋Œ€์ฒด 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 ์ถœ๋ ฅ

๋ฒจ๋กœ๊ทธ ์ ์œผ๋ฉด์„œ ์•Œ๊ฒŒ ๋œ ์‚ฌ์‹ค
์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด์•ผ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค!
์–ด์ฉ์ง€ ์„ ์ƒ๋‹˜์ด ์Šคํƒœํ‹ฑ์€ ๊ฐ์ฒด ์ƒ์„ฑ ์•ˆ ํ•ด๋„ ํด๋ž˜์Šค๋กœ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๊ฐ•์กฐํ•˜๋„๋ผ

0๊ฐœ์˜ ๋Œ“๊ธ€