๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[Java] static ํ‚ค์›Œ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ, ์‚ฌ์šฉ ์‹œ๊ธฐ, ๊ณ ์ „์  ๊ด€์  vs ํ˜„๋Œ€์  ๊ด€์ 

by clolee 2025. 4. 8.

๐Ÿ”„ static ํ‚ค์›Œ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ, ์‚ฌ์šฉ ์‹œ๊ธฐ, ๊ณ ์ „์  ๊ด€์  vs ํ˜„๋Œ€์  ๊ด€์ 


๐Ÿ“ฆ static ๋ฉค๋ฒ„๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–ด๋””์— ์ €์žฅ๋ ๊นŒ?

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค:

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์„ค๋ช…
Method Area (๋˜๋Š” Class Area) ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋  ๋•Œ ํด๋ž˜์Šค ๊ด€๋ จ ์ •๋ณด์™€ static ๋ฉค๋ฒ„๊ฐ€ ์ €์žฅ๋จ
Heap ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„๊ฐ€ ์ €์žฅ๋จ
Stack ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ํ˜ธ์ถœ ์ˆœ์„œ ๋“ฑ์ด ์ €์žฅ๋จ

๐Ÿ”น static ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•  ๋•Œ 'Method Area'์— ์˜ฌ๋ผ๊ฐ.

๐Ÿ”น ์ฆ‰, ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์ ์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์Œ.


๐Ÿง  ๊ณ ์ „์  ๊ด€์ : static์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์“ฐ์ง€ ๋ง์ž?

๊ณ ์ „์ ์ธ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์ฒ ํ•™์—์„œ๋Š” ์ด๋Ÿฐ ๊ฒฝํ–ฅ์ด ๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค:

  • ์ „์—ญ ๋ณ€์ˆ˜(global variable)์™€ ๋น„์Šทํ•˜๊ฒŒ ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ static ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.
  • ๊ฐ์ฒด์ง€ํ–ฅ ์ฒ ํ•™์˜ ํ•ต์‹ฌ์ธ "๊ฐ์ฒด ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ"๊ณผ "์บก์Аํ™”"๋ฅผ ํ•ด์น˜๋Š” ์š”์†Œ๋กœ ๊ฐ„์ฃผ.
  • ๋ถˆํ•„์š”ํ•˜๊ฒŒ static์„ ๋‚จ๋ฐœํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ„์† ์ƒ์ฃผํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ์šฐ๋ ค๋„ ์žˆ์—ˆ์Œ.

โ— ๊ณ ์ „ ์ฒ ํ•™: "์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋„, ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด static ์—†์ด ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„ํ•˜์ž."


๐Ÿ”„ ํ˜„๋Œ€์  ๊ด€์ : static๋„ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ

ํ˜„๋Œ€์ ์ธ ๊ฐœ๋ฐœ์—์„œ๋Š” static์˜ ์žฅ์ ๋„ ์ธ์ •ํ•˜๊ณ , ์ ์žฌ์ ์†Œ์— ์ž˜ ์“ฐ์ž๋Š” ํ๋ฆ„์ž…๋‹ˆ๋‹ค.

โœ”๏ธ static์„ ์จ๋„ ์ข‹์€ ๊ฒฝ์šฐ

์ƒํ™ฉ ์ด์œ 
ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฉ”์„œ๋“œ ๊ฐ์ฒด ์ƒ์„ฑ ์—†์ด ํ˜ธ์ถœ ๊ฐ€๋Šฅ, ์ฝ”๋“œ ๊ฐ„๊ฒฐ
์ƒ์ˆ˜(Constant)๋ฅผ ์ •์˜ํ•  ๋•Œ ์˜ˆ: public static final double PI = 3.14159;
์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ์˜ˆ: Math, Collections, Arrays, System ๋“ฑ
๊ณตํ†ต ์„ค์ •๊ฐ’, ๊ณตํ†ต ์†์„ฑ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์ผ ๊ฒฝ์šฐ

์˜ˆ์‹œ:

public class Config {
    public static final String SYSTEM_NAME = "MyApp";
}

