객체의 생성과 활용

jisoo·2022년 7월 11일
0

객체

목록 보기
1/1
post-thumbnail

객체 생성 시 메모리 구조


클래스명 참조_변수명 = new 생성자();
ex) Person p = new Person();
  • new 키워드와 생성자를 통해 클래스의 객체를 생성한다는 것은 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것과 같다.

  • 클래스 Person 과 참조 변수 p 는 각각 클래스 영역과 스택 영역이라는 다른 위치에 저장된다.

  • 생성자로 만들어진 인스턴스는 힙 메모리 영역에 들어가고 객체 내부에는 클래스의 멤버들이 위치한다.

  • 참조변수는 객체의 실제값이 아닌 힙에 저장되어 있는 주소값을 가리키게 된다.




필드와(field) 메서드(method)

자바에서 변수는 크게 클래스 변수 (cv, class variable), 인스턴스 변수(iv, instatnce varuable), 그리고 지역변수(lv, local variable) 세가지로 구분된다

  • 필드라고 부르는 클래스 변수, 인스턴스 변수는 static 키워드의 유무로 구분된다.

    • static 키워드가 함께 선언된 변수는 클래스 변수
    • 그렇지 않은 것은 인스턴스 변수 이다.
    • 이 두 유형에 포함되지 않고 메서드 내에 포함된 모든 변수를 지역변수라고 부른다.

  • 인스턴스 변수(iv)는 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자() 를 통해 인스턴스가 생성될 때 만들어진다.

    • 클래스를 통해 만들어진 인스턴스힙 메모리의 독립적인 공간에 저장되고, 동일한 클래스로부터 생성되었지만 객체의 고유한 개별성을 가진다.
  • 클래스 변수(cv)는 독립적인 저장 공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유한다.

    • 한 클래스로부터 생성되는 모든 인스턴스 들이 특정한 값을 공유해야하는 경우에 주로 static 키워드를 사용하여 클래스 변수를 선언하게 된다.
  • 지역변수(lv)는 메서드 내에 선언되며 메서드 내({}블록)에서만 사용가능한 변수이다.

    • 멤버 변수와 다르게 지역변수는 스택 메모리 에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸되어 사용할 수 없게 된다.

  • 힙 메모리 에 저장되는 필드 변수는 객체가 없어지지 않는 한 절대로 삭제되지 않는 반면, 스택 메모리에 저장되는 지역변수는 한동안 사용되지 않는 경우 가상 머신에 의해 자동 삭제 된다.

  • 힙 메모리에는 빈 공간이 저장될 수 없기 때문에 이곳에 저장되는 필드는 강제로 초기화되지만, 스택 메모리 는 강제로 초기화되지 않으므로 지역 변수 는 선언시 반드시 초기화 해주어야 한다.

profile
Backend Developer 👩🏻‍💻

0개의 댓글