클래스 (컴퓨터 프로그래밍)
클래스(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같이 보기
[편집]- C++
- 표준 템플릿 라이브러리(STL)
각주
[편집]- ↑ Gamma 외. 1995, 14쪽.
- ↑ Bruce 2002, 2.1 Objects, classes, and object types, https://books.google.com/books?id=9NGWq3K1RwUC&pg=PA18.