클래스 (컴퓨터 프로그래밍)

클래스()는 프로그래밍, 특히 객체 지향 프로그래밍에서 객체를 생성하기 위해 사용하는 구문적 개체(entity) 구조이다. 클래스가 할 수 있는 것은 프로그래밍 언어에 따라 다르지만, 널리 보이는 공통점은 상태(변수)와 행위(메서드)로 이루어져 해당 클래스의 객체들이 각기 해당 상태와 행위로 구성되도록 하는 것이다. 객체는 이러한 클래스로 규정된 인스턴스로서, 변수 대신 실제값을 가진다.

프로그래밍 언어가 상속을 지원하는 경우에 클래스는 다른 클래스를 기반으로 하여, 그 상태와 행위에 더해 특화된 상태와 행위를 가질 수 있다. 이 때 특화되는 클래스를 서브클래스(sub-class), 기반이 되는 클래스를 수퍼클래스(superclass)라고도 부른다. 이러한 클래스와 그 서브클래스 간의 구조를 이라 한다.

자바와 C#과 같은 순수 객체 지향 프로그래밍 언어에서 모든 클래스는 Object를 루트 클래스로 하는 상속 트리의 일부가 된다. 이 때 Object는 최상위 형식(top type)으로 불린다.

 속성 
섬네일|통합 모델링 언어로 표현한 클래스의 한 예시
 객체 생애주기 
클래스의 인스턴스인 객체는 클래스에서 인스턴스화(instantiation)를 거쳐 구성된다. 객체 상태에 메모리가 할당되고 초기화되며, 객체를 소비하는 코드를 위해 객체의 참조가 제공된다. 객체는 제거될 때까지 사용할 수 있으며, 제거되는 경우 객체 상태에 할당된 메모리가 해제된다. 많은 프로그래밍 언어는 생성자와 소멸자를 통해 객체 생애주기를 수정하도록 허용한다.

 형식 
객체는 그 소속 변수의 형식과 그 각각의 소속 함수(메서드)의 시그니처인 인터페이스로서 그 자료형을 표현한다.

 구조 
클래스는 문법적으로 서술되는 데이터 필드(혹은 프로퍼티, 필드, 데이터 멤버 변수, 혹은 속성)를 가진다. 이는 프로그램 런타임 시의 상태 변수와 연관되는 필드 형식과 이름들이며 이 상태 변수들은 클래스나 클래스의 특정 인스턴스에 속한다.

 행위 

클래스나 그 인스턴스의 행위 혹은 행동은 메서드를 통해 정의된다. 메서드는 객체나 클래스에 관해 작동할 수 있는 능력을 지닌 서브루틴이다. 이러한 작동들은 상태를 변경하거나 단순히 상태에 접근할 수 있는 방법을 제공한다.

 예시 
 C++에서 예 
다음은 C++에서 클래스의 예시다.

#include <iostream>

using namespace std;

class A {

    private:

    	int n;

    public:

    	A(int n = 0);   // 생성자 - 주로 객체의 상태(멤버변수 등)의 초기설정 등을 담당한다.
    	~A();           // 소멸자 - 객체 종료 시 필요한 조치를 취한다. 동적 변수 등의 제거를 하는 경우.

    	void SetN(int n);

    	int GetN();

};

A::A(int n) {

	this->n = n;

}

A::~A() {

}

void A::SetN(int n) {

	this->n = n;

	return;
}

int A::GetN() {

	return n;
}

int main() {

	A a;

	cout << a.GetN() << "\n";

	a.SetN(10);

	cout << a.GetN() << endl;

	return 0;
}

결과:
0
10

 C# 에서의 예 
using System;

namespace Main //클래스를 정의하기 위해 네임스페이스를 지정한다.
{
  class Program //클래스를 정의한다.
  {
   static void Main(string[] args) { //메소드를 지정한다. 이것은 메인메소드로 , 모든 C# 코드에 필수적이라고 할 수 있다.
      Console.WriteLine("Hello World"); // Hello World를 콘솔에 출력한다.
    }
  }
}
결과 :
Hello World

 같이 보기 
 C++
 표준 템플릿 라이브러리(STL)

 각주 


분류:객체 지향 프로그래밍