1. 중첩 클래스 (Nested Class)
중첩 클래스는 다른 클래스 내부에 선언된 클래스를 말합니다. 이 기능은 클래스 간의 논리적 그룹화와 캡슐화를 강화하는 데 유용합니다.
public class OuterClass
{
private int outerField = 10;
public class NestedClass
{
public void AccessOuterField(OuterClass outer)
{
Console.WriteLine(outer.outerField); // 외부 클래스의 private 멤버에 접근 가능
}
}
}
C#
복사
중첩 클래스의 주요 특징:
•
외부 클래스의 private 멤버에도 접근 가능
•
외부에 공개하고 싶지 않은 형식을 숨기는 데 유용
2. 분할 클래스 (Partial Class)
분할 클래스는 하나의 클래스 정의를 여러 소스 파일로 나누어 작성할 수 있게 해줍니다. 이는 대규모 프로젝트에서 코드 관리와 협업을 용이하게 합니다.
// File1.cs
public partial class MyClass
{
public void Method1() { /* ... */ }
}
// File2.cs
public partial class MyClass
{
public void Method2() { /* ... */ }
}
C#
복사
분할 클래스의 장점:
•
큰 클래스를 논리적 단위로 분리하여 관리 용이
•
팀 작업 시 병렬적인 개발 지원
3. 확장 메소드 (Extension Method)
확장 메소드는 기존 클래스의 기능을 확장하는 강력한 기능입니다. 원본 클래스의 소스 코드 수정 없이 새로운 메소드를 추가할 수 있습니다.
public static class StringExtensions
{
public static bool IsValidEmail(this string str)
{
// 이메일 유효성 검사 로직
return str.Contains("@") && str.Contains(".");
}
}
// 사용 예
string email = "example@example.com";
bool isValid = email.IsValidEmail();
C#
복사
확장 메소드의 특징:
•
기존 클래스를 수정하지 않고 새 기능 추가 가능
•
정적 클래스 내에 정의되며, 첫 매개변수에 this 키워드 사용
•
LINQ와 같은 강력한 기능의 기반
4. 구조체 (Struct)
구조체는 값 타입의 사용자 정의 타입입니다. 클래스와 유사하지만 몇 가지 중요한 차이점이 있습니다.
public struct Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int x, int y)
{
X = x;
Y = y;
}
public double DistanceFromOrigin()
{
return Math.Sqrt(X * X + Y * Y);
}
}
C#
복사
구조체 vs 클래스:
•
구조체는 값 형식, 클래스는 참조 형식
•
구조체는 스택에 할당, 클래스는 힙에 할당
•
구조체는 상속 불가능
•
읽기 전용(readonly) 구조체로 선언 가능
5. 튜플 (Tuple)
튜플은 여러 요소를 그룹화할 수 있는 간단한 방법을 제공합니다. C# 7.0부터 도입된 기능으로, 즉석에서 복합 데이터 타입을 만들 수 있습니다.
(string Name, int Age, double Height) person = ("John", 30, 175.5);
Console.WriteLine($"{person.Name} is {person.Age} years old and {person.Height}cm tall.");
// 분해(Deconstruction) 예시
var (name, age, height) = person;
C#
복사
튜플의 장점:
•
간단한 데이터 그룹화
•
메소드에서 여러 값 반환 가능
•
명명된 요소로 가독성 향상
참고 자료
•
박상현, "이것이 C#이다", 한빛미디어, 2023