[CS지식의 정석] static 키워드를 사용하는 이유와 단점?

박두팔이·2023년 8월 16일
0

CS컴퓨터과학

목록 보기
10/13

static 키워드?

인스턴스가 아닌 클래스에 속하며 클래스의 변수, 메서드 등을 공유하는데 사용된다.

  • 따라서 해당 클래스로 만들어지는 객체마다 중복되는 메서드, 속성을 효율적으로 정의할 수 있다.
  • 단순히 전역변수가 아니라 클래스의 객체들 끼리 사용되는 메서드 또는 속성이라는 것을 나타내는 명시성이라는 장점이 있다.

Java 코드로 살펴보자

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 메모리 영역에 할당이 되며 프로그램이 종료 될 때까지 가비지컬렉터에 의해 메모리가 회수되지 않기 때문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비를 불러올 수 있다.
profile
기억을 위한 기록 :>

0개의 댓글