인스턴스 생성과 힙메모리

Heejeong Choi·2021년 9월 17일
0

Java의 정석 기초편

목록 보기
14/19
이전에 살펴보았던 인스턴스와 함께 힙 메모리를 알아볼 포스팅입니다.

자 여기 User 클래스와 메인 메서드를 갖고있는 UserTest 클래스가 있습니다. 이 UserTest의 프로그램을 돌렸을 때, 나오는 값은 어떻게 될까?

public class UserTest {
    public static void main(String[] args) {
        User userEx1 = new User();
        userEx1.userName = "brandi";
        userEx1.userEmail = "brandi@gmail.com";

        userEx1.showUserInfo();

        User userEx2 = new User();
        userEx2.userName = "yolanda";
        userEx2.userEmail = "yolanda@gmail.com";

        userEx2.showUserInfo();

        System.out.println(userEx1);
        System.out.println(userEx2);
    }
}
public class User {
    public String userName;
    public String userEmail;

    public void showUserInfo() {
        System.out.println(userName + "," + userEmail);
    }
}

인스턴스(instance)는 클래스는 이 인스턴스의 속성과 기능을 구현해 많들어 둔 코드이다. 이렇게 실제 클래스 기반으로 생성된 객체(인스턴스)들은 각각 다른 멤버 변수 값을 갖게 된다! 즉, 사용자 클래스에서 생성된 각각 인스턴스들은 각각 다른 이름과 이메일을 갖게된다는 의미이다.

근데 이게 어떻게 이렇게 가능한걸까?

그 이유는 바로 이렇게 생성된 인스턴스들이 동적 메모리(heap memory)에 할당되기 때문!!! 자바에서는 GC가 주기적으로 사용하지 않는 메모리들을 청소해주기 때문에 프로그래머가 수거하지 않아도 되지만, C나 C++ 같은 언어에서는 사용한 동적 메모리를 프로그래머가 일일이 해제 시켜야 한다. 그.래.서 자바 개발자로서 GC를 모르면 안된다는 뜻임😢

그렇게 저 위 코드를 돌리면 나오는 결과는 아래와 같다. 그 이유는, 하나의 클래스로부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 갖게 되기 때문이다!

동일한 클래스로 나왔지만 각기다른 인스턴스(객체)이기 때문에 userEx1은 @6e8cf4c6이라는 할당된 주소를 갖고, userEx2는 @12edcd21이라는 할당된 주소를 갖는다고 생각하면 쉽다.


자바 공부하면서 초반에 진짜 많이 헷갈리고 어려웠던 힙메모리💦 이렇게 다시한번 보고 넘어가는 것이 오늘도 성장했다고 생각한다👌🏼
profile
Welcome to my velog! I love learning something new to build up my ability in development field. I don't think it is shame not to know, but it is shame to pretend to know about something you don't know.

0개의 댓글