본문 바로가기
CS/JAVA

[JAVA] 객체와 클래스, 그리고 인스턴스의 차이

728x90

 

 

 


객체(Object)란?

 

객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말한다. 예를 들어 물리적(유형)으로 존재하는 자동차, 컴퓨터, 사람과 추상적(무형)으로 존재하는 강의, 주문 등이 모두 객체가 될 수 있다. 

사람이라는 객체는 이름, 나이, 성별 등과 같은 속성과 먹다, 걷다, 자다 등의 동작을 가진다.
Java에서는 이러한 속성들을 필드(field), 동작들을 메소드(method)라고 부른다.

 

 

 


 클래스(Class)란?

 

클래스(Class)란 Java 프로그램에서 객체를 생성하기 위한 일종의 설계도이다. 객체가 가지는 속성(필드)과 동작(메소드)으로 이루어져 있다. 흔히 붕어빵(객체)을 만들기 위한 붕어빵 틀(클래스)이라고 비유를 한다. 클래스는 필드(Field), 생성자(Constructor), 메소드(Method)로 구성되어 있다. 이들은 생략될 수도 있고 하나 이상 작성될 수도 있다.

필드: 객체의 데이터가 저장되는 곳이다.

생성자: 객체가 실제로 생성될 때 초기화 역할을 담당한다.

메소드: 객체의 동작에 해당하는 실행 블록이다.

 

사람이라는 객체를 클래스로 나타내면 다음과 같다.

 

public class Person{
    //필드(field)
    String name;
    int age;
    char sex;
    
    //생성자(Constructor)
    Person(String name, int age, char sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    
    //메소드(method)
    void eat(){
        System.out.println("냠냠..");
    }
    
    void walk(){
        System.out.println("뚜벅뚜벅");
    }
    
    void sleep(){
        System.out.println("zzz...");
    }
}

 

 

 


 인스턴스(Instance)란?

 

클래스가 붕어빵 틀이라면 그 틀을 통해 생성된 객체(붕어빵) 하나하나를 해당 클래스의 인스턴스(Instance)라고 부른다. Java 프로그램 실행 시 클래스는 JVM 메모리의 클래스 영역(Class Area)에 로드되고 이 클래스를 사용하여 힙 영역(Heap Area)에 새로운 인스턴스(객체)를 생성할 수 있다. 즉, 인스턴스란 현실의 객체를 소프트웨어 내에서 구현한 실체라고 볼 수 있다. 이렇게 생성된 인스턴스들은 각자 고유의 특성을 가지고 독립적으로 존재한다. 

 

public class PersonTest{
    public static void main(String[] args){
        // 객체 생성 = 인스턴스
        Person p1 = new Person("코디빌더", "20", "M"); 
        Person p2 = new Person("티스토리", "20", "F");
        
        // 메소드 사용
        p1.eat();
        p1.walk();
        p1.sleep();
        
        p2.eat();
        p2.walk();
        p2.sleep();
    }
}

 

 

 


📝 요약

◾ 객체(Object)란 자신 고유의 속성을 가지는 물리적, 추상적인 모든 대상을 일컫는다.

◾ 클래스(Class)란 객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도이며 이를 통해 생성된 객체 하나하나를 클래스의 인스턴스(Instance)라 부른다. 대체로 객체와 인스턴스는 혼용해서 표현한다.

 

 

 


📃 Ref

  • 신용권, 『이것이 자바다』, 한빛미디어
728x90
반응형

'CS > JAVA' 카테고리의 다른 글

[JAVA] 예외 클래스  (0) 2021.08.09
[JAVA] JVM 구조와 메모리  (0) 2021.07.26
[JAVA] Wrapper 클래스  (0) 2021.07.25