객체(Object)란 우리가 살고 있는 현실 세계에서 보거나 만질 수 있고 이해하고 느낄 수 있는 그 모든 것을 의미한다.
객체(Object)는 <사전적인 정의로 실재 존재하는 것> 을 말한다.
객체지향 이론에서는 사물과 같은 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주 할 수 있다. 따라서 자동차, 스마트폰, 꽃, 나무 와 같이 보거나 만질 수 있는 물체도 객체이며
기쁨, 우울함, 사랑, 분노, 두려움 등의 감정도 우리가 직접 만질 수는 없지만 우리가 실재 존재한다고 이해하고 느낄 수 있기에 객체로 추상화 할 수 있다.
앞서 말한 Object(객체)는 아직까지는 실체화되지 않아 추상화된 개념에 불과하다.
고로 우리는 개발할 때 이런 Object(객체)에 대한 개념만으로는 아직 프로그래밍 상에서 사용하거나 이용할 수 없다.
따라서 이러한 추상적 개념을 실재로 구현하여 이용하기 위해서는 객체를 규정하고 정의할 필요가 있다.
그러므로 우리는 개발을 할 때 이러한 객체에 대한 이미지를 구체화하기 위해서 객체로서 가지는 속성과 기능으로 정의하게 되는데, 이때 사용하는 개념과 방식이 바로 Class(클래스)다.
마치 김춘수 시인의 꽃이라는 시가 생각난다. 존재와 본질.
꽃(김춘수)
내가 그의 이름을 불러주기 전에는
그는 다만
하나의 몸짓에 지나지 않았다.
내가 그의 이름을 불러주었을 때,
그는 나에게로 와서
꽃이 되었다.
본론으로 돌아와서
객체에 대한 속성과 기능을 마치 어떤 기계 장치에서 기능과 부품을 정의해놓은 설계도처럼 규정하고 정의하는 것은 Dart 언어에서 Class(클래스)가 담당한다.
일반적으로 객체는 다수의 속성(attribute)과 기능(method)을 가지고 있다.
예를 들어 스마트폰이라는 객체가 있다고 가정한다면,
스마트폰은 속성 으로 스피커, 홈버튼, 볼륨 조절 버튼, 카메라 등을 가지고 있을 것이고
스마트폰은 기능 으로 전화 통화, 사진 촬영, 플래시 기능, 통신 기능 등의 기능을 가질 수 있다고 할 수 있다.
간단한 또 다른 예시를 확인해보면.
class CalculatorV1{
String name = 'CALCU';
int release = 2023;
String productcolor = 'Silver';
int addNumber(int a, int b){
return a+b;
}
}
위의 코드는 내 맘대로 'CalculatorV1' 이라는 계산기(Object, 객체)를 Class(클래스)로 구현한 코드이며 이해를 돕기 위해서 간단하게 작성해 보았다. 위의 클래스의 코드를 살펴보면 name, release, productcolor 와 같이 객체에 대한 속성이 정의 되어있다. 각각 계산기의 이름, 출시년도, 제품의 색상 등을 속성 으로 가지고 있으며 a와 b를 더한 결과를 출력해주는 간단한 계산 기능 을 가지고 있다. 이처럼 객체가 가지는 속성과 기능을 마치 설계 도면과 같은 역할로 정의한 것을 Class(클래스) 라고 한다.
정리하자면 프로그래밍 상에서 Object(객체)란 바로 메모리에 할당되어진 순간의 Class(클래스) 를 의미하며 추상적인 Object(객체)의 개념을 규정하고 정의하여 프로그래밍에서 실체화되어 이용이 가능한 형태로 구현된다.
만약 불량품이 나올 수 없는 제조 공정율을 가진 공장에서 내가 만든 설계 도면(Class, 클래스)을 가지고
내가 설계한 계산기를 100만개 생산했다고 가정한다면 이 모든 계산기는 다 같은 계산기 일까?
실제로 100만개의 계산기는 모두 다같은 이름, 다같은 출시년도, 다같은 제품의 색상과 같은 계산 기능을 가지고 있겠지만
이렇게 만들어진 계산기들은 공장에서 만들어 낼 때 시리얼 번호가 다 다르게 부여될 것이며 생산할 때 조립된 부품들도 다 같은 부품들이지만 마찬가지로 일련 번호 등이 다른 부품들이 사용되어 생산될 것이다. 각각의 모습과 모양 기능은 같아도 실제로는 각 계산기들마다 서로 구분할 수 있는 정보를 가지게 된다.
계산기 => Object(객체)
실제로 계산기를 만들기 위해 속성과 기능을 담은 설계도 => Class(클래스) : 프로그래밍상에서의 객체
이러한 같은 설계도를 통해 만들어진 각 계산기 하나 하나는 => Instance(인스턴스)
완전하게 같은 속성과 기능을 가지고 있다고 하더라도 이렇게 만들어진 각각의 계산기는 실제로 모두 같다고 할 수 없기 때문에 따라서 객체와 클래스, 인스턴스는 다른 개념이다.
Object(객체)란?
Object(객체)란 우리가 살고 있는 현실 세계에서 보거나 만질 수 있고 이해하고 느낄 수 있는 그 모든 것을 의미하며 사전적인 정의로 실재 존재하는 것을 말한다.
프로그래밍 상에서의 Class(클래스)란?
이러한 추상적이고 개념적인 Object(객체)를 실체화하여 사용할 수 있도록 속성과 기능으로 규정하고 정의한 것을 말하며, 클래스가 정의되어 메모리 상에 할당 되었을 때 이러한 Class(클래스)를 곧 객체라고 한다.
프로그래밍 상에서의 인스턴스(Instance)란?
클래스가 정의하고 있는 속성과 기능을 완벽하게 가진 채로 생성되어 실제로 프로그래밍 상에서 사용되는 대상을 의미