맨위로가기

인스턴스 (컴퓨터 과학)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

인스턴스는 컴퓨터 과학에서 클래스를 기반으로 생성된 객체의 실체를 가리키는 용어이다. 객체 지향 프로그래밍에서 클래스는 객체의 분류를 의미하며, 클래스 인스턴스는 해당 분류에 속하는 객체를 뜻한다. 인스턴스를 생성하는 과정을 인스턴스화라고 한다. 스몰토크의 영향을 받은 언어에서는 클래스 자체도 객체로 취급될 수 있으며, Objective-C나 파이썬에서는 클래스 객체와 인스턴스 객체가 명확히 구분된다. 또한, 컴퓨터 인스턴스는 가상 머신의 발생을 의미하며, 다각형 모델은 렌더링 성능을 향상시키기 위해 여러 번 인스턴스화될 수 있다. POSIX 기반 운영 체제에서 프로그램 인스턴스는 실행 중인 프로세스를 의미한다.

2. 객체 지향 프로그래밍에서의 인스턴스

'''클래스 인스턴스'''는 객체 지향 프로그래밍에서 클래스로부터 생성된 객체를 말한다. 클래스의 각 인스턴스는 데이터 레이아웃을 공유하지만, 자체적인 메모리 할당을 갖는다.

2. 1. 개념

객체 지향 프로그래밍 언어에서, 대부분의 경우 클래스를 기반으로 생성된 객체의 실체를 가리킨다. 데이터 모델 및 객체 지향 설계에서도 사용되는 용어이다.[2]

인스턴스를 생성하는 프로세스를 '''인스턴스화''' (instantiation영어, 동사형instantiate영어})라고 한다. 객체 지향 프로그래밍에서 클래스 또는 타입은 객체의 분류(분류 개념)나 집합에 해당한다. 어떤 클래스 C의 인스턴스란, C라는 분류에 속하는(분류되는) 객체를 말한다.

스몰토크의 영향을 많이 받은 언어에서는 클래스 자체도 객체로 취급할 수 있다(이를 클래스 객체라고 한다). 이러한 경우에는 특히 "클래스 C의 객체"라는 표현으로는 "클래스 C에 속하는 객체"의 의미인지 "클래스 C 그 자체를 나타내는 객체"의 의미인지 모호해진다. 이 경우 "클래스 C의 인스턴스"라는 표현을 사용할 수 있다. 클래스 객체와 대비하여 "인스턴스 객체"라는 말도 사용된다.

객체 지향 프로그래밍에서의 인스턴스라는 말은, 원래 Sketchpad라는 언어의 "Master"에서 "Instance"를 생성하는 메커니즘인 "instance drawings"가 유래가 된 용어이다.[3] 그리고 C++스몰토크가 이 "Master"와 "Instance"의 관계를 클래스에서 생성된 객체에 비유하여, 클래스에서 생성된 객체(인스턴스 객체)의 의미로 사용하기 시작하여 인스턴스 객체를 나타내는 말로 정착시켰다.

정적 타입의 객체 지향 언어에서는 드물지만, 동적 타입의 객체 지향 언어의 대부분은 메타클래스를 지원하며, 클래스 자체도 객체로 취급할 수 있다(클래스 객체). 클래스 객체는, 간단히 말해 변수에 바인딩할 수 있는 클래스이다. 클래스 객체, 인스턴스 객체 모두를 변수에 바인딩했을 때 둘 다 객체로 동작하며 겉으로는 구별이 가지 않는다. 예를 들어 클래스 객체, 인스턴스 객체 모두가 readFrom:이라는 메서드를 가지고 있을 경우, 둘 다 #readFrom: 메시지를 보내면 에러도 일으키지 않고 각각의 메서드를 실행한다.

Objective-C나 파이썬에서는 클래스 객체와 인스턴스 객체의 명확한 구별이 이루어지고 있다.[4][5]

메타클래스가 지원되는 시스템에서는, 클래스 객체 또한 다른 클래스(메타클래스)의 인스턴스일 수 있다. 이 경우 "클래스 객체는 인스턴스가 아니다"라고 말할 수 없으므로 주의해야 한다.

2. 2. 역사

