본문으로 이동

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

위키백과, 우리 모두의 백과사전.

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

프로그래밍 언어가 상속을 지원하는 경우에 클래스는 다른 클래스를 기반으로 하여, 그 상태와 행위에 더해 특화된 상태와 행위를 가질 수 있다. 이 때 특화되는 클래스를 서브클래스(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

같이 보기

[편집]

각주

[편집]
  1. Gamma 외. 1995, 14쪽.
  2. Bruce 2002, 2.1 Objects, classes, and object types, https://books.google.com/books?id=9NGWq3K1RwUC&pg=PA18.