๐ 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 ๋ฉค๋ฒ ๊ด๋ฆฌ ํ
static ๋ณ์์ ๋ฉ์๋๋ ๋ฐ๋ก ๋ชจ์์ ๊ด๋ฆฌํ๋ฉด ๊ฐ๋ ์ฑ์ด ์ข์์ง.
- ๋ณดํต
Utils
,Constants
,Config
,Statics
๋ฑ ์ ์ฉ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ. - ํท๊ฐ๋ฆฌ์ง ์๊ฒ static๊ณผ non-static์ ์์ด ์ฐ์ง ๋ง๊ณ ์ญํ ๋ณ๋ก ๊ตฌ๋ถํ๋ ๊ฒ ์ข์.
- ๋ณดํต
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์ ํ๋ก๊ทธ๋จ ์ ๋ฐ์์ ์์ฃผ ์ฌ์ฉํ๋ ์์ฑ, ๋ฉ์๋๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ์ข์ ๋๊ตฌ์ง๋ง, ๊ฐ์ฒด์งํฅ์ ํต์ฌ์ ํด์น์ง ์๋๋ก ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ์ ํ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Java ํค์๋ ์กฐํฉ ์๋ฏธ (0) | 2025.04.08 |
---|---|
[Java] Java ํค์๋ ์ ๋ฆฌ (0) | 2025.04.08 |
[Java] ์๋ฐ ํด๋์ค ์๊ธฐ์ฐธ์กฐ ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.04.06 |
[Java] ์๋ฐ์์ย main()ย ๋ฉ์๋ ์์์ ๋ค๋ฅธ ๋ฉ์๋ ํธ์ถ (0) | 2025.04.06 |
[Java] Composition vs Inheritance โ ์ธ์ ์จ์ผ ํ๋? (0) | 2025.04.02 |
๋๊ธ