Tech Blog of Pinomaker
Published 2022. 12. 24. 14:22
클래스와 객체, 인스턴스 Language/JAVA

클래스와 객체

클래스란 객체를 정의해놓은 것 혹은 객체의 설계도, 틀이라고 정의할 수 있다. 클래스는 객체를 생성하는 데 사용되며 객체는 클래스에 정의된 대로 생성이 된다.

 

객체의 사전적인 정의는 실제로 존재한는 것이다. 우리가 주변에서 볼 수 있는 책상, 의자, 자동차와 같은 사물들이 곧 객체이다. 객체지향이론에서는 사물과 같은 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주하지만 프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 의미한다.

 

클래스의 정의 : 클래스란 객체를 정의해 놓은 것
클래스의 용도 : 클래스는 객체를 생성하는 데 사용된다.

 

객체의 정의 : 실제로 존재하는 것, 사물 또는 개념
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

유형의 객체 : 책상, 의자, 자동차, TV와 같은 사물
무형의 객체 : 수학공식, 프로그램 에러와 같은 논리나 개념

 

 

클래스와 객체의 관계는 제품 설계도와 제품과의 관계라고 볼 수 있다. 예를 들면 TV 설계도는 클래스, 그 설계도에 따라 만들어진 TV는 객체인 것이며, TV 설계도는 TV를 만들기 위하여 사용된다.

 

우리가 TV를 보기 위해서는 객체인 TV가 필요한 것이지 클래스인 TV 설계도가 필요한 것이 아니며, TV 설계도는 오직 객체인 TV를 만드는 데만 사용된다. 그리고 TV 설계도로 TV를 만들어야 사용할 수 있는 것처럼 프로그래밍에서는 먼저 클래스를 작성하고 클래스로부터 객체를 생성하여 사용한다.

 

클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해서 제품을 만드는 이유는 설계도를 잘 만드면 제품을 만드는 일이 쉬어지기 때문인데, 제품을 만들 때마다 매번 고민 한는 것이 아닌 설계도대로만 만들면되기 떄문이다. 이와 마찬가지로 클래스를 잘 만들어두면 객체를 매번 생성할 때마다 어떻게 객체를 만들지 고민하지 않고 클래스로부터 생성하면 된다.

 

Java Development Kit, JDK에서는 프로그래밍을 위해 많은 수의 유용한 클래스를 기본적으로 제공하고 있으며, 우리는 이 클래스를 이용하여 원하는 기능의 프로그램을 쉽게 작성할 수 있다.

 

객체와 인스턴스

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

 

예를 들어서 TV 클래스로부터 만들어진 객체를 TV 클래스의 인스턴스라고 한다. 즉 인스턴스는 객체와 같은 의미이지만 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 구체적인 의미를 가지고 있다.

 

따라서 TV는 인스턴스다라는 것보단 TV는 객체다라고 하는 쪽이 더 좋으며, TV는 TV 클래스의 객체이다라고 하는 것보다는 TV는 TV 클래스의 인스턴스다라고 하는 것이 더 자연스럽다고 한다. 인스턴스와 객체는 같은 의미이기에 두 용어의 사용을 엄격하게 구분할 필요는 없지만 문맥에 따라 다르게 사용한다.

 

객체의 구성요소 - 속성과 기능

객체는 속성과 기능, 두 종류의 구성 요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다. 즉 객체는 속성과 기능의 집합이라고도 할 수 있으며, 객체가 가진 속성과 기능을 그 객체의 멤버라고 한다.

 

클래스는 객체를 정의한 것이기에, 클래스에는 객체의 모든 속성과 기능이 정의되어있으며 클래스를 통해 객체를 생성하면 클래스에 정의된 속성과 기능을 가진 객체가 만들어진ㄷ나.

 

속성과 기능은 여러가지 용어가 있는 데 주로 속성보다는 멤버 변수를, 기능보다는 메서드를 사용하게 된다.

'Language > JAVA' 카테고리의 다른 글

Java의 예외 계층  (0) 2023.04.23
객체지향언어와 역사  (0) 2022.12.24
[JAVA] 연산자(1) 연산자의 종류와 우선 순위, 결합 규칙  (0) 2022.08.22
[Java] 자바의 자료형  (0) 2022.08.14
[JAVA] 식별자  (0) 2022.04.19
profile

Tech Blog of Pinomaker

@pinomaker

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!