# [Java] static variable, static method에 λŒ€ν•΄
Study Repository

[Java] static variable, static method에 λŒ€ν•΄

by rlaehddnd0422

Static이 무엇인가?

static은 "정적", "κ³ μ •λœ"μ΄λž€ 의미λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 

μžλ°”μ—μ„œλŠ” 'static' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ static λ³€μˆ˜μ™€ static λ©”μ†Œλ“œ, static 클래슀λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

Javaμ—μ„œ static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€λŠ” 것은 λ©”λͺ¨λ¦¬μ— ν•œλ²ˆμ— ν• λ‹Ήλ˜μ–΄ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ  λ•Œ ν•΄μ œν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

μœ„κ°€ μ˜λ―Έν•˜λŠ” 것을 μ‰½κ²Œ ν’€μ–΄λ‚΄λ©΄ JVM의 GC(가바지 컬렉터)의 관리 μ˜μ—­ 밖에 μ‘΄μž¬ν•˜μ—¬, static μ˜μ—­μ— ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λŠ” λͺ¨λ“  객체가 κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

static ν‚€μ›Œλ“œλŠ” λ³€μˆ˜λ‚˜ ν•„λ“œμ•žμ— λΆ™μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

즉 static이 뢙은 λ³€μˆ˜λŠ” μ–΄λ””μ—μ„œλ‚˜ κ³΅μœ ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜μ΄κ³ , static이 뢙은 λ©”μ†Œλ“œλŠ” μ–΄λ””μ—μ„œλ‚˜ κ³΅μœ ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€.  


Static λ³€μˆ˜ ( 정적 λ³€μˆ˜ )

예λ₯Όλ“€μ–΄ μ•„λž˜μ™€ 같은 ν΄λž˜μŠ€κ°€ μžˆμ„ λ•Œ, ν΄λž˜μŠ€λ‘œλΆ€ν„° μƒμ„±λœ 각 μΈμŠ€ν„΄μŠ€λŠ” nameμ΄λž€ ν”„λ‘œνΌν‹°μ— "human_being"μ΄λΌλŠ” 값이 ν• λ‹Ήλ˜μ–΄ 각 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜μ—¬ 값을 κ°–κ²Œ λ©λ‹ˆλ‹€.

public class Person {
    private String name = "human_being";
    public void printName() {
        System.out.println(this.name);
    }
}
public class PersonTest {
    public static void main(String[] args) {
        Person p = new Person();
        p.printName();

        Person p2 = new Person();
        p2.printName();

    }
}

μ΄λ ‡κ²Œ κ³΅ν†΅μ μœΌλ‘œ 값은 ν•˜λ‚˜λ₯Ό κ°–μ§€λ§Œ 100개의 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 λ©”λͺ¨λ¦¬ 효율이 λ‚˜λΉ μ§‘λ‹ˆλ‹€. 이럴 static ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ κ³΅ν†΅μ μœΌλ‘œ 같은 λ©”λͺ¨λ¦¬μ— ν•˜λ‚˜μ˜ κ°’λ§Œ ν• λ‹Ήν•˜μ—¬ κ³΅μœ ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ μ“Έλ°μ—†λŠ” λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό 막을 수 μžˆκ² μŠ΅λ‹ˆλ‹€.

 

public class Person {
    public static final String name = "human_being";
    public void printName() {
        System.out.println(this.name);
    }
}
public class PersonTest {
    public static void main(String[] args) {
        System.out.println("Person.name = " + Person.name);
    }
}
❗️ 일반적으둜 정적 λ³€μˆ˜λŠ” μƒμˆ˜μ˜ 값을 κ°–λŠ” κ²½μš°κ°€ λ§Žμ•„
1. public으둜 μ„ μ–Έν•˜κ³ ,
2. 변경이 λΆˆκ°€λŠ₯ν•˜λ„λ‘ final둜 막아 
public static final νƒ€μž… λ³€μˆ˜λͺ… = λ¦¬ν„°λŸ΄; 둜 μ‚¬μš©ν•˜λŠ”κ²Œ μΌλ°˜μ μž…λ‹ˆλ‹€.

 


Static Method (정적 λ©”μ†Œλ“œ)

static method λ˜ν•œ 객체의 생성 없이 클래슀 λ ˆλ²¨μ—μ„œ 호좜이 κ°€λŠ₯ν•˜λ©°, κ°μ²΄μ—μ„œλŠ” 호좜이 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

일반적으둜 자주 μ‚¬μš©ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° κ΄€λ ¨ ν΄λž˜μŠ€λ“€μ„ 보면 static λ©”μ†Œλ“œλ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄ μΈμŠ€ν„΄μŠ€ 생성 없이 λ°”λ‘œ 클래슀 λ ˆλ²¨μ—μ„œ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ˜ˆμ‹œ) 

