C# 클래스 멤버와 메서드, 무엇이 다를까?
C#에서 클래스 멤버(class member)는 클래스를 구성하는 모든 요소를 뜻하며, 데이터를 담는 멤버 변수(필드)와 동작을 수행하는 멤버 함수(메서드)로 나눌 수 있습니다. 두 요소는 서로 긴밀하게 협력하는데, 메서드가 멤버 변수를 읽고 수정하면서 객체의 상태를 관리합니다.
클래스 메서드(멤버 함수)란?
메서드(method), 즉 멤버 함수는 일반 변수처럼 클래스 정의 내부에 정의 또는 원형(prototype)을 두는 함수입니다. 메서드는 자신이 속한 클래스의 어떤 객체에 대해서도 동작할 수 있으며, 해당 객체가 가진 모든 클래스 멤버에 자유롭게 접근할 수 있습니다.
다음은 박스(Box) 객체의 길이와 너비를 설정하는 메서드의 예시입니다.
public void setLength( double len ) {
length = len;
}
public void setBreadth( double bre ) {
breadth = bre;
}
클래스 멤버 함수 접근 예제
아래 예제는 C#에서 객체를 통해 클래스 멤버 함수를 호출하고, 그 결과를 확인하는 전체 과정을 보여줍니다.
예제
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(); // Box 타입의 Box2 선언
double volume;
// box 1 사양 설정
Box1.setLength(8.0);
Box1.setBreadth(9.0);
Box1.setHeight(7.0);
// box 2 사양 설정
Box2.setLength(18.0);
Box2.setBreadth(20.0);
Box2.setHeight(17.0);
// box 1 부피 계산
volume = Box1.getVolume();
Console.WriteLine("Volume of Box1 : {0}" ,volume);
// box 2 부피 계산
volume = Box2.getVolume();
Console.WriteLine("Volume of Box2 : {0}", volume);
Console.ReadKey();
}
}
}
실행 결과
Volume of Box1 : 504 Volume of Box2 : 6120
클래스 멤버(멤버 변수)란?
멤버 변수(member variable), 즉 클래스 멤버는 설계 관점에서 객체의 속성(attribute)에 해당합니다. 캡슐화(encapsulation)를 구현하기 위해 일반적으로 private으로 선언되며, 외부에서는 public 멤버 함수를 통해서만 접근할 수 있습니다.
예를 들어 아래 코드에서 length와 width가 멤버 변수인 이유는, Rectangle 클래스의 새 인스턴스가 생성될 때마다 이 변수들도 각 인스턴스마다 따로 만들어지기 때문입니다.
예제
using System;
namespace RectangleApplication {
class Rectangle {
// 멤버 변수
private double length;
private double width;
public void Acceptdetails() {
length = 10;
width = 14;
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
실행 결과
Length: 10 Width: 14 Area: 140
클래스 멤버 vs 클래스 메서드 핵심 차이
| 구분 | 클래스 멤버(멤버 변수) | 클래스 메서드(멤버 함수) |
|---|---|---|
| 역할 | 객체의 상태와 속성을 저장 | 객체의 동작(기능)을 정의 |
| 선언 방식 | 캡슐화를 위해 주로 private으로 선언 | 외부 호출을 위해 주로 public으로 선언 |
| 접근 방법 | public 멤버 함수를 통해서만 접근 가능 | 객체 참조를 통해 직접 호출 |
| 생명 주기 | 인스턴스마다 별도로 생성됨 | 모든 인스턴스가 공유하여 사용 |
정리하면, 클래스 멤버(멤버 변수)는 객체가 '무엇을 가지고 있는지'를 나타내는 데이터이고, 클래스 메서드(멤버 함수)는 객체가 '무엇을 할 수 있는지'를 정의하는 동작입니다. 메서드는 private 멤버 변수에 안전하게 접근할 수 있는 창구 역할을 하며, 바로 이러한 구조가 객체 지향 프로그래밍의 핵심 개념인 캡슐화를 가능하게 합니다.