Light Red Pointer [Java] 02.Static ๋ณ€์ˆ˜์™€ Static ๋ฉ”์†Œ๋“œ(์ •์ ๋ณ€์ˆ˜์™€ ์ •์ ๋ฉ”์†Œ๋“œ)
 

[Java] 02.Static ๋ณ€์ˆ˜์™€ Static ๋ฉ”์†Œ๋“œ(์ •์ ๋ณ€์ˆ˜์™€ ์ •์ ๋ฉ”์†Œ๋“œ)

 


 

 

 

์ผํ•˜๋‹ค๋ณด๋ฉด static ํ‚ค์›Œ๋“œ๋ฅผ ๋งŽ์ด ์ ‘ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๋ถ„๋ช…ํžˆ ๊ณต๋ถ€๋ฅผ ํ–ˆ๋˜๊ฑด๋ฐ๋„ ๋ณผ๋•Œ๋งˆ๋‹ค '์ •ํ™•ํžˆ ๋ญ์˜€์ง€..?'ํ•˜๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋œ๋‹ค. ๋‹ค๋ฅธ ๊ฑด ๊ธฐ์–ต์— ์ž˜๋งŒ ๋‚จ์œผ๋ฉด์„œ ์™œ ์ด์ƒํ•˜๊ฒŒ  static๋งŒ ๊ธฐ์–ต์— ์•ˆ๋‚จ๋Š”๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ด์ฐธ์— ์™„๋ฒฝํ•˜๊ฒŒ static์„ ๋งˆ์Šคํ„ฐ์—์„œ ์ž๋‹ค๊ฐ€๋„ ๋ถ€๋ฅด๋ฉด ๋‹ฌ๋‹ฌ๋‹ฌ ์Š์„ ์ˆ˜ ์žˆ๋„๋ก ๋งˆ์Šคํ„ฐ ํ•ด์•ผ์ง€!

 

 

์„œ๋ก 

์‚ฌ์ „์ ์œผ๋กœ Static์€ '๊ณ ์ •๋œ'์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, Staticํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ •์  ๋ณ€์ˆ˜์™€ ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ •์  ๋ณ€์ˆ˜์™€ ์ •์  ๋ฉ”์†Œ๋“œ๋Š” ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ดํ•˜์—์„œ๋Š” ์ •์  ๋ณ€์ˆ˜(Static ๋ณ€์ˆ˜)์™€ ์ •์  ๋ฉ”์†Œ๋“œ(Static ๋ฉ”์†Œ๋“œ)์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

 

static์ด๋ž€?

ํ•ด๋‹น ๊ทธ๋ฆผ์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋•๊ณ ์ž ๊ทธ๋ฆผํŒ์œผ๋กœ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ด๋‹ค.  

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๋ณด๋ฉด static ์˜์—ญ๊ณผ heap(ํž™) ์˜์—ญ์ด ์กด์žฌํ•œ๋‹ค.

 

- static ์˜์—ญ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ํด๋ž˜์Šค(class)๊ฐ€ ๋ชจ์—ฌ ์žˆ๋Š” ๊ณต๊ฐ„์ด๊ณ 

- heap(ํž™) ์˜์—ญ์—๋Š” new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๊ฐ€ ๋ชจ์—ฌ ์žˆ๋Š” ๊ณต๊ฐ„์ด๋‹ค.

- heap(ํž™) ์˜์—ญ์€ Garbage Collector(GC)๊ฐ€ ์ˆ˜์‹œ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , static ์˜์—ญ์€ GC๊ฐ€ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— static ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

static ๋ณ€์ˆ˜์™€ static ๋ฉ”์†Œ๋“œ

- static ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค ๋ณ€์ˆ˜(ํŠน์ • ํด๋ž˜์Šค์— ์†ํ•œ ๋ณ€์ˆ˜๋กœ, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๊ฐ€ ๊ณต์œ ํ•จ)๋กœ, ๋ณ„๋„์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ static ์ž์›์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

- static ๋ฉ”์†Œ๋“œ๋„ ํŠน์ • ํด๋ž˜์Šค์— ์†ํ•œ ๋ฉ”์†Œ๋“œ๋กœ, ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํด๋ž˜์Šค ์ด๋ฆ„์„ ํ†ตํ•˜์—ฌ ํ˜ธ์ถœ๋œ๋‹ค.

- ์„ ์–ธ : ๋ฉ”์†Œ๋“œ์™€ ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ์— 'static'ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์  ๋ณ€์ˆ˜/์ •์  ๋ฉ”์†Œ๋“œ ์ž„์„ ๋‚˜ํƒ€๋‚ด์ฃผ๋ฉด ๋œ๋‹ค.

 

[ํ™œ์šฉ ์˜ˆ์ œ ์ฝ”๋“œ ↓]

