C#의 객체와 클래스란?
C#은 Java와 마찬가지로 객체 지향 프로그래밍 언어로, 클래스(Class)와 객체(Object)라는 핵심 개념을 사용합니다.
클래스는 객체를 만들기 위한 설계도(템플릿)입니다. 데이터(필드)와 동작(메서드)을 하나로 묶어 정의하며, 그 자체로는 실체가 아닙니다.
객체는 현실 세계의 실체를 프로그램으로 표현한 것으로, 클래스의 인스턴스(instance)입니다. 하나의 클래스로부터 여러 개의 독립적인 객체를 생성할 수 있으며, 객체를 통해서만 클래스의 멤버에 접근할 수 있습니다.
점(.) 연산자로 클래스 멤버 접근하기
클래스의 멤버(필드나 메서드)에 접근하려면 객체 이름 뒤에 점(.) 연산자를 붙여야 합니다. 점 연산자는 객체 이름과 멤버 이름을 연결하는 역할을 합니다.
먼저 new 키워드로 객체를 생성합니다.
Box Box1 = new Box();
위 코드에서 Box1이 바로 생성된 객체입니다. 이 객체를 사용해 멤버 변수에 값을 할당할 수 있습니다.
Box1.height = 3.0;
멤버 함수(메서드)를 호출할 때도 마찬가지로 점 연산자를 사용합니다.
Box1.getVolume();
예제 코드
다음 예제는 C#에서 객체와 클래스가 실제로 어떻게 동작하는지 보여줍니다. Box 클래스는 상자의 길이, 너비, 높이를 저장하고 부피를 계산하는 기능을 제공합니다.
using System;
namespace BoxApplication {
class Box {
private double length; // 상자의 길이
private double breadth; // 상자의 너비
private double height; // 상자의 높이
public void setLength( double len ) {
length = len;
}
public void setBreadth( double bre ) {
breadth = bre;
}
public void setHeight( double hei ) {
height = hei;
}
public double getVolume() {
return length * breadth * height;
}
}
class Boxtester {
static void Main(string[] args) {
// 두 개의 객체 생성
Box Box1 = new Box(); // Box 타입의 Box1 선언
Box Box2 = new Box();
double volume;
// 객체를 통해 멤버 함수 호출
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// Box2 사양 설정
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// Box1의 부피 계산
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}", volume);
// Box2의 부피 계산
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);
Console.ReadKey();
}
}
}실행 결과
Volume of Box1 : 210 Volume of Box2 : 1560
클래스와 객체의 차이점 한눈에 보기
| 구분 | 클래스 | 객체 |
|---|---|---|
| 개념 | 객체를 만들기 위한 설계도 | 클래스의 실제 인스턴스 |
| 메모리 | 선언 시에는 메모리가 할당되지 않음 | new로 생성될 때 메모리가 할당됨 |
| 개수 | 하나만 정의 | 하나의 클래스로 여러 개 생성 가능 |
| 역할 | 데이터와 동작의 구조 정의 | 실제 데이터를 담고 동작 수행 |
예제에서 Box1과 Box2는 동일한 Box 클래스로부터 생성된 두 개의 독립적인 객체입니다. 각 객체는 자신만의 length, breadth, height 값을 가지며, 같은 getVolume() 메서드를 호출했음에도 각각 210과 1560이라는 서로 다른 부피 값이 출력됩니다. 이것이 바로 클래스는 하나지만 객체는 여러 개 존재할 수 있다는 점, 그리고 각 객체가 독립적인 상태를 유지한다는 점을 잘 보여주는 예입니다.