https://www.youtube.com/channel/UC1IsspG2U_SYK8tZoRsyvfg
유튜브 남궁성의 정석코드 채널
'자바의 정석 - 기초편'을 보고 메모한 것임을 알려드립니다.
*선언위치에 따른 변수의 종류
선언위치에 따라서 종류가 3가지로 나뉜다
1.인스턴스 변수(instance variable, iv)
2.클래스 변수(static변수, 공유변수, cv)
3.지역변수(Local Variable, lv)
class Variables {
//클래스 영역
int iv; => 인스턴스 변수
static int cv; => 클래스 변수(static변수, 공유변수)
//메소드 영역
void method() {
int lv = 0; => 지역변수
}
}
영역은 2가지로 나뉜다
1.클래스영역 : 인스턴스 변수(iv), 클래스 변수(cv)
2.메소드 영역 : 지역 변수(lv)
-클래스 영역에는 선언문만 가능하다.
-System.out.println(), y=x+3 사용 불가능
*변수의 선언위치와 생성시기
1.클래스 변수 : 클래스 영역에 선언, 클래스가 메모리에 올라갈 때 생성됨
2.*인스턴스 변수 : 클래스 영역에 선언, 인스턴스가 생성되었을 때 생성됨(중요!)
3.지역변수 : 클래스 영역 이외의 영역(메소드 생성자, 초기화 블럭 내부), 변수 선언문이 수행되었을 때 생성됨
class Time {
int hour;
int minute;
int second;
}
class Time에 속해 있는 int형 hour, minute, second는 클래스 영역에 선언되어 있으며
종류는 인스턴스 변수(iv)이다. 그렇다면 이 변수들은 언제 만들어질까?
바로 객체를 생성했을때 만들어진다.
객체는 쉽게 생각하면 인스턴스 변수(iv)들을 묶어놓은 것이라 볼 수 있다.
클래스가 Time.class 라고 가정한다면 class 파일은 저장장치(HDD,SSD)에 들어있을 것이다.
CPU가 저장장치에 있는 Time.class를 가져오려고 한다면 '속도차이' 때문에 불가능 할 것이다.
그래서 중간에 둔 것이 메모리(RAM)이다. 그렇다면 CPU가 파일을 읽으려면 어떻게 해야될까?
저장장치(HDD,SSD)에 있는 파일을 메모리(RAM)에 올리는데 이것을 '로딩' 혹은 '메모리에 올린다' 라고 한다.
메모리에 로딩을 해야지만 CPU가 읽을 수 있는 것이다.
CPU는 모든 작업을 RAM 하고만 한다고 볼 수 있다.
메모리에서 작업한 내용을 저장(끝내기)하여 다시 디스크에 쓰는것을 '세이브' 라고 한다.
정리 : 저장장치에 있는 Time.class를 CPU가 읽기 위해서 저장장치가 RAM에 Time.class를 '로딩' 시켜야하는데,
왜 RAM에 로딩을 시키냐면 CPU와 저장장치의 속도차이 때문이다.(CPU가 훨씬 빠르기 때문)
메모리에서 작업한 내용을 저장하기 위해 다시 디스크에 쓰는것을 '세이브' 라고 한다.
CPU는 모든 작업을 RAM과 작업한다.
클래스 변수(cv)와 인스턴스 변수(iv)의 차이점?
클래스 변수는 클래스가 메모리에 올라갈 때 '자동' 으로 만들어진다.
인스턴스 변수는 객체(인스턴스)가 생성되어야 만들어진다.
따라서, 클래스 변수는 객체를 생성할 필요가 없다! 자동으로 만들어지기 때문!
인스턴스 변수는 객체 생성이 필요하다!
자바의 정석 요약집 참고
자료 출처 : 자바의 정석 요약집
(https://github.com/castello/javajungsuk_basic/blob/master/javajungsuk_basic_%EC%9A%94%EC%95%BD%EC%A7%91.pdf)