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 |
댓글