반응형

자바 변수의 종류

변수는 크게 네 종류로 변수의 선언된 위치에 따라서 클래스변수, 인스턴스변수, 지역변수, 매개변수로 나뉜다.

public class Main {
	public static void main(String[] args) { // 매개변수
    	int num = 0; // 지역변수
    }
}

public class Page {

	private int state = 0; // 인스턴스 변수
    public static int page = 10; // 클래스 변수
    public int get() {
    	return state;
    }
}
변수명 선언위치 설명 저장 메모리
클래스 변수
(class variable)
= static 변수
클래스 영역 클래스 영역에서 타입 앞에 static이 붙는 변
객체를 공유하는 변수로 여러 객체에서 공통으로 사용하고 싶을 때 정의
Method
인스턴스 변수
(instance variable)
클래스 영역에서 static이 아닌 변수
개별적인 저장 공간으로 객체/인스턴스마다 다른 값 저장 가능

* 객체/인스턴스 생성만하고 참조 변수가 없는 경우 가비지 컬렉터에 의해 자동 제거됨
Heap
지역 변수
(local variable)
메서드 영역 메서드 내에서 선언되고 메서드 수행이 끝나면 소멸되는 변수
초기값을 지정한 후 사용할 수 있음
Stack
매개 변수
(parameter)
메서드 호출 시 '전달하는 값'을 가지고 있는 인수
(지역 변수처럼 선언된 곳부터 수행이 끝날 때까지 유효함)

 

자바의 메모리 영역

자바 프로그램을 실행하게되면, JVM은 OS로 부터 메모리를 할당 받고 Method, Stack, Heap 각 세 영역에 맞춰서 할당하게 된다.

 - 메소드 (Method) 영역 : 전역변수와 static 변수를 저장하며, Method 영역은 프로그램의 시작부터 종료까지 메모리에 남아있음

 - 스택 (Stack) 영역 : 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제. LIFO (Last In First Out) 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워짐

 - 힙 (Heap) 영역 : new 키워드로 생성되는 객체 (인스턴스), 배열 등이 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리

 - PC Register : JVM이 실행하고 잇는 현재 위치를 저장하며, 스레드가 생성되면서 생기는 공간

 - Native Method Stack : Java가 아닌 다른 언어로 구성된 메소드 실행이 필요할 때 사용되는 공간

 

자바의 각 메모리 영역이 할당되는 시점?

 - Method : JVM 동작 후 클래스가 로딩 될 때 생성

 - Stack : 메소드가 호출될 때 할당

 - Heap : 런타임시 할당

 

원시 타입 vs 참조 타입의 메모리 영역

원시 타입 : Stack에 값이 그대로 저장되는 타입 / 참조가 없어서, 빠르게 값에 접근 가능

참조 타입 : Stack에 Heap의 어딘가를 가리키는 주소가 저장

 

반응형

'개발새발 > Java' 카테고리의 다른 글

인터페이스 vs 추상클래스  (0) 2024.05.26
반응형

인터페이스 vs 추상클래스 비교

인터페이스 (implements) : 인터페이스에 정의된 메서드를 각 클래스 목적에 맞게 기능을 구현

추상클래스 (extends) : 자신의 기능들을 하위 클래스로 확장

  추상 클래스 인터페이스
사용 키워드 abstract interface
사용 가능 변수 제한 없음 static final (상수)
사용 가능 접근 제어자 제한 없음 (public, private, protected, default) public
사용 가능 메소드 제한 없음 abstract method, default method, static method, private method
상속 키워드 extends implements
다중 상속 가능 여부 불가능 가능 (클래스에 다중 구현, 인터페이스 끼리 다중 상속)
공통점 1. 추상 메소드를 가지고 있어야한다.
2. 인스턴스화 할 수 없다. (new 생성자 사용 x)
3. 인터페이스 혹은 추상 클래스를 상속받아 구현한 구현체의 인스턴스를 사용해야 한다.
4. 인터페이스와 추상클래스를 구현, 상속한 클래스는 추상 메소드를 반드시 구현하여야한다.

 

사용 시기 및 목적

추상클래스 : 상속 관계 시, 부모나 조상클래스를 상속하는데 기능까지 같은 경우 추상클래스 사용

                     (상속, 확장하여 사용)

인터페이스 : 상속 관계 시, 부모나 조상클래스를 상속하는데 다른 기능이 필요할 경우 인터페이스 사용

                     (동일한 사용방법과 동작을 보장하기 위해 사용)

반응형

'개발새발 > Java' 카테고리의 다른 글

Java의 메모리 영역  (0) 2024.05.26

+ Recent posts