Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 클래스 메서드와 클래스 멤버의 차이점 완벽 정리

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 멤버 변수에 안전하게 접근할 수 있는 창구 역할을 하며, 바로 이러한 구조가 객체 지향 프로그래밍의 핵심 개념인 캡슐화를 가능하게 합니다.