๐Ÿ”ง static ๋ฉค๋ฒ„ ๊ด€๋ฆฌ ํŒ

  1. static ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋Š” ๋”ฐ๋กœ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง.

    • ๋ณดํ†ต Utils, Constants, Config, Statics ๋“ฑ ์ „์šฉ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ.
    • ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ฒŒ static๊ณผ non-static์„ ์„ž์–ด ์“ฐ์ง€ ๋ง๊ณ  ์—ญํ• ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒŒ ์ข‹์Œ.
  2. System ํด๋ž˜์Šค ์˜ˆ์‹œ:

     System.out.println("Hello");
    
    • System.out์€ PrintStream ํด๋ž˜์Šค์˜ static ๊ฐ์ฒด. ํ‘œ
    • System.in ์—ญ์‹œ static์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ๋Š” ํ‘œ์ค€ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ
    • ๋”ฐ๋ผ์„œ System.out, System.in๋„ static์ด ๋งž์Œ.

๐Ÿงฌ static vs non-static ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ์š”์•ฝ

๊ตฌ๋ถ„ static ๋ฉค๋ฒ„ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ (non-static)
๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ Method Area (Class Area) Heap ์˜์—ญ
๋ฉ”๋ชจ๋ฆฌ ํƒ‘์žฌ ์‹œ์  ํด๋ž˜์Šค ๋กœ๋”ฉ ์‹œ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ
์ ‘๊ทผ ๋ฐฉ์‹ ํด๋ž˜์Šค๋ช….๋ณ€์ˆ˜ / ํด๋ž˜์Šค๋ช….๋ฉ”์„œ๋“œ ๊ฐ์ฒด๋ช….๋ณ€์ˆ˜ / ๊ฐ์ฒด๋ช….๋ฉ”์„œ๋“œ
๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ์œ ์ง€๋จ ์ฐธ์กฐ ์—†์œผ๋ฉด GC ๋Œ€์ƒ ๋จ
์žฅ์  ๊ฐ์ฒด ์—†์ด ๊ณต์œ  ๊ฐ€๋Šฅ, ๋น ๋ฆ„ ๊ฐ์ฒด๋ณ„ ๋ฐ์ดํ„ฐ ์œ ์ง€ ๊ฐ€๋Šฅ
๋‹จ์  ๋ฌด์กฐ๊ฑด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ, ๋‚จ์šฉ ์‹œ ์œ„ํ—˜ ํ˜ธ์ถœ๋งˆ๋‹ค ๊ฐ์ฒด ํ•„์š”, ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด ๊ฐ€๋Šฅ

๐Ÿ“Œ ์ •๋ฆฌ: static์„ ์“ฐ๋Š” ๊ธฐ์ค€

์‚ฌ์šฉ ์ถ”์ฒœ ์‚ฌ์šฉ ์ž์ œ
๊ณตํ†ต์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ƒ์ˆ˜ ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๊ฐ’์ด ๋‹ฌ๋ผ์•ผ ํ•˜๋Š” ์†์„ฑ
๊ณต์šฉ ์œ ํ‹ธ ๋ฉ”์„œ๋“œ (Math, Collections ๋“ฑ) ๊ฐ์ฒด๋งˆ๋‹ค ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•œ ๊ณ„์‚ฐ
์„ค์ •๊ฐ’, ํ™˜๊ฒฝ๊ฐ’, ๊ณตํ†ต ๋ฆฌ์†Œ์Šค ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ณต์žกํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์งˆ ๊ฒฝ์šฐ
๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•  ๋•Œ (ex. Singleton Pattern) ํ…Œ์ŠคํŠธ๋‚˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋Š” ์ „์—ญ ์ƒํƒœ

โœ… ๊ฒฐ๋ก 

static์€ ํ”„๋กœ๊ทธ๋žจ ์ „๋ฐ˜์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ, ๋ฉ”์„œ๋“œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ข‹์€ ๋„๊ตฌ์ง€๋งŒ, ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์„ ํ•ด์น˜์ง€ ์•Š๋„๋ก ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋Œ“๊ธ€