JAVAIARY

Static에 대하여 본문

lectureNote/JAVA

Static에 대하여

shiherlis 2022. 9. 12. 22:06

1. 스태틱(static)
    1) static변수, static 메서드는 메서드 영역에 저장되며,
       프로그램 시작 전에 로드되고(이미 메모리에 올라가 있고)
       프로그램 종료 시 소멸됨.
    2) 코드가 메서드 영역에 다 로딩되면 
       그 중에서 static으로 지정된 변수와 메서드는 메서드 영역 내 스태틱 영역으로 옮겨짐.

2. static 변수
    1) 여러 인스턴스에서 공통으로 사용하는 변수가 필요한 경우
        - 여러 인스턴스가 공유하는 기준 값이 필요한 경우(중복방지)
            - 학생마다 새로운 학번 생성
            - 카드회사에서 카드 새로 발급할 때마다 새로운 카드 번호를 부여
            - 회사에 사원이 입사할 때 마다 새로운 사번이 필요한 경우
    2) 어떤 객체에서도 접근해서 사용할 수 있음
        - 전역(global) 변수
        - 클래스 변수, 정적 변수(<--> 인스턴스 변수)
        - 인스턴스 생성과 무관하게 사용 가능하므로 클래스이름으로 직접 참조 가능(권장).
    
    3) - static 변수는 프로그램이 메모리에 있는 동안
         계속 그 영역을 차지하므로 너무 큰 메모리를 할당하는 것은 지양해야 함.
       - 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋음.
            - 멤버 변수가 너무 많으면 인스턴스 생성시 쓸데없는 메모리가 할당됨.
       - 상황에 적절하게 변수를 사용해야 함.

3. 프로그램에서 변수의 유형

변수 유형 선언 위치 사용범위 메모리 생성과 소멸
(life cycle)
지역 변수
 (로컬 변수)
메서드 내부 메서드 내부 ONLY stack 메서드 호출시
메서드 종료시
멤버 변수
(인스턴스 변수)
클래스 내부 클래스 내부에서 사용
private이 아니면 참조변수로 
다른 클래스에서 사용 가능
heap 인스턴스 생성시
가비지 컬렉터(GC)가 메모리 수거시
static 변수
(클래스 변수) 
클래스 내부 클래스 내부에서 사용
private이 아니면 참조변수로 
다른 클래스에서 사용 가능
method area 프로그램 시작할 때 
상수와 함께 생성(메서드영역)
실행 종료후 메모리 해제시 소멸

4.Static 메서드

      - 클래스이름.메서드이름() 으로 호출

      - 클래스 변수 사용 가능. 인스턴스 변수 사용 불가

                          ( * 인스턴스 변수는 객체생성 후 호출 가능한데, 스태틱메서드는 객체를 생성하지 않기 때문)

      - 인스턴스 메서드 호출 불가 (인스턴스메서드는 인스턴스 변수가 있어야 하기 때문)

static staticMethod(){
	instanceMethod(){};		// 불가능 : 스태틱 메서드가 인스턴스 메서드를 불러올 수 없음
	staticMethod1(){};		// 가능
}

vs 인스턴스 메서드

      - 변수를 생성해 준 후, 참조변수.메서드이름() 으로 호출

      - 인스턴스 변수, 클래스 변수 사용 가능

static instanceMethod(){
	instanceMethod1(){};		// 가능
	staticMethod(){};		// 가능
}

5. static의 활용

  1) 인스턴스 변수가 아닌 클래스변수에 static을 붙인다.

       - 선언 해 놓고 클래스 전역에서 사용 가능하도록 하기 위함

  2) 인스턴스 멤버를 사용하지 않는 메서드(직접 매개변수를 받아서 사용하는 메서드)

 

 

'lectureNote > JAVA' 카테고리의 다른 글

자바 기본  (0) 2023.02.10
JAVA ) Char 와 String 의 비교연산  (0) 2023.01.23
자주 쓰는 메서드 - 5주차  (0) 2022.09.09
Map컬렉션  (0) 2022.09.09
자주찾는 메서드-4주차  (0) 2022.09.03