카테고리 없음

static?

겨르 2024. 11. 12. 17:02

클래스의 인스턴스가 아닌 클래스에 속하며 클래스의 변수, 메서드 등을 공유하는데 사용됨. 이를 통해 해당 클래스로 만들어지는 객체 사이에서 중복되는 메서드, 속성을 효율적으로 정의할 때 쓰이며 단순히 전역변수가 아니라 클래스 내의 static키워드로 선언하여 이 클래스의 객체들끼리 사용되는 메서드 또는 속성이라는 것을 나타내주는 명시성이라는 장점이 생기므로 쓰임.

public class Person {
            // 멤버변수(속성)
            String name;
            int IQ;
            int str;
            private static final String GUDOC = "큰돌의 터전";
            // constructor
            public Person(String name, int IQ, int str){
                       this.name = name;
                       this.IQ = IQ;
                       this.str = str;
             }
             public Person(){
                    this.name = "alanwalker";
                    this.IQ = 100; this.str = 100;
              }
              // 메서드
              public void levelup(){
                       this.IQ = this.IQ + 1;
                       this.str = this.str + 1;
                       System.out.println(this.name + "의 지능과 힘이 증가했습니다! " + this.IQ + " / " + this.str); }
              // public void talk(Person a, Person b){
              // System.out.println(a.name + " & " + b.name + "이 대화를 시작했다!");
               // }
              private static void talk(Person a, Person b){
                             System.out.println(a.name + " & " + b.name + "이 대화를 시작했다!");
               }
               public static void main(String[] args) {
                             Person a = new Person(); // 객체 >> 인스턴스
                             a.levelup();
                             Person b; // 객체
                             b = new Person("큰돌", 1000, 1); // 인스턴스
                             b.levelup(); 

                             Person.talk(a, b);
                             System.out.println(Person.GUDOC);
         }
}

 

static의 단점

static으로 선언된 변수, 블록, 메서드 등은 선언과 동시에 미리 heap 영역이 아닌 method area 메모리 영역에 할당이 되며 프로그램이 종료될 때 까지 GC에 의해 메모리가 회수되지 않기 때문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비를 불러올 수 있음.

 

 

출처 인프런 CS 지식의 정석