728x90
반응형
클래스변수와 클래스 메소드
클래스 변수
- 어떤 변수든 메소드는 무조건 클래스 안에 존재한다.
- 그러나 만약에 전체 프로그램에서 딱하나를 만들어서 공유해야하는 변수가 있다고 했을때 사용
- 변수나 메소드의 경우 무조건 클래스가 감싸야하는 것이 규칙
static 변수 선언
- 만약 A, B, C 클래스가 있다고 했을 때
- 방법은 좀더 연관성 있는 곳에 자리를 빌려서 들어가면 됨
- static int num;
- 스태틱 변수, 클래스 변수라고 말함
class A{
static int num;
...
}
class B{
...
}
class C{
...
}
- 위와 같을 때, A클래스에 대해서는 자리를 빌려준 대신에 private라고 접근 수준 지시자가 되어 있어도 접근 무조건 가능함
- static은 선언하고 동작시 메모리에 한개만 존재함
생성 시기
- JVM에 인스턴스 생성 되었을때
- 인스턴스 생성 이 아니더라도 클래스이름으로 그 변수를 접근했을때
- jvm이 따로 메모리를 할당하여 변수 0으로 초기화 해서 생성함
규칙
- 대신 접근 수준 지시자의 규칙을 따른다.
- 클래스안에서 private라고 되어 있으면 그 클래스만 사용가능
- public으로 되어있어야 전체 클래스가 사용가능함
클래스 변수의 접근 방법
- 클래스 내부 접근
- static 변수가 선언된 클래스 내에서는 이름만으로 직접 접근 가능
- 클래스 외부 접근
- private로 선언되지 않으면 클래스 외부에서도 접근가능
- 접근 수준 지시자가 허용하는 범위에서 접근가능
- 클래스 또는 인스턴스의 이름을 통해 접근
class AW{
static int num =0;
...
}
class A{
public static void main(String[] args){
//1. 방법
AW aw = new AW();
aw.num++;
//2. 방법
AW.num++;
}
}
- AW.num, 1번 방법이 없고 그니까 인스턴스 생성 없이 저렇게 만 선언해서 실행이되면 메모리에 올라감
클래스 변수의 활용 예
- 인스턴스 별로 가지고 있을 필요가 없는 변수
- 값의 참조가 목적인 변수
- 값의 공유가 목적인 변수
- 그리고 그 값이 외부에서도 참조하는 값이라면 public으로 선언
클래스 메소드
- 클래스 변수와 유사함
class NP{
int num =0;
static int showInt(int n){System.out.println(n);}
static void showDouble(int n){System.out.println(n);}
void show(){showDouble(2.0);}// 내부 접근
}
class Out{
...
NP.showDouble(2);//외부 접근
}
클래스 메소드 정의 옳은 경우
- 단순 기능 제공이 목적이 메소드들
- 인스턴스 변수와 관련 지을 이유가 없는 메소드들은 static으로 선언하는 것이 옳음
static의 또다른 용도
- static 초기화 블록
class Date{
static String date;
...
}
static{
LocalDate nDate = LocalData.now();
date = nDate.toString();
}
- 인스턴스 생성과 관계 없이 static 변수가 메모리 공간에 할당될때 실행
- 이렇게 하면 따로 인스턴스 생성 없이 자동으로 메모리에 추가되고 초기화됨
- staic 변수를 초기화 하기 위해 사용함
728x90
반응형
'CS Study > JAVA' 카테고리의 다른 글
2022-04-23-자바-기초정리1 (0) | 2022.04.24 |
---|---|
2022-04-23-자바의-메모리-모델과-Object-클래스 (0) | 2022.04.24 |
2021.10.03_정보은닉과 캡슐화 (0) | 2021.10.03 |
2021.09.13_자바기초정리1 (0) | 2021.09.14 |
6.# 07-1 클래스와 인스턴스 (0) | 2020.07.20 |
댓글