객체지향에서 객체란?

객체 지향 언어다, 객체 지향 기법이다. 등 객체 지향에 대한 이야기는 많이 들었을 것이다. 그러나 객체 지향이 무엇인가? 의문을 가질 것이다.
먼저, 객체 지향을 이해하기 위해선 무엇이 객체인지를 먼저 집고 넘어가자. 
객체의 정의는 실 세계에서 존재하거나 생각할 수 있는 것을 통틀어서 이야기한다. 가령, 책상, 의자, 자동차 뿐만 아니라, 수강 신청, 수업 등 모두 객체가 될 수 있다.

위 그림은 객체의 예를 그림으로 나타낸 것이다. 
이제 각 관점에서 객체를 이해해보자.
  1. 모델링 관점에서는 명확한 의미를 담고 있는 대상 또는 개념
  2. 프로그래머 관점에서는 클래스에서 생성된 변수
  3. 소프트웨어 개발 관점에서는 객체의 상태를 나타내는 데이터와 그 데이터를 처리하거나 참조하는 메소드(함수)인 데이터 + 메소드 의 형태
  4. 객체지향 프로그래밍 관점에서는 소프트웨어 관점에서 본 데이터를 속성으로 변경하여 속성과 메소드 형태로 구현
먼저 모델링 관점에서는 명확한 의미를 담고 있는 대상 또는 개념으로 이해를 하기 때문에 앞서 설명했던 것에서 대상으로는 책상, 의자, 자동차 등을 개념으로는 수강 신청이나 수업 등을 예로 들어서 이해할 수 있다.
프로그래머 관점에서 보면, 클래스에서 생성된 변수라는 개념에서 생소한 클래스에 대해서 간단히 알아보자.
클래스의 개념은 공통되는 것들을 묶어서 대표적인 이름을 붙인 것으로 예를 들면 아래 표로 이해할 수 있겠다.

클래스객체
자동차 아반떼,K3,SM3,크루즈
스마트폰 갤럭시S8,G6,iPhone
도형 삼각형,사각형,원

그럼 반대로 클래스인 자동차를 아반떼나 K3 등으로 스마트폰을 갤럭시S8이나 G6 등 클래스를 객체로 구체화 시키는 것을 무엇이라고 할까?
이를 인스턴스 라고 하며, 클래스인 자동차를 구체화 된 객체인 아반떼 로 구체화를 시키거나 스마트폰에서 갤럭시S8를 도형에서 삼각형으로 구체화 시킨 것을 의미한다.
아래 그림은 도형 클래스를 삼각형으로 인스턴스한 것을 나타낸 것이다.


이어서 소프트웨어 관점에서의 객체는 프로그래머의 관점에서 본 클래스 내에 정의된 데이터와 메소드를 정의하는 것으로 이해하면 되고, 객체지향 프로그래밍 관점에서도  클래스 내에 속성과 메소드가 정의하는  것으로 이해하면 될 것이다.
이상으로 객체 지향을 이해하는데 필요한 객체에 대해서 알아보았다.