IT_Programming/C#

static

JJun ™ 2006. 4. 7. 11:25

static을 붙인 변수와 메소드는 메모리에 고정이 되어있습니다.

그렇지 않은 경우에는 한번 쓰고 난 값은 사라지게 됩니다.

 

밑에 예제를 보겠습니다.

--------------------------------------------------------------------------------

 

log.cs (로그인에 관한 클래스 파일)

--------------------------------------------------------------------------------

string user_id;

 

// 변수를 보호하기 위해서 public인 userid라는 프로퍼티를 만든다.

public string userid

{

        get

        {

                return user_id;

        }

        set

        {

        // user_id라는 변수에 입력받은 value 값을 넣어준다.

                user_id = value;

        }


---------------------------------------------------------------------------------

 

form1

---------------------------------------------------------------------------------

 

private void button1_Click(object sender, System.EventArgs e)

{

        log io = new log();

        log.userid = this.textBox1.Text.ToString();


        Form2 frm2 = new Form2();

        frm2.Show();

/*

    form1에서 log클래스의 인스턴스를 생성해서

    textBox1에 text값을 io.userid 에 넣어준다.

    그럼 set이 user_id로 text값를 넣어준다.(value)

*/

}


---------------------------------------------------------------------------------

form2

---------------------------------------------------------------------------------

 

private void Form2_Load(object sender, System.EventArgs e)

{

        log io = new log(); //새롭게 인스턴스를 한다.

        this.textBox2.Text = io.userid

// 프로퍼티 get으로 얻은 user_id값을  textBox2.Text 넣는다.

}

 

// 결과: 하지만 textBox2.Text에는 아무것도 들어가지 않습니다.


======================================================================

 

위의 예제는 올바르지 않습니다.

static을 써주지 않았기 때문에 메모리에 Form1에서 넘어온 값이 사라지게 됩니다.

그렇기 때문에 Form2에서 클래스의 인스턴스를 만들어서 실행하면

값이 나오지 않죠.

(클래스 파일의 껍데기만 들고 오는 것이 되기 때문에...^^;)

  

이것을 올바르게 고쳐 보겠습니다.

 

-----------------------------------------------------------------------------------

 

log.cs (로그인에 관한 클래스 파일)

-----------------------------------------------------------------------------------

 

static string user_id;

// 변수를 보호하기 위해서 public인 userid라는 프로퍼티를 만든다.

public static string userid

{

        get

        {

                return user_id;

        }

        set

        {

        // user_id라는 변수에 set이 받을 준비를 해서 값을 넣어준다.

                user_id = value;

        }


-----------------------------------------------------------------------------------

 

form1

-----------------------------------------------------------------------------------

 

private void button1_Click(object sender, System.EventArgs e)

{

        log.userid = this.textBox1.Text.ToString();

        /*

           클래스의 변수와 프로퍼티에 static이 붙었기 때문에

           인스턴스를 생성할 필요 없습니다.

           (변수에 static을 붙이지 않으면 변수에 담긴 값이 사라지므로 안됨) 

 

           "클래스명.프로퍼티(혹은 변수,메소드)"로 호출하면 됩니다.

       */

 


        Form2 frm2 = new Form2();

        frm2.Show();

}


----------------------------------------------------------------------------------

 

form2

----------------------------------------------------------------------------------

 

private void Form2_Load(object sender, System.EventArgs e)

{

        this.textBox1.Text = log.userid;

}

 

==================================================================================

 

이렇게 고치시면 됩니다. (static이 붙었기 때문에 클래스의 인스턴스를 생성할 필요 없음)

(물론, 프로퍼티에 값을 받는 변수를 상수(const)로 고쳐서 해결할 수도 있습니다.)

static의 기본적인 개념을 다시 짚어보았습니다.^^

 

 

 

                                                                            - 예제자료: 인선 행님 정리 자료~



'IT_Programming > C#' 카테고리의 다른 글

[Effective C#] 개발 지침 50  (0) 2007.01.19
이벤트와 델리게이트  (0) 2006.07.27
throw문  (0) 2006.02.27
System Exception  (0) 2006.02.27
예외처리  (0) 2006.02.27