본문 바로가기

   
Programming/C#

Constructor(생성자) 오버로딩

반응형

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Test

{

       class Constructor

       {

             public static void Main(string[] args)

             {

                    //Constructor(생성자 = 모든방을 초기화 해준다.)

                    //-객체를 생성할때 자동으로 호출되는 메서드

                    //-역할 : 객체의 멤버를 초기화

                    //-특징 : 메서드 의 이름이 클래스의 이름과 동일

                    //-오버로딩이 가능하다.

 

                    //-우리가 생성자를 선언하지 않으면 기본 생성자라는 게 자동으로 생성(무조건)

                    // 1. 접근 지정자 public

                    // 2. 클래스 이름과 동일하게..

                    // 3. 반환값X, 인자값X

                    // 4. 자동으로 멤버 초기화 구문을 추가

                    // 5. 기본 생성자를 우리가 명시적으로 생성 가능!!

                    // 초기화는 값형태만된다.

 

                    //자료형 참조변수 = new연산자 => 생성자();                 

                    Test t1 = new Test();

                    Console.WriteLine(t1.n);

                    Console.WriteLine(t1.s);

 

                    Time time = new Time();

                    time.Check();

 

                    //60분 객체

                    // m : null -> 10 -> 60

                    Time time2 = new Time();

                    time2.SetTime(60);

                    time2.Check();

 

                    //m : null -> 60

                    Time time3 = new Time(60);

                    time3.Check();

 

                    //생성자 오버로딩의 장점

                    // - 원하는 형태의 객체를 다양하게 생성

 

             }

       }

 

       class Time

       {

             //분 저장

             private int m;

 

             //이제부터 m의 기본 값은 10

             public Time()

             {

                    this.m = 10;

             }

 

             public Time(int m)

             {

                    this.m = m;

             }

 

             public void Check()

             {

                    Console.WriteLine(this.m);

                    Console.WriteLine("객체가 막 생성되었습니다.");

             }

 

             public void SetTime(int m)

             {

                    //멤버 변수보다 지역변수가 더 우선 순위가 높다.(자식이기는 부모없다.)

                    //m = m;

                    this.m = m;

             }

 

       }

 

       class Test

       {

             public int n;

             public string s;

 

             //기본 생성자는 인자값이 없다.

             /*--------------------------------------

              * 이구문이 c# 내부 코드 에 정의 되어 있어 모든 형태에 값을 초기화 해준다.

             public Test()

             {

                    //생성자의 역활 -> 멤버 초기화 전용 메서드

                    this.n = 0;

                 this.s = null;

             }

              --------------------------------------*/

       }

}

 



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ConsoleEx

{

       //Ex86_ctor.cs

       class Ex86_ctor

       {

             static void Main(string[] args)

             {

                    Time t1 = new Time();

                    t1.CheckTime();

 

                    Time t2 = new Time(2, 150);

                    t2.CheckTime();

 

                    Time t3 = new Time(100);

                    t3.CheckTime();

             }

       }

 

       //DateTime

       class Time

       {

             private int hour;//

             private int min;//

 

             //12:00 초기화 - 기본 생성자

             public Time()

             {

                    this.hour = 12;

                    this.min = 0;

             }

 

             //추가] 원하는 시,분으로 객체를 생성했으면..

             public Time(int hour, int min)

             {

                    if (hour >= 0)

                           this.hour = hour;

 

                    if (min >= 0)

                    {

                           if (min >= 60)// new Time(5, 80)

                           {

                                 this.hour = this.hour + min / 60;//6

                                 this.min = min % 60;//20

                           }

                           else

                           {

                                 this.min = min;

                           }

                    }

             }

 

             //추가] 편의성 : new Time(100);

             public Time(int min)

             {

                    if (min >= 60)

                    {

                           this.hour = min / 60;//1

                           this.min = min % 60;//40

                    }

                    else if (min >= 0)

                    {

                           this.hour = 0;

                           this.min = min;

                    }

             }

 

 

             //확인 메서드

             public void CheckTime()

             {

                    Console.WriteLine("{0} : {1}", this.hour, this.min);

             }

       }

}

 




using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Test

{

       class Ctor03

       {

             static void Main(string[] args)

             {

                    //Test t = new Test();

                    //Console.WriteLine(t.n);

                    //Console.WriteLine(Test.m);

 

                    //정적변수 m 20으로 초기화하기 위해서 사용하지도 않을 Test 객체 t1을 생성

                    Console.WriteLine(Test.m);

             }

 

             class Test

             {

                    public int n;

                    public static int m;

 

                    //객체 생성자

                    //객체 멤버를 초기화

                    public Test()

                    {

                           this.n = 10;                    

                    }

 

                    //접근 지정자가 없다.

                    //정적생성자 : 객체 멤버는 초기화 할수 없다 오로지 정적 멤버만 초기화가 가능하다.

                    //-Main() 메서드 실행전에 자동으로 호출

                    static Test()

                    {

                           Test.m = 20;

                    }

             }

       }

}

 

--------------------------------------------간편화-------------------------------------------- 

             //추가] 원하는 시,분으로 객체를 생성했으면..

             public Time(int hour, int min)

             {

                    if (hour >= 0)

                           this.hour = hour;

 

                    if (min >= 0)

                    {

                           if (min >= 60)// new Time(5, 80)

                           {

                                 this.hour = this.hour + min / 60;//6

                                 this.min = min % 60;//20

                           }

                           else

                           {

                                 this.min = min;

                           }

                    }

             }

 

             //추가] 편의성 : new Time(100);

             public Time(int min)

             {

                    if (min >= 60)

                    {

                           this.hour = min / 60;//1

                           this.min = min % 60;//40

                    }

                    else if (min >= 0)

                    {

                           this.hour = 0;

                           this.min = min;

                    }

             }

 

                                               public Time(int min) : this (0, min) {}

--------------------------------------------간편화--------------------------------------------

 



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Test

{

       class Ctor04

       {

             static void Main(string[] args)

             {

                    //인스턴스를 생성하는 이유는 데이터 저장

                    //클래스 내부에 따로 데이터 저장이 없고 메소드만 선언 되어 있따면 static 형태로 선언 하는 것이 좋다.

 

                    //Test t = new Test();

                    //t.Plus(10, 20);

                    //t.Minus(10, 3);               

 

                    Test.Plus(5, 4);

                    Test.Minus(1, 4);

             }

 

             class Test

             {

                    //객체 생성 방지

                    private Test()

                    {

 

                    }

 

                    public static void Plus(int a, int b)

                    {

                           Console.WriteLine(a + b);

                    }

 

                    public static void Minus(int a, int b)

                    {

                           Console.WriteLine(a - b);

                    }

             }

       }

}

 


반응형