본문 바로가기
🌐 유니티 (Unity)

Day 24 - C# (인스턴스 생성자 예제 1, 2)

by shin0707 2024. 5. 11.
728x90
반응형

  • 주제

>> 인스턴스 생성자(클래스의 인스턴스 사용, 추상클래스와 하위클래스)


  • 공부내용

인스턴스 생성자란?

: new 식으로 형식의 새 인스턴스를 만들 때, 실행되는 코드를 지정하기 위해 선언하는 것이다.

 

<예제 1>

좌표를 나타내는 Coords 클래스를 정의하고, 그 클래스의 인스턴스를 사용한다.

class Coords
{
    public int X { get; set; }
    public int Y { get; set; }
    
    public Coords()  //매개변수 없는 생성자
        : this(0, 0) //this 키워드를 사용하여 Coords(int x, int y)생성자를 호출 -> (0,0)으로 초기화
    {  }

    public Coords(int x, int y) //X와 Y 속성을 초기화하는 생성자
    {
        X = x;
        Y = y;
    }

    public override string ToString() => $"({X},{Y})"; //좌표를 문자열로 변환하여 반환하는 메서드
}

class Example
{
    static void Main()
    {
        var p1 = new Coords();
        Console.WriteLine($"Coords #1 at {p1}"); // Output: Coords #1 at (0,0)
        
        var p2 = new Coords(5, 3);
        Console.WriteLine($"Coords #2 at {p2}"); // Output: Coords #2 at (5,3)
        
        //ToString()메서드가 자동으로 호출되어 좌표가 문자열로 변환되어 출력됨
    }
}

<예제 2>

Shape 추상클래스와 그것을 구현하는 하위클래스들을 정의하고, 이를 사용하여 원과 원기둥의 면적을 계산한다.

abstract class Shape
{
    public const double pi = Math.PI;
    protected double x, y; //보호된 멤버 변수를 정의

    public Shape(double x, double y) //생성자는 두개의 매개변수를 받아 x, y를 초기화
    {
        this.x = x;
        this.y = y;
    }

    public abstract double Area(); //면적을 계산하는 메서드(하위클래스에서 구현 필요)
}

class Circle : Shape //Shape 클래스의 하위클래스
{
    public Circle(double radius) //원의 반지름을 받는 생성자 정의
        : base(radius, 0)        //원은 높이가 없으므로 y를 0으로 설정
    {  }

    public override double Area() => pi * x * x; //Area메서드를 구현하여 원의 면적을 계산
}

class Cylinder : Circle //Circle 클래스의 하위클래스
{
    public Cylinder(double radius, double height) //원기둥의 반지름과 높이를 받는 생성자 정의
        : base(radius)
    {
        y = height;  //원기둥의 높이 y를 초기화
    }

    public override double Area() => (2 * base.Area()) + (2 * pi * x * y); //원기둥 전체 면적 계산
}

class Example
{
    static void Main()
    {
        double radius = 2.5; //반지름 값 설정
        double height = 3.0; //높이 값 설정

        var ring = new Circle(radius); //원의 면적 계산하여 출력
        Console.WriteLine($"Area of the circle = {ring.Area():F2}");
        // Output: Area of the circle = 19.63
        
        var tube = new Cylinder(radius, height); //원기둥의 면적 계산하여 출력
        Console.WriteLine($"Area of the cylinder = {tube.Area():F2}");
        // Output: Area of the cylinder = 86.39
    }
}
728x90
반응형