객체지향 프로그래밍(Object-Oriented Programming)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 한다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 꼭 기억해둘 용어들을 짚고 넘어가자.
책상 설계도를 예시로 들어보자. 설계도면은 클래스(class)와 유사한 개념이다. 설계도면을 통해 만들어진 실제 책상을 오브젝트(Object)라고 한다. 오브젝트는 다른 말로 인스턴스(Instance)라고 하기도 한다.
클래스 지향 프로그래밍이라고 하지 않고 객체지향 프로그래밍이라고 하는 이유는 뭘까? 클래스는 설계도와 비슷한 개념이다. 실제 존재하는 물체 즉 오브젝트가 아니라서 동작하지 않는다. 클래스를 이용하는 게 아니라 실제 만들어진 현실의 객체, 즉 오브젝트를 이용하는 것이 객체지향 프로그래밍이다.
자바에서는 설계도를 만들기 위해서 클래스를 작성, 클래스를 실제로 사용하기 위해서는 클래스를 이용해서 오브젝트(또는 인스턴스)를 생성한다. '클래스를 어떻게 만들까?'를 고민하는 게 아니라, '메모리 상에 존재하는 오브젝트를 어떻게 만들까?', '이 인스턴스를 어떻게 이용할까?'를 고민해야 한다.
참조형 변수(Reference Variable)을 선언한다. 오브젝트(인스턴스)를 사용하려면 특별한 이름으로 참조해야 한다.

클래스는 field와 method들을 가질 수 있다. 클래스를 사용하기 위해서는 인스턴스를 만들어야 한다. 위 그림에서 class 'Book'은 혼자서는 아무것도 못한다. 다음과 같은 코드를 사용해야 클래스를 사용할 수 있다.
Book b = new Book();
new 다음에 Class name()이 오면, 오브젝트(인스턴스)를 생성하라는 의미이다.
여기서 b를 참조변수라고 하는데, 말 그대로 인스턴스 Book을 참조한다는 의미이다.
위의 코드를 선언하면, 다음과 같이 인스턴스가 Heap 메모리에 생성된다. Heap에 생성된 인스턴스를 참조하는 변수가 b이다. 그리고 변수 b 앞의 Book 을 레퍼런스 타입이라고 한다. 즉, new Book()은 인스턴스를 Heap에 만들라는 의미이다. 메모리에 만들어진 인스턴스는 현실에 존재하는 객체 같은 것이다. 인스턴스를 사용하기 위해서는 반드시 인스턴스를 가리키는 참조변수(b)가 있어야 한다.

그냥 new Book()만 쓰게 되면 메모리에 Book 인스턴스가 만들어지지만, 참조변수가 없기 때문에 사용할 수가 없다. 메모리에는 있지만 사용할 수 없는 인스턴스는 쓰레기(Garbage)가 된다.

c.f 기본형 타입(byte, short, char, int, long, float, double)은 참조형 타입이 아니다. 값을 참조하는 것이 아니라 값을 메모리 크기만큼 가질 수 있는 타입니다. 참조형 타입은 값을 가지는 것이 아니라 객체를 참조한다.
다음 글에서는 클래스 선언에 대해 알아보겠다.
오늘도 모두 헤잇팅 👊
🗒️ 본 게시물은 '인프런'의 <즐거운 자바>를 수강하며 기록한 개인 강의 노트입니다.