📝느낀 점
이번 글을 정리하면서, JVM인 Runtime Data Area에 대해서 자세히 알게 되었다. 그 글은, 나중에 한번 정리해서 다시 올리도록 하겠다. 이번 글은 변수들이 각각 JVM에 어디 로드 되는지에 대한 초점으로 설명 한다. 전체적으로 JVM에 대한 이해도가 높아졌다는 생각이 들고 좀 더 자세히 알고 싶어 졌다는 생각이랄까? 공부하는 동기부여가 되었다는 생각이다. "알아 가는게 재밌다는 말이 이런말일까..?" 내가 쓰는 프로그램 언어가, 앞으로도 계속 쓰게 될 언어가 이런식으로 돌아가는구나 하며 재밌게 공부하였던 것 같다. 각각의 영역에는 전부 특징들이 있었으며, 그냥 생긴건 없다는 생각이 들었다 ... 그리고 예전부터 좀 헷갈렸던 클래스와 객체의 차이! 이부분에 대해서도 이번에 확실히 정리할 수 있어서 좋았다. 클래스는 객체를 만들기 위한 수단일뿐! 혹은 설계도 라고 표현 할수 있을 것이고, 객체는 자신의 고유 번호? 고유 이름과 상태와 행동을 갖는다.
변수들은 JVM에서 어디에 할당 되나요?
변수의 종류
- 클래스 변수
- 인스턴스 변수
- 매개 변수
- 지역 변수
클래스 변수
정적 변수는 클래스의 인스턴스가 아닌 클래스 자체에 속하는 변수이다.
이러한 변수는 클래스가 로드될 때 메타스페이스 영역에 할당된다.
메타스페이스 영역은 JVM의 메모리 영역 중 하나로, 클래스 정보,
메소드 정보, 정적 변수 및 상수 풀과 같은 수준의 데이터를 저장하는 곳이다.
인스턴스 변수
인스턴스 변수는 클래스의 각 인스턴스(객체)에 속하는 변수이며, 힙 영역에 저장된다.
객체 인스턴스가 동적으로 할당되고 소멸되는 곳이다.
객체가 생성될 때 인스턴스 변수의 메모리가 할당된다.
각 객체는 고유한 인스턴스 변수 값을 가지는 이유는 객체의 상태를 나타내기 위해서이다.
매개 변수 변수
매개 변수는 메서드에서 사용되는 변수로, 해당 메서드가 호출될 때 전달될때 설정된다.
매개 변수는 메서드의 스코프 내에서만 존재하며, JVM에서는 스택 영역에 저장 된다.
메서드가 실행을 마치면 해당 스택 프레임은 제거되어 매개 변수도 소멸 된다.
지역 변수
지역 변수는 메서드 내에서 선언되고 사용되는 변수로, 해당 지역 범위 내에서만 유효하다
지역 변수는 JVM에서 스택 영역에 저장된다. 각 메서드 호출에 대한 스택 프레임이 스택에 생성되며,
해당 프레임에는 메서드의 지역 변수와 매개 변수가 저장된다. 지역 변수는 해당 메서드나 블록의 스코프 내에서 사용되며,
실행이 완료되면 해당 스택 프레임과 지역 변수가 스택에서 제거된다.
클래스와 객체
클래스는 객체를 만들어내기 위한 설계도 혹은 틀 이라고 할 수 있고, 객체를 생성하는데 사용 된다.
객체는 설계도(클래스)를 기반으로 생성되며, 자신의 고유 이름과 상태, 행동을 갖는다.
여기서 상태는 필드(fields), 행동은 메소드(Method)라고 표현한다.
객체에 메모리가 할당되어 실제로 활용되는 실체는 '인스턴스'라고 부릅니다.
- 클래스의 정의 : 클래스란 객체를 정의해 놓은 것이다.
- 클래스의 용도 : 클래스는 객체를 생성하는데 사용된다.
- 객체의 정의: 실제로 존재하는 것, 사물 또는 개념
- 객체의 용도: 객체가 가지고 있는 기능과 속성에 따라 다름
정리
- 객체(Object)란 자신 고유의 속성을 가지는 유형의 객체, 추상적인 모든 대상.
- 클래스(Class)란 객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도이다.
- 이를 통해 생성된 객체 하나하나를 인스턴스(Instance)라고 부른다.
- 대체로 객체와 인스턴스는 혼용해서 표현한다.
Reference :
자바의 정석(저자: 남궁성)
'Java' 카테고리의 다른 글
추상클래스와 인터페이스의 용도를 나눈 이유는 무엇인가요? (0) | 2023.11.06 |
---|---|
오버로딩, 오버라이딩 설명 (0) | 2023.11.06 |
클래스와 메소드의 사용 이유는 무엇인가요? (0) | 2023.11.06 |
char타입은 정수인가요? (0) | 2023.11.06 |
String 객체를 생성하는 방법과 내부 동작 원리 (String Pool) (0) | 2023.11.06 |