본문 바로가기

객체지향프로그래밍

클래스(Class)와 객체(Object), 인스턴스(Instance)는 무엇이고 차이점은 뭘까

지난 포스트를 작성하면서, 이해하고 있다고 생각했던 것들이 정확하게 정리되지 않은 상태임을 느끼게 되었습니다. 모든 것을 세세하게 알지는 못해도 각각의 기능과 개념, 차이를 명확히 알아야 코드의 최적화와 가독성에 도움이 된다고 생각하여 오늘은 객체를 정리해보려고 한다.

 

객체란 무엇인가?

 

객체라는 용어는 다양한 맥락에서 사용되기 때문에 혼란을 야기하는 경우가 잦은 것 같다.

 

특히 프로그래밍에서는 클래스, 객체, 인스턴스 등 각각이 정확한 의미를 가지고 있기 때문에 용어를 명확히 이해하는 것이 중요하다.

 

우선 각각의 개념과 의미를 나열하면서 비교하고, 비유하면서 세밀하게 짚어보려 한다.

 


  1. 클래스

자바에서 클래스(class)는 프로그램에 적합한 기능과 성질을 위해 큰 틀을 정의하는 것이다.

 

적절한 클래스 다수를 논리적으로 설계 했을 때, 클래스에서 제공하는 추상화를 통해 코드의 재사용성을 높여주고

 

이는 유지보수의 구조화를 보다 쉽게 완성할 수 있다.

 

클래스의 구성요소로는 필드, 메소드, 생성자가 있다.

 

필드는 클래스의 속성을 표현하는 요소라고 할 수 있다.

 

클래스는 특성을 나타내는 필드와 기능을 나타내는 메소드로 구성되어 있는데,

 

필드는 익히 아는 변수를 의미하며 메소드는 변수를 사용하여 할 수 있는 모든 기능을 의미한다.

 

생성자는 클래스를 통해 생성된 객체를 인스턴스 생성 시에 실행되어야 할 작업을 위해 사용된다.

 

클래스의 전체적인 예시를 들어보자.

 

클래스로써 정의한 큰 틀을 공장이라고 했을 때, 필드는 기계, 직원, 지게차 등이 존재할 수 있고 메소드는 제품의 생산, 기계의 수리 등 공장에 필요한 것들로 구성되어야 할 것이다.

 

이 때, 객체로 수영장을 만든다면? 필드의 구성요소는 전혀 달라질 것이며, 메소드 또한 달라져 클래스가 정의한 것에 따른 논리적인 설계는 불가능 할 것이다.

 

즉, 클래스는 큰 틀을 정의하며 필드와 메소드의 집중도를 올릴 수 있지만 잘못 정의된 순간부터 큰 흐름이 망가지게 되므로 제대로 이해하고 활용하는 만큼 더 높은 효과를 기대할 수 있다.


  2.객체

 

이제 점점 이상해지기 시작할 것이다.

 

객체현실 세계의 추상화를 나타내는 프로그래밍의 기본 단위이며 객체는 '데이터'와 그 '데이터'를 조작하는 "메소드"로 이루어져 있다.

 

이때, 데이터는 필드나 속성, 변수라고 부를 수 있는데 메소드는 필드나 속성, 데이터를 사용하여 작동하는 어떠한 기능을 이야기한다.

 

그럼 클래스객체차이는 무엇일까?

 

클래스는 프로그램에 적합한 기능과 성질을 위해 큰 틀을 정의하는 것이며 건물의 설계도나 도면이라고 생각 할 수 있고,

 

객체는 정의된 클래스 내에서 어떠한 대상을 실체화 하는 것에 목적을 두고 있으며 설계도에 따라서 실제로 생성된 건물이나 물체라고 할 수 있다.

 

예를 들어, 건물을 건설한다고 할 때 어떤 건물을 만들까 생각하며 설계도와 도면을 작성하는 추상적인 작업을 클래스의 설계라고 할 수 있고,

 

설계도와 도면의 작성을 끝낸 후 그에 따라 실제로 건물을 쌓아 올린 것이 객체다.

 

클래스와 객체의 관계를 비유하면 설계도와 실제 건물의 관계와 비슷하다고 할 수 있다.


 

  3.인스턴스

 

그럼 인스턴스는 뭐지?

 

인스턴스는 모든 것을 뒤로하고 쉽게 설명할 수 있다.

 

객체가 사용된 순간 그 객체는 인스턴스가 되는 것이다.

 

인스턴스는 클래스를 기반으로 생성된 객체를 의미하는데, 생성된 객체가 메모리에 할당되는 순간 해당 객체를 '인스턴스'라고 부른다.

 

우리가 여태 이용해왔던 예시를 통해서 설명을 하자면,

 

클래스를 통해 건설할 건물의 설계도를 그리면, 객체를 통해 건물을 실체화하고,

 

그 건물에 입주자가 생기는 순간(실제로 사용되기 시작한 순간) 그 건물은 인스턴스가 되는 것이다.

 


 

클래스와 객체, 인스턴스의 관계는

 

클래스 안의 수많은 객체가 있을 수 있으며, 어떠한 객체를 사용하기 시작한 순간부터 해당 객체는 인스턴스가 되는 것이다.