선언위치에 따른 변수의 종류
- 클래스 변수
- 인스턴스 변수
- 지역 변수
인스턴스 변수는 인스턴스가 생서될 때 마다 생성되어 클래스 내부 값들이 각각 다른 값을 유지할 수 있지만, 클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다.
메서드
메서드란
특정 작업을 수행하는 것들을 하나로 묶은 것
메서드를 사용하는 이유
높은 재사용성
- 메서드를 정의해 놓으면 반복해서 사용 가능하다.
중복된 코드 제거
- 반복해서 적는 코드를 묶어서 메서드로 정의해 놓으면 메서드를 호출해서 반복된 코드를 하나의 메서드로 대체할 수 있다.
프로그램 구조화
- 작성하는 코드들을 작업단위로 나누어 여러개의 메서드에 담아서 프로그램의 구조를 단순화시킬 수 있다.
클래스 메서드(static 메서드)와 인스턴스 메서드
인스턴스 메서드
메서드의 작업을 수행하는데 있어서 인스턴스를 필요로 한다.
클래스 메서드
인스턴스없이 바로 사용할 수 있다.
JVM 메모리 공간
메서드 영역(method area)
- JVM은 해당 클래스 파일(*.class)을 읽어 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다
- 스태틱 정보를 먼저 읽고 메모리에 올린다
- Main 메서드가 종료될 때 Method 메모리 공간이 모두 사라진다
호출스택 (Call Stack)
- 메서드 작업에 필요한 메모리 공간을 제공하는 역할
- 메서드가 호출될 때, 호출에 대한 메모리가 할당되며 메서드가 작업을 수행하는 동안 지역변수들의 연산과 결과 등을 저장한다
- 메서드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 비워진다
- 제일 먼저 main 메서드를 찾는다
- Stack 자료구조이기 때문에 메모리 할당과 제거 순서는 후입선출이다.
호출 스택의 변화
힙(Heap)
- 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다
- Main 메서드가 종료될 때 Heap 메모리 공간이 모두 사라진다