본문 바로가기
개발자 양성과정 필기노트/JAVA

Static

by jono 2021. 9. 14.

JAVA  ||  DAY7  ||  Static


 # Static 정적 멤버변수 

  • 클래스의 멤버 변수.
  • 클래스가 메모리에 로딩될 때 함께 로딩되는 멤버변수.
  • 인스턴스 생성과 상관없음. -> 인스턴스 생성없이, 클래스명 만으로 접근이 가능하다.
변수 클래스 변수 인스턴스 변수 로컬변수
생성시기 클래스가 메모리에 올라갈 때 인스턴스가 생성될 때 블록 내에서 변수의 선언문이 실행될 때
소멸시기 프로그램이 종료될 때 인스턴스가 소멸할 때 블록을 벗어날 때
저장메모리 메서드 영역 힙 영역 스택 영역
사용 방법 클래스이름.변수이름 인스턴스이름.변수이름 변수이름
  static int a = 10 ; int a = 10 ;  
  • 인스턴스를 새로 생성하더라도 정적 멤버변수는 하나의 메모리공간을 모든 인스턴스에서 공유하므로, 
    하나의 인스턴스에서 값을 변경하면 모든 인스턴스가 변경된 값을 공유하게된다.

 # Static 정적 메서드 

  • 메모리 로딩시점은 정적멤버변수와 동일하다. 호출방법도 동일함
  • 메서드 정의시, 리턴타입 앞에 static 키워드를 붙여서 정의한다.
  • Static 메서드내에서는 레퍼런스 this , 인스턴스 변수사용 불가능!
# 기본문법
public static 리턴타입 메서드명(매개변수){ . . .}
 ex)  public static void methodName( e ) { . . . }

# 정적메서드 사용문법
클래스명.메서드명(매개변수);
  • static 멤버변수라고 하더라도, private접근제한자가 사용된 경우에는 접근이 불가능하다.
    -> Getter / Setter 통해 접근가능하도록 설정하여 접근해야한다.
  • Setter 메서드 생성시 주의해야하는점
    -> static메서드 내에서는 래퍼런스 this 키워드 사용이 불가능하므로, this대신 클래스명 사용해야한다
    class StaticClass1{
    	private static a =10;
        
        public int getA(){
        	return a;
        }
        
        public static void setA(int a){
        	StaticClass1.a = a; // 초기화 레퍼런스로 클래스명을 사용해야한다.
        }
    }​

 # 프로그램 실행 과정 

1. 소스 코드 작성 -  소스 코드 번역하여 클래스파일 생성 - 프로그램 실행 ( == 클래스파일 실행 )

2. 클래스 로딩 -> static 키워드가 붙은 변수 및 메서드가 메모리에 로딩됨

3. main() 메서드 호출

4. 인스턴스생성 (new) -> 인스턴스 멤버변수 및 메서드가 메모리에 로딩됨

5. 인스턴스 내의 메서드 호출 -> 로컬변수가 메모리에 로딩됨

6. 결과 출력 - 프로그램 종료

 

'개발자 양성과정 필기노트 > JAVA' 카테고리의 다른 글

추상클래스와 인터페이스  (0) 2021.09.28
싱글톤 디자인 패턴 / final / 상수  (0) 2021.09.14
JAVA 객체지향개념  (0) 2021.09.02
배열  (0) 2021.08.12
While문  (0) 2021.08.10

댓글