관리 메뉴

자바(JAVA) static 키워드 본문

Java/Java 기본 개념

자바(JAVA) static 키워드

ª_ª 2016. 12. 8. 10:04
728x90
반응형

static 키워드란?

우리는 필요할 때 클래스를 만들고, 사용할 때는 생성자를 통해서 객체를 만들어서 사용합니다. 이러한 방식으로 모든 것을 처리하게 되는데, 문제가 생길 때가 있습니다.

예를 들어서, 자판기와 3명의 사람들이 있습니다.

3명의 사람들은 자판기에 콜라가 2개 들어있는 것을 알고 있습니다.


첫 번째 사람이 먼저 자판기 객체를 생성해서 콜라를 뽑았습니다.

두 번째 사람이 자판기 객체를 생성해서 콜라를 뽑았습니다.

세 번째 사람이 자판기 객체를 생성해서 콜라를 뽑았습니다.

여기까지 보면, 뭔가 이상해 집니다. 분명 자판기는 한 개가 존재하는데, 


사람들이 모두 자판기를 생성해서 콜라를 받았습니다. 자판기에는 콜라가 2개밖에 없는데 사람들이 콜라를 하나씩 가지고 있습니다. 이런 것을 버그라고 부릅니다.


이런 상황을 해결하려면 어떤 방법을 써야할까요?

자판기 객체가 3명의 사람들에게 모두 공유 되면 됩니다.

첫 번째 사람이 콜라를 뽑고, 두 번째 사람이 콜라를 뽑으면, 세 번째 사람은 콜라를 뽑을 수 없습니다.


그러면 어떤식으로 자판기의 정보를 공유 할 수 있을까요?

static 키워드를 사용하면 됩니다.


사용 방법

public static int coke;

(지정자) (static) (자료형) (변수명)


자판기 클래스 

static키워드를 사용해서 coke(콜라)라는 변수를 만들었고 2로 초기화 하였습니다.


첫번째 사람의 클래스

원래 클래스에 접근하기 위해서는 클래스명 변수명 = new 클래스명() 이렇게 사용을 해야되는데 여기서는 바로 접근이 가능하게 됩니다. static은 전역이라고 생각하시면 됩니다. 어디에서 접근하든 그 상태를 유지할 수 있기 때문에 저렇게 접근도 가능합니다.


메인 클래스

각자 사람들을 클래스로 나눈다음에 한명씩 접근해서 콜라를 받아옵니다.

그러면 3번째 사람은 콜라를 받을 수 없게됩니다.

이렇게 결과물이 나오게 됩니다.


static을 사용할 때 주의할 점

static은 확실히 좋은 키워드입니다 하지만 잘못 쓰면 화를 불러올 수도 있습니다. 

자바의 메모리구조에 대해서 설명하면 클래스 자체로는 메모리에 상주하지 않습니다. 하지만 객체를 생성하게 되면 메모리에 상주하게 됩니다. 하지만 static은 사용하지 않아도 메모리에 상주하게 됩니다. 지금예제로는 물론 메모리에 관련되서 별 상관은 없지만 엄청나게 많은 static변수를 사용하게 되면 메모리에 부하가 올 수 있으니 주의해서 사용하시면 됩니다.


static.zip

728x90
반응형
Comments