-
C# Class는?IT/C# 2024. 11. 24. 09:29728x90반응형
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