객체 지향 프로그래밍에서 인스턴스라는 말은 원래 Sketchpad라는 언어의 "Master"에서 "Instance"를 생성하는 메커니즘인 "instance drawings"에서 유래했다.[2] C++(C 플러스플러스)과 함께 객체 지향 개념을 구축한 스몰토크는 이 "Master"와 "Instance"의 관계를 클래스에서 생성된 객체에 비유하여, 클래스에서 생성된 객체(인스턴스 객체)를 나타내는 말로 사용하기 시작했고, 이는 곧 정착되었다.[3]

2. 3. 메타클래스

동적 타입의 객체 지향 언어 대부분은 메타클래스를 지원하며, 클래스 자체도 객체(클래스 객체)로 취급할 수 있다. 클래스 객체는 간단히 말해 변수에 바인딩할 수 있는 클래스이다. 클래스 객체와 인스턴스 객체 모두 변수에 바인딩했을 때 둘 다 객체로 동작하며 겉으로는 구별이 가지 않는다. 예를 들어 클래스 객체와 인스턴스 객체 모두 readFrom:이라는 메서드를 가지고 있을 경우, 둘 다 #readFrom: 메시지를 보내면 오류도 일으키지 않고 각각의 메서드를 실행한다.[4][5]

Objective-C나 파이썬에서는 클래스 객체와 인스턴스 객체를 명확하게 구별한다.

메타클래스가 지원되는 시스템에서 클래스 객체는 다른 클래스(메타클래스)의 인스턴스일 수 있다. 이 경우 "클래스 객체는 인스턴스가 아니다"라고 말할 수 없으므로 주의해야 한다.

3. 컴퓨터 과학에서의 인스턴스

컴퓨터 과학에서 인스턴스는 다양한 의미로 사용된다.


  • 컴퓨터 인스턴스: 일반적으로 저장 공간과 가상 CPU를 포함하는 가상 머신의 발생을 의미한다.
  • 다각형 모델: 컴퓨터 그래픽스에서 장면의 여러 위치에서 여러 번 그려지도록 인스턴스화될 수 있으며, 각 인스턴스를 표시하는 데 필요한 작업의 일부를 재사용하여 렌더링 성능을 향상시킬 수 있다.
  • 프로그램 인스턴스: POSIX 기반 운영 체제에서 실행 중인 프로세스를 의미한다. 컴퓨터 프로그램을 위해 fork() 및 exec()과 같은 시스템 콜을 통해 인스턴스화되며, 각 실행 프로세스는 인스턴스화된 프로그램의 인스턴스이다.

3. 1. 클래스 인스턴스

클래스로부터 생성된 객체객체 지향 프로그래밍(OOP)이다. 클래스의 각 인스턴스는 데이터 레이아웃을 공유하지만 자체 메모리 할당을 갖는다.[1] 객체 지향 프로그래밍 언어에서, 대부분 클래스를 기반으로 생성된 객체의 실체를 가리킬 때 사용되는 용어이며, 데이터 모델 및 객체 지향 설계에서도 사용된다.[1]

인스턴스를 생성하는 프로세스를 '''인스턴스화''' (instantiation|인스턴시에이션영어)라고 한다.[1]

3. 2. 컴퓨터 인스턴스

컴퓨터 인스턴스는 일반적으로 저장 공간과 가상 CPU를 포함하는 가상 머신의 발생을 의미한다.

3. 3. 다각형 모델

컴퓨터 그래픽스에서 '''다각형 모델'''은 장면의 여러 위치에서 여러 번 그려지도록 인스턴스화될 수 있으며, 각 인스턴스를 표시하는 데 필요한 작업의 일부를 재사용할 수 있으므로 렌더링 성능을 향상시킬 수 있다.

3. 4. 프로그램 인스턴스

POSIX 기반 운영 체제에서, '''프로그램 인스턴스'''는 실행 중인 프로세스를 의미한다. 이는 컴퓨터 프로그램을 위해 fork() 및 exec()과 같은 시스템 콜을 통해 인스턴스화된다. 각 실행 프로세스는 인스턴스화된 프로그램의 인스턴스이다.

참조

[1] 서적 The Design of the UNIX Operating System https://books.google[...] Prentice Hall
[2] 웹사이트 http://gagne.homedns[...]
[3] 웹사이트 http://stephane.duca[...]
[4] 문서 Objective-C Runtime Reference https://developer.ap[...]
[5] 문서 Classes ― Python v2.7.3 documentation http://docs.python.o[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com