▼정답
클래스 변수 / 공유 변수 / 정적 변수
▼정답
1) method area
호출된 클래스(틀)의 메모리 생성, 그 안에 데이터 멤버 중 static 변수, static함수의 정보(값이 들어 있음)
2) call stack
메인함수 안에 생성되는 객체(메모리 주소를 가리킴)와 호출되는 함수들
순차적으로 생성 되었다가 사용이 끝나면 사용이 끝나는 순서로(생성된 순서와 반대 순서) 삭제됨
3) heap
객체의 인스턴스 변수와 메소드 정보, static 변수를 포함하고 있는 클래스의 주소 정보 (동일한 클래스의 객체이고, static 변수가 있다면 static 변수 정보는 공유: 같은 주소 공유
▼정답
static 키워드를 변수 앞에 붙이면 static 변수 라고 한다.
[클래스 내부 접근]
static 변수가 선언된 클래스 내에서는 이름만으로 직접 접근 가능
[클래스 외부 접근]
- private 으로 선언되지 않으면 클래스 외부에서도 접근 가능
- 접근 수준 지시자가 허용하는 범위에서 접근 가능
- 클래스 또는 인스턴스의 이름을 통해** 접근
AccessWay.num++; 처럼 클래스 이름으로 접근하면 static변수에 접근한다는 것을 문장만 보고도 알 수 있다.(클래스 이름은 첫 문자 대문자이기 때문에)
그래서 인스턴스 이름으로 static변수에 접근하는 것 보다는 클래스 이름으로 접근하는 것이 더 좋은 방법이다.
▼정답
공유변수기 때문에 공유가 중요하다!! (ex : Math.PI)
인스턴스 별로 가지고 있을 필요가 없는 변수 → static 변수 선언이 좋다.
-값의 참조가 목적인 변수
-값의 공유가 목적인 변수
그리고 그 값이 외부에서도 참조하는 값이라면 public으로 선언한다.
static 붙이면 클래스에 속하는게 아님 (클래스에서 자리만 빌려 옴)
▼정답
단순 기능 제공이 목적인 메소드들, 인스턴스 변수와 관련 지을 이유가 없는 메소드들은
static으로 선언하는 것이 옳다.
▼정답
메모리에 올라가는 순서가 다르기 때문
인스턴스 변수 = new 했을 때 메모리에 올라감
static = 변수 선언 때 메모리에 올라감
단순 기능 제공이 목적인 메소드들, 인스턴스 변수와 관련
지을 이유가 없는 메소드들은 static으로 선언하는 것이 옳다.
▼정답
인스턴스 함수는 static, 인스턴스 변수 모두 사용할 수 있는데,
static변수가 메모리에 먼저 올라와 있기 때문에 호출할 수 있는 것이다.