본문 바로가기

Hub Development/Java

[Java] 객체, 클래스, 인스턴스의 구분

728x90

🍁 객체


🔹 제임스 고슬링이 작성한 자바 언어 설명서 (The java Language Specification)에는 객체(object)란 클래스의 인스턴스나 배열을 말한다고 정의되어 있다.

 

컴퓨터 공학에서 객체는 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미한다. 객체지향 프로그래밍에서 객체는 변수, 함수, 자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그래밍에서 클래스를 기반으로 한 변수를 클래스의 인스턴스라고 지칭한다.

 

넓은 의미로 객체는 실세계에 존재하거나 생각할 수 있는 것을 뜻한다. 우리가 개발을 하면서 접하게 될 프로그래밍에서의 객체는 속성과 기능을 가지는 프로그램 단위를 뜻한다.

아이폰 프로그램이 있다고 하면 속성으로는 색상, 용량 등이 있고 기능으로는 전화 등의 기능이 존재한다. 여기서 속성은 흔히 말하는 멤버 변수, 파라미터를 말하고 기능은 메서드를 의미한다.

 

📑 클래스


객체를 기술하는 문법

 

🔹객체지향 프로그래밍에서 클래스는 멤버 변수와 메서드를 가지는 객체를 만들기 위한 확장이 가능한 코드 양식이다. 쉽게 말해, 객체를 찍어내기 위한 틀, 설계도라고 보면된다.

 

아이폰을 산다고 했을 때 아이폰 무슨 색상인지, 용량은 얼마로 하는지 다 제각각이다. 하지만, 공통적으로 색상과 용량이라는 속성과 전화라는 기능을 가진다. 이런 아이폰 객체들은 아이폰 클래스에서 생성되었다고 할 수 있다.

 

🤔 인스턴스


🔹인스턴스란 설계도(클래스)를 바탕으로 실체화되어 메모리에 할당된 실체를 말한다. 클래스에서 나온다는 점에서 객체와 유사하지만, 차이점을 말하자면, 객체는 소프트웨어 세계에 구현할 대상이고, 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스이다. 인스턴스는 객체에 포함된다고 볼 수도 있다 

 

이렇게 말로만 객체, 클래스, 인스턴스의 정의에 대해서 보게되면 어떤 차이가 있는지 느끼기 힘들다. 따라서, 아래의 코드를 보면서 요약 설명을 봐야할 필요가 있다.

 

🧪 요약


요약하자면, 클래스는 객체를 기술하는 문법이며 Java를 실행 시 클래스는 JVM 메모리의 클래스 영역(Class Area)에 로드된다. 이때, 클래스가 메모리 영역에 로드되어 정의될 때 이러한 클래스를 객체라 하고 그러한 객체가 실제 코드로 표현될 때 인스턴스라고 정의한다.

public class Product { // 클래스라는 문법으로 만든 객체

    //필드(field)
    private String pCode;
    private String pName;
    private int price;
    private int quantity;
    private String brand;
    private String desc;
		
    //생성자(Constructor)
    public Product(String pCode, String pName, int price, int quantity, String brand, String desc) {
        this.pCode = pCode;
        this.pName = pName;
        this.price = price;
        this.quantity = quantity;
        this.brand = brand;
        this.desc = desc;
    }

    //메소드(method)
    void eat() {
        System.out.println("냠냠..");
    }
}
public class ProductTest { 
	public static void main(String[] args) {
		// 클래스라는 문법으로 만든 객체의 인스턴스
		Product product1 = new Product("P001", "Product1", 1000, 50, "Brand1", "Description1");
	}
}