스프링

객체지향 프로그래밍 정리 1. 인스턴스, 힙 메모리, this

호놀롤루 2022. 3. 29. 22:16

1. 인스턴스와 힙 메모리

인스턴스란 클래스를 이용해 생성한 객체를 말한다.

간단하게 설명하자면 틀로 만드는 음식에서 나온 음식이라 보면 된다.

붕어빵 틀에 넣고 만들면 모두 붕어빵의 형태를 하고 있지만, 내용물은 다른 걸 넣을 수도 있다.

팥, 슈크림, 초코, 민트초코 등 각기 다른 걸 가질 수 있고, 그 각각의 객체가 인스턴스다.

참고로 그 틀이 되는 것은 클래스라고 한다.

 

그리고 힙 메모리란 객체가 생성되는 메모리 공간을 뜻한다.

 

예를 들자면 Student라는 클래스를 만들고, new 키워드로 2개의 학생 인스턴스 객체를 만들면

메모리 공간에서는 아래의 그림과 같이 생성된다.

 

스택 (Stack) 힙 (Heap)
학생1 (객체의 메모리 주소가 담긴 변수) 학생1 인스턴스 (실제 객체, 각기 다른 내용을 담고 있음)
학생2 학생2 인스턴스

스택 영역에는 참조변수(객체의 주소가 담겨있음)가 생성되고, 실제 객체는 힙 메모리 영역에 생성된다.

 

 

2. 용어 정리

객체 : 객체지향 프로그래밍의 대상, 생성된 인스턴스

클래스 : 객체를 프로그래밍 하기 위해 코드로 정의해 놓은 상태

인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태

멤버 변수 : 클래스의 속성, 특성

메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수

참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수

참조 값 : 생성된 인스턴스의 메모리 주소 값

 

 

3. this

this란 객체지향 프로그래밍에서 각 객체들의, 자신의 메모리 주소를 가리키는 키워드다.

즉, this를 return한다면 해당 객체의 힙 주소가 나오고, 이런 방식의 사용법도 실제로 사용한다.

또한 생성자에서 또 다른 생성자를 호출할 때 사용하는 키워드다.

 

public class Person {

    String name;

    Int age;

 

    public Person() {

        this(“이름 없음”, 1);

    }

 

    public Person(String name, int age) {

        this.name = name;

        this.age = age;

    }

}

라는 코드가 있다면, this에선 아래에 있는 파라미터가 2개인 생성자를 호출하게 된다.

생성자에선 생성자의 기능을 구현하기 전에 변수를 선언할 수 없으므로, 이 방법 외의, 생성자에서 다른

생성자를 호출하는 방법은 필자가 아는 한 없다.