Search

이것이 C#이다: 7장 - 클래스 (3/3)

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