ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# Class는?
    IT/C# 2024. 11. 24. 09:29
    728x90
    반응형

    C#에서 **클래스(Class)**는 객체 지향 프로그래밍(OOP)의 핵심 요소로, 데이터와 메서드를 하나의 논리적 단위로 묶는 데 사용됩니다. 클래스는 객체(Object)를 생성하는 청사진(템플릿) 역할을 하며, 코드의 재사용성과 유지보수성을 높여줍니다.


    1. 클래스의 기본 구조

    클래스는 필드, 속성, 메서드, 생성자, 소멸자 등의 구성 요소를 포함합니다.

    using System;
    
    namespace Example
    {
        public class Person
        {
            // 필드 (Field)
            private string name;
    
            // 속성 (Property)
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            // 생성자 (Constructor)
            public Person(string name)
            {
                this.name = name;
            }
    
            // 메서드 (Method)
            public void Greet()
            {
                Console.WriteLine($"Hello, my name is {name}.");
            }
        }
    }
    

    2. 클래스의 주요 구성 요소

    (1) 필드 (Field)

    • 클래스 내부에서 데이터를 저장하는 변수.
    • 보통 private 접근 제한자를 사용하여 외부 접근을 차단.
    private int age;
    

    (2) 속성 (Property)

    • 필드에 대한 읽기/쓰기 접근을 제어하는 인터페이스.
    • C#의 속성은 get과 set 접근자를 통해 구현.
    public int Age
    {
        get { return age; }
        set { age = value; }
    }
    
    • 자동 구현 속성
      public string Name { get; set; } = "Unknown";
      

    (3) 메서드 (Method)

    • 클래스가 수행할 작업을 정의.
    • public, private 등 접근 제한자를 통해 메서드의 접근 범위를 지정.
    public void SayHello()
    {
        Console.WriteLine("Hello!");
    }
    

    (4) 생성자 (Constructor)

    • 객체 생성 시 호출되며, 필드나 속성을 초기화.
    • 생성자의 이름은 클래스 이름과 동일.
    public Person(string name)
    {
        this.name = name;
    }
    

    (5) 소멸자 (Destructor)

    • 객체가 메모리에서 해제될 때 호출.
    • 거의 사용되지 않으며, 가비지 컬렉터가 자동으로 메모리를 관리.
    ~Person()
    {
        Console.WriteLine("Object is destroyed.");
    }
    

    3. 클래스의 접근 제한자

    클래스와 멤버에 적용 가능한 접근 제한자는 다음과 같습니다.

    • public: 모든 곳에서 접근 가능.
    • private: 클래스 내부에서만 접근 가능.
    • protected: 클래스와 이를 상속받는 클래스에서만 접근 가능.
    • internal: 동일 어셈블리 내에서 접근 가능.
    • protected internal: 동일 어셈블리 또는 상속받은 클래스에서 접근 가능.

    4. 클래스와 객체

    객체 생성

    클래스를 기반으로 객체를 생성하려면 new 키워드를 사용.

    Person person = new Person("Alice");
    person.Greet(); // 출력: Hello, my name is Alice.
    

    참조와 값

    • 객체는 참조 타입으로, 메모리의 힙(Heap) 영역에 저장.
    • 같은 객체를 참조하는 변수는 동일한 데이터를 공유.

    5. 클래스의 상속

    C#에서는 : 기호를 사용해 상속을 구현.

    기본 상속

    public class Animal
    {
        public void Eat() => Console.WriteLine("I can eat.");
    }
    
    public class Dog : Animal
    {
        public void Bark() => Console.WriteLine("I can bark.");
    }
    
    Dog dog = new Dog();
    dog.Eat();  // 부모 클래스 메서드
    dog.Bark(); // 자식 클래스 메서드
    

    다형성 (Polymorphism)

    • virtual, override 키워드를 사용하여 메서드의 동작을 변경.
    public class Animal
    {
        public virtual void Speak() => Console.WriteLine("Animal sound");
    }
    
    public class Dog : Animal
    {
        public override void Speak() => Console.WriteLine("Bark");
    }
    

    6. 정적 멤버 (Static Members)

    • 클래스에 속하며, 객체를 생성하지 않고도 접근 가능.
    public class Calculator
    {
        public static int Add(int a, int b) => a + b;
    }
    
    int result = Calculator.Add(3, 5); // 8
    

    7. 인터페이스와 클래스

    클래스는 인터페이스를 구현하여 특정 계약을 따를 수 있습니다.

    public interface IShape
    {
        double GetArea();
    }
    
    public class Circle : IShape
    {
        public double Radius { get; set; }
        public double GetArea() => Math.PI * Radius * Radius;
    }
    

    8. 클래스의 주요 키워드

    • abstract: 추상 클래스를 정의. 직접 인스턴스를 생성할 수 없음.
    • sealed: 상속 불가능한 클래스를 정의.
    • partial: 클래스를 여러 파일로 나눌 수 있음.
    • this: 현재 인스턴스를 참조.

    9. 예제: 실용적인 클래스

    public class BankAccount
    {
        public string Owner { get; set; }
        private decimal balance;
    
        public BankAccount(string owner, decimal initialBalance)
        {
            Owner = owner;
            balance = initialBalance;
        }
    
        public void Deposit(decimal amount)
        {
            if (amount > 0)
                balance += amount;
        }
    
        public void Withdraw(decimal amount)
        {
            if (amount > 0 && amount <= balance)
                balance -= amount;
        }
    
        public void DisplayBalance()
        {
            Console.WriteLine($"Owner: {Owner}, Balance: {balance:C}");
        }
    }
    
    BankAccount account = new BankAccount("Alice", 1000);
    account.Deposit(500);
    account.Withdraw(200);
    account.DisplayBalance(); // 출력: Owner: Alice, Balance: $1,300.00
    

    C# 클래스는 강력한 데이터 캡슐화, 상속, 다형성, 재사용성을 제공하며, 대규모 애플리케이션 개발에 적합합니다.

    728x90

    'IT > C#' 카테고리의 다른 글

    C#과 VB.NET의 차이  (41) 2024.11.25
    C# 개발툴은?  (38) 2024.11.24
    C# 기본 문법  (42) 2024.11.24
    C# 데이터 유형은?  (0) 2024.11.24
    C# 이란?  (41) 2024.11.24
Designed by Tistory.