C# 객체와 클래스의 기본 개념
다른 객체 지향 프로그래밍 언어와 마찬가지로 C# 역시 객체(Object)와 클래스(Class)라는 핵심 개념을 중심으로 동작합니다. 객체는 현실 세계에 존재하는 실체를 표현하며, 클래스의 인스턴스(instance)라고 부릅니다. 쉽게 말해 클래스가 '설계도'라면, 객체는 그 설계도를 바탕으로 실제로 만들어진 '물건'이라고 이해하면 됩니다.
객체를 사용하면 클래스 내부에 정의된 멤버 변수와 메서드에 접근할 수 있습니다.
점(.) 연산자로 클래스 멤버에 접근하기
클래스 멤버에 접근하려면 객체 이름 뒤에 점(.) 연산자를 붙여야 합니다. 점 연산자는 객체 이름과 멤버 이름을 연결하는 역할을 하며, 다음과 같은 형식으로 사용합니다.
Box Box1 = new Box();
위 코드에서 Box1이 바로 새롭게 생성된 객체입니다. 이 객체를 통해 클래스의 멤버 변수에 접근할 수 있습니다.
Box1.height = 7.0;
멤버 함수(메서드)를 호출할 때도 같은 방식을 사용합니다.
Box1.getVolume();
new 연산자의 역할
C#에서 객체 생성은 new 키워드를 통해 이루어집니다. new 연산자는 다음 두 가지 작업을 수행합니다.
- 힙(heap) 메모리에 객체를 저장할 공간을 할당합니다.
- 클래스의 생성자를 호출하여 객체를 초기화합니다.
즉, Box Box1 = new Box(); 구문은 'Box 타입의 참조 변수 Box1을 선언하고, new 연산자로 새로운 Box 객체를 생성해 그 주소를 Box1에 할당한다'는 의미입니다.
예제: 객체와 클래스의 동작 살펴보기
아래 예제는 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
코드 해설
Box1은 길이 6.0, 너비 7.0, 높이 5.0으로 설정되었으므로 부피는 6 × 7 × 5 = 210이 됩니다. 마찬가지로 Box2는 12 × 13 × 10 = 1560입니다.
이처럼 하나의 클래스로부터 서로 다른 상태(멤버 변수 값)를 가진 여러 객체를 독립적으로 생성할 수 있다는 것이 객체 지향 프로그래밍의 핵심 장점입니다.