본문 바로가기
dev, tech/Windows P

[펌] 4_13 this 키워드

by 구띵 2006. 1. 16.

 

 

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라는객체변수는아직만들어지지도않은자신의참조값이라는가정하에서클래스내에사용됩니다.그리고메모리가생성되면객체변수가가지는값과같은참조값을가지게되는것입니다.이렇게함으로써디자인타임에하나의이름으로자신을참조하고실행타임에서는각각에적용있는것입니다.

댓글