[C#] 클래스: 객체지향 프로그래밍의 기초
안녕하세요! 이번 포스트에서는 C# 클래스에 대해 자세히 알아보겠습니다.
클래스란 무엇인가요?
클래스는 객체지향 프로그래밍에서 중요한 개념으로, 데이터와 해당 데이터를 다루는 메서드를 함께 묶어놓은 사용자 정의 데이터 타입입니다. 클래스를 사용하여 객체를 생성할 수 있으며, 이러한 객체는 클래스의 인스턴스입니다.
클래스의 구성 요소
필드 (Fields)
클래스 내부에 선언된 변수를 필드라고 합니다. 이러한 필드는 클래스의 상태를 나타내며, 클래스의 모든 메서드에서 사용할 수 있습니다.
public class Person
{
public string Name; // 필드 선언
public int Age;
}
메서드 (Methods)
메서드는 클래스 내부에 정의된 함수를 의미합니다. 이러한 메서드는 클래스가 수행할 수 있는 동작을 정의하며, 필드의 값을 조작하거나 다른 작업을 수행할 수 있습니다.
public class Person
{
public string Name;
public int Age;
// 메서드
public void DisplayInfo()
{
Console.WriteLine($"Name: {Name}, Age: {Age}");
}
}
생성자 (Constructors)
생성자는 클래스가 인스턴스화될 때 호출되는 특별한 메서드입니다. 주로 필드를 초기화하는 데 사용됩니다.
public class Person
{
public string Name;
public int Age;
// 생성자 선언
public Person(string name, int age)
{
Name = name;
Age = age;
}
public void DisplayInfo()
{
Console.WriteLine($"Name: {Name}, Age: {Age}");
}
}
클래스의 활용
클래스를 사용하여 객체를 생성하고 다양한 작업을 수행할 수 있습니다.
class Program
{
static void Main(string[] args)
{
// Person 클래스의 인스턴스 생성
Person person1 = new Person("John", 30);
Person person2 = new Person("Alice", 25);
// 메서드 호출
person1.DisplayInfo();
person2.DisplayInfo();
}
}
상속 (Inheritance)
C#에서는 상속을 통해 기존 클래스의 특성을 그대로 물려받아 새로운 클래스를 만들 수 있습니다.
public class Student : Person
{
public int StudentId;
public Student(string name, int age, int studentId) : base(name, age)
{
StudentId = studentId;
}
public void Study()
{
Console.WriteLine($"{Name} is studying.");
}
}
추상화란 무엇인가요?
추상화는 복잡한 시스템이나 개념을 간결하게 표현하는 과정을 의미합니다. 객체지향 프로그래밍에서는 추상화를 통해 클래스를 정의하고, 해당 클래스의 인스턴스를 생성하여 현실 세계의 개념을 모델링할 수 있습니다.
추상 클래스 (Abstract Classes)
추상 클래스는 하나 이상의 추상 메서드를 포함하는 클래스입니다. 추상 메서드는 선언만 있고 구현이 없는 메서드로, 해당 메서드를 상속받는 클래스에서 반드시 구현해야 합니다.
public abstract class Shape
{
public abstract double CalculateArea(); // 추상 메서드
}
인터페이스 (Interfaces)
인터페이스는 클래스가 구현해야 하는 메서드와 속성을 정의하는 역할을 합니다. 인터페이스를 통해 클래스 간의 통일된 계약을 정의할 수 있습니다.
public interface IShape
{
double CalculateArea(); // 메서드 선언만
}
추상화의 장점
- 모듈화: 클래스와 인터페이스를 사용하여 코드를 모듈화할 수 있습니다.
- 재사용성: 추상화를 통해 작성된 코드는 다른 프로젝트나 모듈에서 쉽게 재사용할 수 있습니다.
- 유지보수성: 추상화를 사용하면 코드의 유지보수성을 높일 수 있습니다.
예시: 도형 계층 구조
public abstract class Shape
{
public abstract double CalculateArea();
}
public class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public override double CalculateArea()
{
return Width * Height;
}
}
public class Circle : Shape
{
public double Radius { get; set; }
public override double CalculateArea()
{
return Math.PI * Radius * Radius;
}
}
도형 계층 구조는 다양한 도형들을 객체지향적으로 모델링하는 방법입니다. 이러한 모델링은 클래스의 상속과 다형성을 통해 구현됩니다. 주로 추상 클래스나 인터페이스를 사용하여 공통된 특성을 정의하고, 각 도형의 특징을 구체적으로 정의합니다.
예시: 도형 계층 구조 구현
추상 클래스 Shape
먼저, 모든 도형에 대한 공통적인 특성을 정의하는 추상 클래스인 Shape을 만듭니다. 이 클래스는 도형의 면적을 계산하는 추상 메서드인 CalculateArea()를 포함합니다.
public abstract class Shape
{
public abstract double CalculateArea();
}
구체 클래스 Rectangle
사각형을 나타내는 클래스인 Rectangle은 Shape 클래스를 상속받아 구현합니다. 사각형은 너비와 높이를 가지고 있으므로 이를 필드로 추가하고, CalculateArea() 메서드를 구현합니다.
public class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public override double CalculateArea()
{
return Width * Height;
}
}
구체 클래스 Circle
원을 나타내는 클래스인 Circle도 Shape 클래스를 상속받아 구현합니다. 원은 반지름을 가지고 있으므로 이를 필드로 추가하고, CalculateArea() 메서드를 구현합니다.
public class Circle : Shape
{
public double Radius { get; set; }
public override double CalculateArea()
{
return Math.PI * Radius * Radius;
}
}
도형 계층 구조의 활용
위에서 정의한 도형 클래스들은 다음과 같이 사용할 수 있습니다.
class Program
{
static void Main(string[] args)
{
Rectangle rectangle = new Rectangle { Width = 5, Height = 3 };
Circle circle = new Circle { Radius = 2 };
double rectangleArea = rectangle.CalculateArea();
double circleArea = circle.CalculateArea();
Console.WriteLine($"사각형의 면적: {rectangleArea}");
Console.WriteLine($"원의 면적: {circleArea}");
}
}
'Programming > C#' 카테고리의 다른 글
C# 생성자와 소멸자 객체 생명주기의 시작과 끝 (0) | 2024.06.09 |
---|---|
C# 메서드 코드의 재사용과 모듈화 (0) | 2024.06.09 |
C# 반복문 for, foreach, while, do~while (0) | 2024.06.09 |
C# 조건문 if, else if, else, switch, 삼항(?:) (0) | 2024.06.09 |
C# 자료형 변환 (0) | 2024.06.09 |