C# 클래스 인스턴스의 기본 개념
클래스 인스턴스(class instance)는 곧 객체(Object)를 의미합니다. 다른 모든 객체 지향 프로그래밍 언어와 마찬가지로 C#에도 객체와 클래스라는 핵심 개념이 존재합니다. 객체는 현실 세계의 실체(real-world entity)를 표현하는 것으로, 클래스의 구체적인 실현(instance)이라고 할 수 있습니다. 그리고 우리는 이 객체를 통해 클래스의 멤버들에 접근하게 됩니다.
쉽게 비유하자면, 클래스는 '설계도'이고 인스턴스는 그 설계도를 바탕으로 실제로 만들어진 '제품'입니다. 하나의 클래스로부터 여러 개의 독립적인 인스턴스를 생성할 수 있으며, 각 인스턴스는 서로 다른 상태(데이터)를 가질 수 있습니다.
점(.) 연산자로 클래스 멤버 접근하기
클래스의 멤버에 접근하려면 객체 이름 뒤에 점(.) 연산자를 사용해야 합니다. 점 연산자는 객체의 이름과 멤버의 이름을 연결하는 역할을 하며, 필드 접근과 메서드 호출 모두에 활용됩니다.
먼저 new 키워드를 사용하여 객체를 생성하는 방법은 다음과 같습니다.
Box Box1 = new Box();
위 코드에서 Box1이 바로 우리가 생성한 객체입니다. 이 객체를 통해 클래스 내부의 멤버 변수에 접근할 수 있습니다.
Box1.height = 7.0;
뿐만 아니라 객체를 사용하면 멤버 함수(메서드)도 호출할 수 있습니다.
Box1.getVolume();
C# 객체와 클래스 동작 예제
다음 예제는 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
예제 분석
위 예제의 핵심 포인트를 정리하면 다음과 같습니다.
1. 캡슐화(Encapsulation): length, breadth, height 필드는 private으로 선언되어 외부에서 직접 접근할 수 없으며, setLength() 같은 public 메서드를 통해서만 값을 설정할 수 있습니다.
2. 독립적인 인스턴스: Box1과 Box2는 같은 Box 클래스에서 생성되었지만, 각각 고유한 데이터를 가집니다. Box1은 6×7×5, Box2는 12×13×10 크기로 서로 다른 상태를 유지합니다.
3. 메서드 호출: getVolume() 메서드는 각 객체의 자신만의 필드 값을 사용해 부피를 계산하므로, Box1은 210, Box2는 1560이라는 서로 다른 결과를 반환합니다.
이처럼 C#에서 클래스는 객체를 만들기 위한 청사진 역할을 하며, new 키워드로 생성된 각 인스턴스는 독립적인 메모리 공간과 상태를 가지게 됩니다. 점(.) 연산자를 활용하면 객체의 필드와 메서드에 손쉽게 접근할 수 있습니다.