넓은 의미로 객체는 현실에서 존재하거나 생각할 수 있는 것을 말합니다. 자동차, 사람과 같이 물리적으로 존재하는 것과 강의, 주문과 같이 추상적으로 존재하는 것 모두 객체가 될 수 있습니다.
실제 현실에서의 객체와 비교하면 2가지 주요한 형질을 공통적으로 가지는데 바로 상태(또는 속성)
와 행동(또는 기능)
입니다. 예를 들어 사람은 나이나 이름과 같은 상태를 가지며, 달리거나 잠자는 행동을 할 수 있습니다. 자바에서는 이러한 상태(속성)를 필드(field), 행동을 메소드(method)로 나타냅니다.
객체를 구현해야할 대상이라면 클래스는 객체를 생성하기 위한 설계도
라고 할 수 있습니다.
객체로 만들 대상의 특징(상태)이나 기능(행동)을 잘 나타내도록, 개념적으로 분류(classification)정의 하는 것이 클래스입니다.
클래스는 필드와 메소드, 생성자로 구성됩니다.
public class Person{
// 필드(field)
String name;
int age;
// 생성자(constructor)
Person(String name, int age){
this.name = name;
this.age = age;
}
// 메소드(method)
void run(){
System.out.println(name + "가 달립니다.");
}
void sleep(){
System.out.println(name + "가 잠을 잡니다.");
}
}
정의된 클래스(설계도)를 바탕으로 객체를 실체화한 것을 인스턴스라고 합니다. 클래스를 통해 힙(Heap)메모리 영역에 인스턴스가 생성되며 이러한 인스턴스를 만드는 과정을 인스턴스화
라고합니다.
public class PersonTest{
public static void main(String[] args){
// 인스턴스 생성
Person person1 = new Person("김철수", "26");
Person person2 = new Person("이영희", "22");
person1.run();
person2.run();
person1.sleep();
person2.sleep();
}
}
Person클래스로부터 만들어진 person1객체
라고 표현하듯이 person1은 객체이며 인스턴스입니다. 이는 같은 말처럼 보이지만 객체는 인스턴스를 포괄하는 개념 (인스턴스⊂객체)
으로 인스턴스는 특정 클래스로부터 메모리에 실체화된 특정 객체
를 말합니다. 따라서 person1인스턴스와 person2인스턴스는 모두 객체입니다.
예를 들어 붕어빵을 만든다고 가정한다면 구현해야할 대상, 즉 객체
는 붕어빵이며 붕어빵을 만드는 틀(설계도)은 클래스
입니다. 그리고 붕어빵틀을 통해 만들어진 팥붙어빵, 슈크림붕어빵은 인스턴스
가 됩니다.
Class vs Object vs Instance - Alfred’s Computing Weblog
13편. 객체와 클래스(Objects and Classes) - LAYER6AI의 끝나지 않는 프로그래밍 일기
객체와 클래스, 그리고 인스턴스의 차이 - 코디빌더
도대체 객체가 뭔데? : 객체, 클래스, 인스턴스 - 오늘이라도 upcake_