본문 바로가기
Programming/Java

메모리 모델과 Object 클래스

by Tarake 2024. 8. 8.

메모리 모델


가상머신은 메모리 공간을 크게 3가지 영역으로 나뉩니다.

  • 메소드 영역(Method Area)
  • 스택 영역 (Stack Area)
  • 힙 영역 (Heap Area)

메소드 영역(Method Area)


  • 인스턴스 생성 및 클래스 변수의 접근을 위해서 메모리 공간에 올려지는데 올려지는 메모리 공간을 메소드영역이라고 합니다.
  • 모든 클래스 데이터, 메소드 정보 및 상수 등이 여기 저장되어 프로그램이 실행될 때 필요에 따라 사용됩니다.

 

스택 영역 (Stack Area)


  • 각 스레드별로 메소드 호출 시마다 스택 프레임이 생성됩니다. 스택 프레임에는 지역 변수, 매개변수, 중간 결과 등이 포함됩니다.
  • 메소드 실행과 관련된 데이터를 관리하며, 메드 호출이 끝나면 스택 프레임은 제거됩니다.

 

힙 영역(Heap Area)


  • 모든 객체와 그 객체가 포함하는 인스턴스 변수들이 저장됩니다.
  • 객체가 생성되는 공간으로, 런타임 시 동적으로 메모리를 할당받습니다.
  • JVM의 가비지 컬렉터가 사용되지 않는 객체를 자동으로 제거하여 메모리 누수를 방지합니다.

 

가비지 컬렉션(Garbage Collection)


String str = new String("Hello");

str = null;    // 참조 관계 소멸

str에 nulll을 대입하여 참조하고 있던 String 인스턴스는 어떤 참조변수도 참조하지 않는 상태가 되어 인스턴스를 더 이상 접근할 수 없게 되었습니다. 이러한 인스턴스는 메모리를 차지하기 때문에 가상머신에 의해 소멸됩니다. 이런 방식을 가비지 컬렉션이라고 합니다. 가비지 컬렉션은 바로 동작하는 것이 아닌 별도의 실행 타이밍이 존재합니다.

 

 

Object 클래스


자바의 Object 클래스는 자바의 모든 클래스의 슈퍼 클래스로 클래스가 상속받는 클래스를 명시하지 않으면 자동으로 Object 클래스를 상속합니다. Object 클래스는 자바에서 상속 구조의 루트로서, 모든 자바 객체에 대해 공통적으로 제공해야 하는 기본적인 메소드를 정의하고 있습니다.

 

Object 클래스의 주요 메소드


toString()

@Override
public String toString() {
    return // 사용자가 반환하고 싶은 내용
}
  • 설명: 객체의 문자열 표현을 반환합니다. 기본 구현은 객체의 클래스 이름과 해시 코드를 포함한 문자열을 반환합니다.
  • 용도: 객체의 정보를 쉽게 출력할 수 있도록, 일반적으로 각 클래스에서 toString() 메드를 오버라이드하여 객체의 의미 있는 정보를 반환하도록 구현합니다.

equals (Object obj)

String str = new String("Hello");
if(str.equals("Hello") {
    // 참인 경우
}
  • 설명: 두 객체가 동일한지를 비교합니다. 기본 구현은 두 객체의 참조 주소를 비교하여 동일한 객체인지 확인합니다.

clone()

@Override
protected Object clone() throws CloneNotSupportedException {
    return super.clone();
}
  • 설명: 객체의 복제본을 생성하여 반환합니다. Cloneable 인터페이스를 구현한 객체에 대해 사용 가능합니다.
  • 용도: 객체의 얕은 복제를 수행할 수 있도록 합니다. 깊은 복제는 수동으로 구현해야 합니다.

 

이외에도 다양한 Object 클래스의 메소드들이 존재합니다.

'Programming > Java' 카테고리의 다른 글

StringTokenizer 클래스  (0) 2024.08.09
래퍼 클래스  (0) 2024.08.09
인터페이스와 추상 클래스  (0) 2024.08.07
자바 예외처리  (0) 2024.08.06
상속  (0) 2024.08.06