객체란?
상태, 동작, 고유 식별자를 가진 모든 것, 필요한 자료 구조와 이에 수행되는 함수들을 가진 하나의 독립된 존재이다. 객체의 상태는 속성값에 의해 정의된다.
소프트웨어 세계에 구현할 대상이며 속성과 기능을 가지는 프로그램 단위를 뜻한다.
공통 속성을 공유하는 객체들의 집합을 클래스 라고 한다. (객체 < 클래스)
객체에 속성과 기능을 넣어줄 설계도를 뜻한다. (객체를 만들어 내기 위한 설계도 혹은 틀)
ex) 아이폰 프로그램이 있다고 하면 속성으로는 색상, 용량 등이 있고 기능으로는 전화 등의 기능
속성(property) 은 흔히 말하는 멤버 변수, 파라미터를 말하고 기능은 메서드를 의미한다.
name: '윤아준' // name : 속성 / '윤아준' : 속성값
식별자 란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 속성(property)이다.
ex) ‘김유진’ 이라는 식별자를 가진 객체의 속성과 속성값인 키:160cm 에서 속성값이 변하더라도 ‘김유진’ 이라는 고유 식별자로 다른 객체와 구분할 수 있다.
인스턴스 : 클래스에 따라 메모리상에 구현된 실체를 뜻합니다.
oop의 관점에서 객체가 메모리에 할당되어 실제 사용될 때 ‘인스턴스’라고 부른다.
💡 클래스의 타입으로 선언되었을 때 객체 라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스 라고 부른다.
/* 클래스 */
public class Animal {
...
}
/* 객체와 인스턴스 */
public class Main {
public static void main(String[] args) {
Animal cat, dog; // '객체'
// 인스턴스화
cat = new Animal(); // cat은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
dog = new Animal(); // dog은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
}
}
💡 ‘방금 인스턴스화하여 레퍼런스를 할당한’ 객체를 인스턴스라고 말하지만, 이는 원본(추상적인 개념)으로부터 생성되었다는 것에 의미를 부여하는 것일 뿐 엄격하게 객체와 인스턴스를 나누긴 어렵다.