this란클래스내에서클래스가가지고있는멤버필드또는멤버메서드를직접참조할수있는자신의참조변수입니다. this를사용할때는3가지방법을이용하고있습니다.그예는아래와같습니다.
1this를사용하는곳
n 자신의멤버를가리키는this(this.멤버)
n 홀로사용되는this
n 생성자를호출하는this()
이예를하나하나알아보면서this의개념에접근하겠습니다.먼저this에대한정의를내리겠습니다. this를다음과같이이야기할수있습니다.
▣ this에대한정리 |
q 자신을참조하는this를이용하여멤버를이용할수있다. q 디자인타임에자기자신을직접참조할수있는참조변수이다. q 디자인타임에자기자신을참조할수있는유일한키워드이다. |
자기가자기자신을참조한다는의미가무엇일까요.분명히여러분은this를클래스의디자인타임에사용할수있습니다. this는디자인타임에사용하는것이지,실행타임에this를 사용하는것은아닙니다.즉,클래스안에서만사용하지클래스를벗어나면사용할수없다는뜻입니다.그리고이말은Main()메서드내에서this를사용할수없는것과도관련이있습니다.즉, Main()메서드는static메서드이기때문에사용할수없는것입니다.
☞ 디자인타임 | 데이터타입을만든다는것은클래스를만든다는것과동일한개념입니다.즉,아직미완성의데이터타입즉,클래스를하나디자인하고있는때를말합니다.클래스를만들기위해서코딩하고있는순간을의미합니다. |
클래스를디자인할때는아직메모리가할당않은순간입니다.언젠가는할당되겠죠.하지만언젠가할당될주소의참조값은아직미정입니다.객체를생성하기전단계의그주소를this라고칭하고,할당되는순간this에게할당된메모리의참조값을넘겨주게됩니다.
this는디자인타임에서실행타임의주소를아는것처럼행동할수있습니다.제가설명해놓고도모호하네요.그렇다면이렇게해보십시오. this를‘언젠가생성될객체메모리의참조’라는간단한단어로바꾸어서해석해보십시오.즉,클래스를디자인하고있을때는메모리와전혀관련이없습니다.하지만디자인하고있을때,어떻게언제가생성될지도모를자신을지칭할수있을까요?이것을this키워드를통해서해결하고있습니다.다음의그림을분석하면서해결해보도록하겠습니다.
그림4-6자신을참조하는객체변수this
위의그림은this가초기화되는순간을보여주고있습니다.디자인타임에서클래스는아직데이터타입이기때문에메모리를할당하지않은상태입니다.클래스가객체를생성하여메모리를갖는순간생성된메모리의참조값을객체변수가가지게됩니다.
n Top t1 = new Top();
n Top t2 = new Top();
위의그림에서2개의참조값t1, t2를생성하고있습니다.문제는이참조값들은메모리가생성되는순간의참조값이라는것입니다.이것은일반적인방법입니다.각각의객체내의this는메모리가생성되는순간객체변수가가진참조값과동일한값을넘겨받게되는것입니다.
하지만, this는하나의클래스를만드는순간에자신을참조할수있는유일한가상의키워드입니다.디자인타임에클래스의메모리가생성되나요.아닙니다.그저하나의형태일뿐입니다.그렇다면어떻게this가생성되지도않은자신을참조할수있을까요?
디자인타임의this는아직은비어있다는가정하에서클래스를하나만듭니다.이클래스의객체를생성할때this에다각각의객체가할당받을참조값을넣어준다면디자인타임에서는하나의this이지만메모리가생성되는순간각각의객체에대한this가되는것입니다.
this라는객체변수는아직만들어지지도않은자신의참조값이라는가정하에서클래스내에사용됩니다.그리고메모리가생성되면객체변수가가지는값과같은참조값을가지게되는것입니다.이렇게함으로써디자인타임에하나의이름으로자신을참조하고실행타임에서는각각에적용될수있는것입니다.
'dev, tech > Windows P' 카테고리의 다른 글
연산자 오버로딩 (0) | 2006.01.16 |
---|---|
[펌] 4_16 생성자를 호출하는 this() (0) | 2006.01.16 |
[펌] 4_17 base 키워드 (0) | 2006.01.16 |
클래스의 생성자 실행 순서 (0) | 2006.01.16 |
클래스에 대한 깊은 이해 - 접근 권한 / 상속 권한 (0) | 2006.01.16 |
댓글