public class Example {
    // ์ •์  ๋ณ€์ˆ˜(static ๋ณ€์ˆ˜)
    private static int staticVariable = 100;

    // ์ •์  ๋ฉ”์†Œ๋“œ(static ๋ฉ”์†Œ๋“œ)
    private static Integer addStatic(int a, int b) {
        return a + b + staticVariable;
    }

    // ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ(instance ๋ฉ”์†Œ๋“œ):
    private Integer addInstance(int a, int b) {
        return a + b + staticVariable;
    }

    public static void main(String[] args) {
        // ์ •์  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ (ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœ)
        Integer resultStatic = Example.addStatic(3, 4);

        // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ(์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ ์œ„ํ•œ)
        Example exampleObject = new Example();

        // ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ(๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ)
        Integer resultInstance = exampleObject.addInstance(5, 6);

        // ์ •์  ๋ณ€์ˆ˜ ์ถœ๋ ฅ
        System.out.println("Static๋ณ€์ˆ˜: " + Example.staticVariable);

        // ์ •์  ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ
        Example.staticVariable = 200;

        // ๋ณ€๊ฒฝ๋œ ์ •์  ๋ณ€์ˆ˜๋กœ ๋‹ค์‹œ ํ˜ธ์ถœ
        Integer updatedResultStatic = Example.addStatic(3, 4);
        System.out.println("๋ณ€๊ฒฝ๋œ static ๋ณ€์ˆ˜ : " + updatedResultStatic);
    }
}

 

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด 'static' ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” ์ •์  ๋ณ€์ˆ˜์™€ ์ •์  ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ํด๋ž˜์Šค ์ด๋ฆ„(Example.addStatic, Example.staticVariable)์œผ๋กœ ํ˜ธ์ถœ์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

๋ฐ˜๋ฉด 'static'ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์–ด ์žˆ์ง€ ์•Š์€ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ new ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ 'new Example();' ์ด๋Ÿฐ์‹์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค ํ˜ธ์ถœํ•˜์˜€๋‹ค.  ์„ค๋ช…์„ ๋ณด๋Š” ๊ฒƒ๋ณด๋‹ค ์ง์ ‘ ์ฝ”๋“œ๋กœ ์ณ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

'static' ์‚ฌ์šฉํ•ด๋„ ๋ ๊นŒ?

static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฉ”์†Œ๋“œ์™€ ๋ณ€์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ํŽธ๋ฆฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŽธ๋ฆฌ์„ฑ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ์ •์  ๋ณ€์ˆ˜์™€ ์ •์  ๋ฉ”์†Œ๋“œ์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ์‚ฌ์šฉ๋ณด๋‹ค๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์‚ฌ์šฉ์ด ํ•„์š”ํ•˜๋‹ค. ์ •์  ๋ณ€์ˆ˜์™€ ์ •์  ๋ฉ”์†Œ๋“œ์˜ ์‚ฌ์šฉ์„ ๊ฐ€๊ธ‰์  ์ž์ œํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

- Garbage Collector(GC)์˜ ๊ด€๋ฆฌ ์˜์—ญ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ ๆœ‰

- static ๋ฉ”์†Œ๋“œ๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค. -> ์ฆ‰ ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ ๊ฐ์†Œ

- static ๋ณ€์ˆ˜์™€ static ๋ฉ”์†Œ๋“œ๋Š” ์ „์—ญ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์˜์กด์„ฑ์ด ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ์„œ๋กœ์—๊ฒŒ ์˜์กดํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ์Šคํ…œ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์›Œ ์ง„๋‹ค. -> ์˜์กด์„ฑ ๋ฌธ์ œๆœ‰

- static ๋ณ€์ˆ˜๊ฐ€ ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๊ณต์œ ๋  ๋•Œ ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์ •์  ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค๊ฑฐ๋‚˜ ์ฝ์„ ๋•Œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. - > ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๋ฌธ์ œ ๋ฐœ์ƒ ํ™•๋ฅ  ๅคš


 

Reference

https://steady-coding.tistory.com/603

 

[Java] static์ด๋ž€?

java-study์—์„œ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Static์˜ ๊ฐœ๋… Static(์ •์ )์€ ๊ณ ์ •๋œ์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, Static ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ •์  ๋ณ€์ˆ˜์™€ ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์ •์ 

steady-coding.tistory.com

https://itjava.tistory.com/31

 

[ Java ] staticํ•จ์ˆ˜ static ๋ณ€์ˆ˜

static์— ๋Œ€ํ•˜์—ฌ java์—์„œ static ํ‚ค์›Œ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด application์ด ์ข…๋ฃŒ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ์ง€์›Œ์ง„๋‹ค. ์•„๋ž˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๋ณด๋ฉด static์˜์—ญ์ด ์žˆ๊ณ  ํž™ ์˜์—ญ์ด ์žˆ๋‹ค. static์˜์—ญ

itjava.tistory.com