public class StaticMethodTest {
    public static void main(String[] args) {
        System.out.println("Math.abs(-1) = " + Math.abs(-1));
    }
}
  • μΆ”κ°€μ μœΌλ‘œ static methodμ—μ„œλŠ” static ν‚€μ›Œλ“œκ°€ 뢙은 정적 λ³€μˆ˜μ—λ§Œ μ ‘κ·Όν•  수 있고 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ—λŠ” μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.

정적 λ©”μ†Œλ“œ(static method)λ₯Ό μ •ν•˜λŠ” κΈ°μ€€

1. λ©”μ†Œλ“œκ°€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ λ•Œ.

2. μΈμŠ€ν„΄μŠ€ 생성에 μ˜μ‘΄ν•˜μ§€ μ•Šμ„ λ•Œ.

3. μ–΄λ–€ λ©”μ†Œλ“œκ°€ μ—¬λŸ¬ ν΄λž˜μŠ€μ—μ„œ 곡유되고 있으며, 이 λ©”μ†Œλ“œλ₯Ό static λ©”μ†Œλ“œλ‘œ μΆ”μΆœν•΄λ‚Ό 수 μžˆμ„ λ•Œ

 

즉, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ λ°€μ ‘ν•œ μž‘μ—…μ„ ν•˜λŠ” λ©”μ†Œλ“œλŠ” (static이 뢙지 μ•Šμ€) λ©”μ†Œλ“œλ‘œ μ‚¬μš©ν•˜κ³ ,

μΈμŠ€ν„΄μŠ€μ™€ κ΄€κ³„μ—†λŠ” (μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ) 경우 static λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

 

<μš”μ•½>

  • static λ³€μˆ˜, static λ©”μ†Œλ“œλŠ” 클래슀 λ ˆλ²¨μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— ꡳ이 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
    • 반면 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성해야 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ λ°€μ ‘ν•œ μž‘μ—…μ„ ν•˜λŠ” λ©”μ†Œλ“œμž…λ‹ˆλ‹€.
  • static λ©”μ†Œλ“œλŠ” static λ³€μˆ˜μ™€ λ°€μ ‘ν•œ μž‘μ—…μ„ ν•˜λŠ” λ©”μ†Œλ“œλ‘œ, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • λ¬Όλ‘  μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  ν•΄μ„œ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œκ°€ μ•„λ‹Œ static λ©”μ†Œλ“œλ‘œ μ •μ˜ν•˜λŠ” 것이 ν•„μˆ˜μ μΈ 것은 μ•„λ‹ˆλ‚˜, 일반적으둜 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ static λ©”μ†Œλ“œλ‘œ μ •μ˜ν•©λ‹ˆλ‹€.
static method ➑️ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μ‚¬μš© λΆˆκ°€λŠ₯
μ˜€λ‘œμ§€ static λ©”μ†Œλ“œ, static λ³€μˆ˜μ—λ§Œ μ ‘κ·Ό κ°€λŠ₯

instance Method ➑️ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μ‚¬μš© κ°€λŠ₯
λ‹€λ§Œ, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλŠ” static λ©”μ†Œλ“œ, static λ³€μˆ˜μ—λ„ μ ‘κ·Όν•  수 μžˆλ‹€.

 


<참고 자료>

 

[Java] μžλ°” static의 μ˜λ―Έμ™€ μ‚¬μš©λ²•

정적(Static)μ΄λž€? 정적(static)은 κ³ μ •λœμ΄λž€ 의미λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. Staticμ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ Staticλ³€μˆ˜μ™€ Staticλ©”μ†Œλ“œλ₯Ό λ§Œλ“€ 수 μžˆλŠ”λ° λ‹€λ₯Έλ§λ‘œ μ •μ ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œλΌκ³ λ„ ν•˜λ©° 이

coding-factory.tistory.com

 

 

[JAVA] Static? κ·Έκ±° μ™œ λΆ™μ΄λŠ”κ±΄λ°?

Static. μžλ°”λ₯Ό μ΄μš©ν•˜μ—¬ κ°œλ°œμ„ ν•˜λ‹€ 보면 μ°Έ 많이 λ§ˆμ£ΌμΉ˜λŠ” ν‚€μ›Œλ“œμž…λ‹ˆλ‹€. λ‹Ήμž₯ main ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œλ§Œ 보더라도 public static void main(String[] args){ ... } μš”λ ‡κ²Œ static이 λ–‘ν•˜λ‹ˆ λΆ™μ–΄μžˆμ£ . κ·Έλ ‡λ‹€λ©΄ st

jooona.tistory.com

 

λΈ”λ‘œκ·Έμ˜ 정보

Study Repository

rlaehddnd0422

ν™œλ™ν•˜κΈ°