생성자를 보면 가끔 this() 와 base()를 상속하는 경우를 종종 볼 수 있다.
과연..이게 멀까 고민하다가 적어둔다.
1. this - this는 객체 자신에 대한 참조값을 나타내는 값으로도 많이 사용되어 지는 키워드 이다.
이런 this 키워드는 생성자를 호출 할때도 사용되어 지는데 예를 들면 다음과 같다.
public FPS(Game game) : this(game, false, true) { }
public FPS(Game game, bool synchWithVerticalRetrace, bool isFixedTimeStep)
: this(game, synchWithVerticalRetrace, isFixedTimeStep, game.TargetElapsedTime) { }
public FPS(Game game, bool synchWithVerticalRetrace, bool isFixedTimeStep, TimeSpan targetElapsedTime) : base(game)
위의 예제는 XNA로 FPS 게임컨포넌트를 만들고 있는 FPS생성자의 예이다.
위의 예제를 보면 총 3개의 생성자가 있는데 위의 2개의 생성자에서는 this()가 사용되어 지고 있다.
구성은 간단하다. 첫번째 줄의 this는 두번째 생성자를 호출하고 두번째 생성자의 this는 세번째 생성자를 호출하고 있다.(매개변수의 수를 보면 금방 알수 있다)
이렇게 복잡하게 자신의 생성자를 호출해야 되는 이유는 중복작업을 없애고 자신의 생성자를 재이용하기 위해서 이다.
2. base - base키워드는 상속받은 아버지를 참조하는 유일한 참조변수로 아버지의 메서드를 사용하고 싶을때 사용할 수 있다.
근데 만약 아버지 생성자에 매개변수가 존재한다면....근데 아들이 이 아버지를 상속받기 위해서는 최소한 아버지의 생성자를 호출해줄 의무가 생기는 것이다.
위의 마지막 생성자에서
base(game) 을 보면 알 수 있듯 상속을 받기 위하여 아버지의 생성자 내의 매개변수의 형과 개수를 맞춰주고 있는것이다.