본문 바로가기
개발 노트/기초 지식

[java] static 의 이해

by tokkiC 2022. 4. 21.

스타크래프트 게임에서 질럿을 뽑아보자

프로토스라는 패키지 안의 여러 건물과 유닛의 클래스가 존재한다

그 중 유닛인 질럿과


질럿의 업그레이드 건물 포지


질럿 생산 건물인 게이트 웨이의 관계를 이용하여 static 을 설명가능하다


질럿은 게이트 웨이에서 생산가능하며 생산 시 명령은 다음과 같다

질럿 질럿1 = new 질럿;

질럿이라는 객체의 클래스를 보면 다음과 같다

class 질럿 {
    name : 질럿;
    attack : 16;
    hp : 100;
    shield : 60;    
}

non-static 이 아닌 방식으로 attack을 높이려면

일단 new 질럿으로 생성해서 각각의 질럿들을(=인스턴스들) 만들어 하나씩 수정 할 부분의 데이터를 고치게 되지만

non-static 의 경우
class 변수 = new class();
변수.method(); 형태로 호출

 질럿1 {
    String name : 질럿;
    int attack : 16+2;    //  각 질럿 개체 마다 수정을 해야한다
    int hp : 100;
    int shield : 60;    
}

 질럿2 {
    String name : 질럿;
    int attack : 16+2;   
    int hp : 100;
    int shield : 60;    
}

하나하나 고치는 것이 손이가고 효율이 좋지 않으니 아예 질럿의 설계도 값을 공유하도록 바꿔버리는게 static 이다

즉, 포지에서의 공격력 업그레이드 명령을 통해서 찍어내는 질럿 class 의 공격력 값을 공유하게 만드는 것이 static 이다

static 의 경우
객체 생성하지 않고
class.method(); 형태로 호출

class 질럿 {
    String name : 질럿;
    int attack : 16+2;   //  클래스의 값을 바꿔버리면 추후 찍어낼 인스턴스들도 같은 값을 가지게 된다
    int hp : 100;
    int shield : 60;    
}

static 은 클래스의 데이터 값에만 연관있으므로 따로 new를 통해 객체를 생성하지 않아도 된다

즉, static 을 통해서 변수를 바꾸면 해당 클래스의 모든 객체가 같은 변수 값을 갖도록 효율적으로 관리할수있다

static 메소드의 경우 자바 실행과 함께 로딩되어진다. 메인메소드 보다 먼저 로딩된다 는 특징이 있다

댓글