우주코딩
스태틱 변수, 인스턴스 변수, 스태틱 메서드, 인스턴스 메서드 본문
스태틱 변수 (static variables) = 클래스 변수
main 메서드 없이 클래스를 실행시킬수 없다 => main 클래스가 'entry point'이기 때문에
main 메서드가 사용할 로컬 변수는 JVM Stack
메인 메서드가 호출될 때 만들어지고 호출 끝나면 사라진다main 메서드는 Method Area에 로딩된다.
main 메서드에서 메서드를 호출하면 JVM stack에 메서드 호출 frame 이 만들어진다.
호출된 메서드 안에서 static 변수 사용.
최초로 클래스를 [스태틱 멤버(변수, 메서드)를] 사용하는 시점에 클래스가 로딩된다.
클래스가 로딩된 후 즉시 자동으로 스태틱 변수가 Method Area 영역에 생성된다.
클래스가 언로드 될 때 스태틱 변수가 제거된다.
클래스가 언로드 될 때는 JVM이 종료할 때다.
static 변수는 한번 만들어지면 프로그램이 종료될 때 사라진다.Test 클래스가 호출되는 시점에 Test 클래스의 스태틱 변수가 로딩된다.
static 변수는 클래스를 로딩되는 시점에 만들어진다.
특정 인스턴스에 상관없이 공유할 값을 저장할 때 사용
클래스가 로딩될 때 !!!한번만!!! 만들어진다.
논스태틱 변수(non-static variables) = 인스턴스 변수
- 인스턴스 변수는 new 라는 명령을 실행해서 Heap에 만들어진다.
- 가비지가 된 후 가비지 컬렉터에 의해 제거된다.
- 인스턴스 만들려면 클래스 로딩해야하고 클래스 로딩할 때 스태틱이 만들어지니
인스턴스 만들때 이미 스태틱은 만들어진 상태이다! - 힙의 주소값을 담을 레퍼런스 변수가 JVM Stack에 만들어진다
t1 = 레퍼런스 변수Test t1 = new Test();
new Test(); = Heap에 만들어지는 주소값
Calculator c1 = new Calculator();
Calculator 클래스에서 nonstatic 필드를 찾아 Heap에 메모리를 만들어라.
- 인스턴스 변수는 몇개든지 만들 수 있다.
- 스태틱은 딱 한번만 만들 수 있다 ( 클래스 로딩은 한 번만 되니까 )
- 인스턴스 마다 구분해서 관리해야할 데이터를 저장할 때 사용
스태틱 메서드
- 클래스를 통해 사용할 수 있는 메서드
- 자신이 소속된 클래스의 인스턴스는 필요 없다.
- 자신이 소속된 클래스의 스태틱 멤버는 사용할 수 있다.
인스턴스 메서드
- 인스턴스 주소를 가지고 호출하는 메서드
- 그래서 보통 인스턴스 변수를 사용하는 메서드에 대해 인스턴스 메서드로 정의한다.
- 자신이 소속된 클래스의 인스턴스 멤버 (변수, 메서드)를 사용할 수 있다.
- 인스턴스 없이 사용하는 스태틱 멤버도 접근할 수 있다.
- 인스턴스 주소를 담은 레퍼런스를 가리키는 메소드에 내장되어있는 변수 this
- this 는 인스턴스 메서드에만 있다.
메서드를 분류했을 때의 이점
- 소스코드를 유지보수하기 쉬워진다.
- 코드를 재사용할 가능성이 높아진다.
클래스를 이용하여 사용자 정의 데이터 타입을 만들기
- instance 필드를 사용하여 저장할 데이터의 메모리 설계
- static 메서드를 활용하여 인스턴스 변수 다룸.
연산자와 메서드
class Scorer {
String name;
int kor, eng, math, sum;
float average;
static void compute(Score s){
s.sum = s.kor + s.eng + s.math;
s.average = s.sum/3f;
}
}
Score s = new Score();
s.name = "방우주";
s.kor = 100;
s.eng = 90;
s.math = 85;
Score.compute(s);
Score 인스턴스의 변수 값을 다룬다 = Score 타입의 데이터를 다루는 연산자와 같다.
인스턴스를 다루는 메서드를 '연산자'라 표현한다.
클래스안에 생성한 인스턴스 메서드는 새로 정의한 타입의 데이터를 다루는 '연산자'이다
'자바 본 강의' 카테고리의 다른 글
의존 객체, 클래스 간의 관계, 생성자 선언, 패키지의 분류 (0) | 2021.07.26 |
---|---|
스태틱 / 인스턴스 / 로컬 변수, 스태틱 / 인스턴스메서드 (0) | 2021.07.22 |
레퍼런스 리턴하기, 재귀 호출, 메인 메서드와 아규먼트 (0) | 2021.07.16 |
가변 파라미터와 배열 파라미터, 로컬변수와 파라미터, call by value, call by reference (0) | 2021.07.14 |
비트 이동 연산자, 조건문, 반복문 (0) | 2021.07.12 |
Comments