객체지향 프로그래밍 정리 1. 인스턴스, 힙 메모리, this
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개인 생성자를 호출하게 된다.
생성자에선 생성자의 기능을 구현하기 전에 변수를 선언할 수 없으므로, 이 방법 외의, 생성자에서 다른
생성자를 호출하는 방법은 필자가 아는 한 없다.