this()는클래스자신의생성자를호출할때도사용합니다.클래스내에서유일하게호출할수없는메서드가있습니다.이메서드가바로생성자(Constructor)입니다.이것을호출하는방법을제공하는것이바로this()입니다.
생성자는아무나호출할수있는것이아닙니다.객체의생성당시여러분이new연산자와같이명시해주는것이생성자입니다.그외의경우생성자를호출할수있는방법은없습니다.이렇게호출하기힘든생성자는유일하게this()를통해서호출할수있는방법이제공됩니다.
▣ this() |
q 클래스자신의생성자를호출할때도사용 q 자신의생성자를재이용하는것 q 다른생성자를호출할때생성자호출은제일윗부분에사용해야함 |
아래는this를이용하여생성자를호출하고있는예입니다.
& | ThisSelf.cs | Ü자신의생성자를호출하는this()를테스트한예제 |
using System; public class ThisSelf{ private string name; private int age; public ThisSelf():this("이름없음"){ Console.WriteLine("매개변수가없는생성자"); } public ThisSelf(string name) : this(name, -1){ Console.WriteLine("매개변수가1개있는생성자"); } public ThisSelf(string name, int age){ this.name = name; this.age = age; Console.WriteLine("name:" + name + " number:" + age); Console.WriteLine("매개변수가2개있는생성자"); } public static void ThisSelf ts1 = new ThisSelf(); ThisSelf ts2 = new ThisSelf("홍길동"); ThisSelf ts3 = new ThisSelf("김삿갓", 50); } } | ||
C:\C#Example\04>csc ThisSelf.cs C:\C#Example\04>ThisSelf name:이름없음 number:-1 매개변수가2개있는생성자 매개변수가1개있는생성자 매개변수가없는생성자 name:홍길동 number:-1 매개변수가2개있는생성자 매개변수가1개있는생성자 name:김삿갓 number:50 매개변수가2개있는생성자 |
1ThisSelf클래스의디폴트생성자를호출했을때
n this(“이름없음”)은ThisSelf(String name)생성자를호출합니다.
n 그리고ThisSelf(String name)생성자는다시this(name, -1)이라는곳에서ThisSelf(String name, int age)생성자를호출합니다.
그런데왜이렇게복잡한방법을이용하여,자신의생성자를호출하고있을까요?그답은알고나면별로복잡하지않습니다.자신의생성자를재이용하는것입니다.클래스를만들다보면,상당히많은작업을하나의생성자에서처리하게됩니다.그리고같은작업을다른생성자에서도해야한다면어떻게될까요. Copy&Paste해서사용할까요!여러분이클래스를디자인하다보면이러한현상은자주일어납니다.물론이것은생성자가중복이될때발생하는문제점입니다.그럴경우자신의생성자를호출할수있는방법이없어서작업이중복된다면객체지향의기본법칙을위배하는것입니다.
그래서this를이용해서생성자를호출하는방법을제공하고있는것입니다.여기서가장조심해야하는것은생성자에서다른생성자를호출할때,생성자호출은제일윗부분에사용해야한다는것입니다.마지막으로this의특징에대해서한번더정리해보겠습니다.
▣ this의특징 |
q 객체자신에대한참조값 q 매개변수와객체자신이가지고있는멤버필드의이름이같을경우이를구분하기위해자신이가지고있는변수앞에this를사용 q 객체생성자내에서다른생성자를호출하기위해사용 q 객체자신에대한참조값을메서드에전달하거나리턴해주기위해서도사용 q 디자인타임의this는객체가생성되는순간에객체변수가가지는값 q this를사용함으로써,모호하지않고좀더명확한프로그램을작성 |
'dev, tech > Windows P' 카테고리의 다른 글
메소드를 위한 상속성 키워드 (0) | 2006.01.16 |
---|---|
연산자 오버로딩 (0) | 2006.01.16 |
[펌] 4_13 this 키워드 (0) | 2006.01.16 |
[펌] 4_17 base 키워드 (0) | 2006.01.16 |
클래스의 생성자 실행 순서 (0) | 2006.01.16 |
댓글