JVM 메모리 영역


- Method Area
-클래스 정보 저장공간
-프로그램 시작 시 모든 파일(.java)의 데이터가 저장 (실행 시점 한번)
-클래스의 메서드 정보, 스태틱 변수등이 저장
-모든 객체가 공유하는 공용 공간
- Stack Area
-메서드 실행 시 사용되는 공간
-선입후출(LIFO)구조
-메서드 실행이 끝나면 스택에서 제거
- Heap Area
-객체가 생성되어 저장되는 공간
-객체의 실제 데이터가 저장되고 데이터의 주소는 stack영역에 저장
- 가비지 컬렉터(Garbage Collector)
-Java의 사용하지 않는 객체를 자동으로 제거하는 기능
래퍼클래스(Wrapper Class)
- 기본자료형을 객체로 감싸는 클래스
- 래퍼클래스를 사용하는 이유
- 기본형은 객체처럼 속성, 기능을 가질 수 없다.
- 객체는 기능을 제공한다.
- 기본형을 감싼 객체를 만들어 편리하게 데이터처리 할 수 있다.
static
- 모든 객체가 함께 사용하는 변수나 메서드 만들 때 사용
- 객체(인스턴스)를 만들지 않아도 클래스 이름만으로 바로 사용 가능
- static 변수와 메서드는 한번만 생성, Method 영역에 저장
ex) 공용 게시판
| 구분 | 클래스 멤버 (static) | 인스턴스 멤버 |
|---|
| 소속 | 클래스 | 객체 |
| 생성 필요 | ❌ 없음 | ✅ 필요 |
| 사용 | Student.변수 | 객체.변수 |
| 특징 | 공유 | 각각 다름 |
final
- 용도
- 변수 : 변경 불가하게 만듦
- 클래스 : 상속할 수 없게 만듦
- 메서드 : 수정할 수 없게 만듦(오버라이딩 불가)
1. 상수
- 변하지 않고 항상 일정한 값을 갖는 수
- Java 에서는 대문자로 표현하는 것이 관례!
- 실행 중 절대 변경되어선 안되므로 static final 키워드 사용
- static으로 선언된 변수는 프로그램 시작 시 한번만 초기화
2. 불편객체 (Immutable Object)
- 내부 상태를 변경할 수 없는 객체
- 속성(프로퍼티, 필드)에 활용
- 세터없이 설게
- 변경이 필요할 경우 새로운 객체 생성
public final class Circle {
public static final double PI = 3.14159;
private final double radius;
public Circle(double radius) {
this.radius = radius;
}
// ✅ 반지름이 다른 새로운 Circle 생성 (불변 객체 유지)
public Circle changeRadius(double newRadius) {
return new Circle(newRadius);
// 생성자 호출: 기존 객체 변경 X, 새 객체 생성
}}
인터페이스(Interface)
-
클래스가 따라야할 최소한의 공통 규칙을 정의
-
설계 표준

public interface Config {
int POPULATION = 100;} // public static final 로 선언됩니다.
- public statuc final 로 선언되기 때문에 구현체 없이 활용 가능~