아무거나

static 본문

Java/Java

static

전봉근 2019. 7. 4. 11:28
반응형

[static]

필요에 의해 클래스를 만들고, 사용할 때는 생성자를 통해 객체로 만들어서 사용합니다.

하지만 예를 들어 집안에 엄마 아빠와 세 쌍둥이가 있는데 아빠 지갑에 100원짜리 2개가 있다고 알고 있는 경우

세 쌍둥이가 100원씩 객체를 만들어 받았다고하면 총 -300원이다 그러면 버그이지만 해결하기 위해선

아빠지갑이 모든 아이들에게 공유 되어야한다. 그러기 위해선 static 키워드를 사용하면 된다.

즉, static = 공유 라고 생각하면 된다.

 

1. 선언 방법

   - public static int MONEY = 200; 

     PapaPouch.MONEY = ... ;

 

2. 객체를 생성하지 않고 바로 접근이 가능하다.

   - 클래스명.static명

 

3. static은 클래스 변수이다. 즉, 객체를 생성하지 않고 클래스 자체에 있는 변수를 바로 사용한다.

 

4. static이 붙은 변수는 객체 변수가 아닌 클래스 변수로써 객체가 생성되기 전에 이미 존재한다.

 

5. 메모리 관련

   - 데이터 영역 : 클래스 들이 모여 있음(new연산자를 이용해서 생성자를 호출해서 객체를 만들기 전 영역 -> 가비지 콜렉터 관리x)

   - Heap 영역 : 객체들이 모여 있음. (new로 객체를 만들면 그것들이 heap영역에 있음 -> 가비지 콜렉터 관리 o)

 

6. static의 장점과 단점

   - static 키워드를 사용한 변수는 객체생성과는 상관없이 클래스와 함꼐 존재하게됨 

     -> 즉 메모리에 상주하게 된다. (생성을 하지 않고도 존재함으로 그만큼 메모리(=heap)를 사용하지 않아도 됨)

     객체를 생성하지 않고도 사용하는건 큰 장점이지만 한편으로 생각해보면 가비지 콜렉터의 관리 밖에 있기 떄문에 항상 메모리에 상주

     해 있으며 즉 프로젝트가 커지고, 시스템이 오래 돌아가면 시스템 운영속도가 점차 느려지다 급기야 큰 재앙이 올 수도 있다.

     -> static 변수로 사용되는 대표적인 예는 아마도 상수일 것이다. 만약 프로그래밍을 하다가 원주율과 같이빈번이 사용되어야 한다면

     이러한 값은 상수로 정의해 놓고 사용하는 편이 좋다. ex) 원주율은 3.1415926... 끝이 없어서 정의를 안해놓으면 팀원들마다

     자리수를 다르게 사용할수도 있기 때문이다. 하지만 인위적으로 값을 넣을경우 처음에 정의와 다르게 사용할수도 있다. 

     그땐 final 키워드를 사용하자. ex) public static final double PI = 3.140; // 더 이상 이 값은 변경되지 않게 한다.​ 

반응형

'Java > Java' 카테고리의 다른 글

super 키워드  (0) 2019.07.04
오버라이드  (0) 2019.07.04
접근 제어자  (0) 2019.07.04
패키지의 일반적인 설계방식  (0) 2019.07.04
java this 키워드  (0) 2019.06.28
Comments