산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# 중첩 클래스(Nested Class) 이해: 정의, 사용법, 상속

C# 중첩 클래스 (Nested Class) 이해하기

실전 예제로 C# 중첩 클래스 정의, 접근, 상속 모범 사례 시연.

C#에서 클래스 내부에 다른 클래스 선언 가능. 내부 타입을 중첩 클래스(Nested Class)라 함. 예:

class OuterClass {
    // 외부 멤버
    class InnerClass {
        // 내부 멤버
    }
}

InnerClass가 OuterClass 안에 생성. 내부 타입은 접근 한정자 허용 범위 외에는 외부 타입에서만 가시적.


중첩 클래스 멤버 접근

중첩 타입 작업 위해 각 클래스 별도 인스턴스화.

1. 외부 클래스 인스턴스 생성

OuterClass outer = new OuterClass();

outer는 OuterClass 객체.

2. 중첩 클래스 인스턴스 생성

OuterClass.InnerClass inner = new OuterClass.InnerClass();

InnerClass가 OuterClass 안에 중첩되어 외부 타입 이름으로 한정.

인스턴스화 후 객체 참조로 멤버 호출.

예제: 메서드 가진 중첩 클래스

using System;
namespace NestedClassDemo {
    public class Car {
        public void DisplayCar() => Console.WriteLine("Car: Bugatti");
        public class Engine {
            public void DisplayEngine() => Console.WriteLine("Engine: Petrol Engine");
        }
    }
    class Program {
        static void Main(string[] args) {
            Car sportsCar = new Car();
            sportsCar.DisplayCar();
            Car.Engine petrolEngine = new Car.Engine();
            petrolEngine.DisplayEngine();
            Console.ReadLine();
        }
    }
}

출력

Car: Bugatti
Engine: Petrol Engine

외부 Car와 중첩 Engine 객체 생성 후 메서드 호출.

외부 인스턴스에서 중첩 타입 메서드 직접 호출 불가:

// 잘못된 예
sportsCar.DisplayEngine();

중첩 클래스에서 외부 클래스 멤버 접근

중첩 클래스 포함 타입 멤버 참조 가능. 외부 타입 인스턴스나 정적 멤버용 외부 타입 이름 사용.

인스턴스로 인스턴스 멤버 접근

using System;
namespace NestedClassDemo {
    public class Car {
        public string Brand = "Bugatti";
        public class Engine {
            public void ShowBrand() {
                Car car = new Car();
                Console.WriteLine("Brand: " + car.Brand);
            }
        }
    }
    class Program {
        static void Main(string[] args) {
            Car.Engine engine = new Car.Engine();
            engine.ShowBrand();
            Console.ReadLine();
        }
    }
}

출력

Brand: Bugatti

인스턴스화 없이 정적 멤버 접근

using System;
namespace NestedClassDemo {
    public class Car {
        public static string Brand = "Bugatti";
        public class Engine {
            public void ShowBrand() {
                Console.WriteLine("Brand: " + Car.Brand);
            }
        }
    }
    class Program {
        static void Main(string[] args) {
            Car.Engine engine = new Car.Engine();
            engine.ShowBrand();
            Console.ReadLine();
        }
    }
}

출력

Brand: Bugatti

중첩 클래스 관련 상속

중첩 클래스도 일반 타입처럼 상속 참여 가능.

외부 클래스에서 파생

using System;
namespace NestedClassDemo {
    class Computer {
        public void Display() => Console.WriteLine("Method of Computer class");
        public class CPU {
            // 추가 멤버 가능
        }
    }
    class Laptop : Computer {
        // Laptop이 Computer 모든 멤버 상속
    }
    class Program {
        static void Main(string[] args) {
            Laptop laptop = new Laptop();
            laptop.Display();
            Console.ReadLine();
        }
    }
}

출력

Method of Computer class

중첩 클래스에서 파생

using System;
namespace NestedClassDemo {
    class Computer {
        public class CPU {
            public void Display() => Console.WriteLine("Method of CPU class");
        }
    }
    class Laptop : Computer.CPU {
        // Laptop이 Computer.CPU 멤버 상속
    }
    class Program {
        static void Main(string[] args) {
            Laptop laptop = new Laptop();
            laptop.Display();
            Console.ReadLine();
        }
    }
}

출력

Method of CPU class

중첩 클래스 상속 시 외부 클래스 이름으로 타입 한정 필수: Computer.CPU.

C 언어

  1. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  2. C# 접근 한정자 완전 이해: public, private, protected, internal 등
  3. C# 생성자(Constructor) 총정리: 종류, 예제, 고급 패턴
  4. C# static 키워드: 정적 변수, 메서드, 클래스 완벽 활용
  5. C# 추상 클래스와 추상 메서드: 실전 가이드
  6. C# 중첩 클래스(Nested Class) 이해: 정의, 사용법, 상속
  7. C# partial 클래스와 partial 메서드 이해하기
  8. C# sealed 클래스와 메서드: 상속/오버라이딩 제한으로 코드 안전성·성능 높이기
  9. C# 생성자 오버로딩 마스터하기: 유연한 클래스 설계
  10. C++ 다형성 이해하기: virtual 함수와 순수 가상 함수