아디봉의.net

c#객체지향 생성자(Constructor) 본문

C#/C# 객체지향

c#객체지향 생성자(Constructor)

아디봉 2012. 9. 25. 15:46

생성자는 객체의 메모리가 생성된 직후에 호출되는 함수를 말한다. 

객체를 생성할 때 생성자를 호출하지 않는 경우는 없다. 그렇기 떄문에 모든 클래스는 반드시 하나이상의 생성자를 두어야 한다. 


디폴트 생성자 Default Constructor 

 우리가 생성자를 만들지 않은경우도 있다. 이럴경우를 대비해서 컴파일러는 컴파일할때 생성자가 있는지 검사하게되고, 생성자가 없을 경우에만 매개변수가 없으면 구현부가 비어있는 생성자를 자동으로 만들어준다. 


using System;

public class MainTest{

public void SayHello(){

Console.WriteLine("Hello World!");

}

public static void Main(){

MainTest m = new MainTest();

m.SayHello();

}

}

결과값 : Hello World!


MainTest()함수는 존재하지 않는다. 그런데도 new 를 할떄 MainTest()라는 생성자 함수를 사용하였다. 

생성자가 없을때 Default생성자가 자동으로 만들어지기 때문이다.


디폴트생성자는 생성자가 없을 경우에만 자동으로 만들어지는 것이지 무조건 제공되는 것은 아니다. 

생성자함수는 메모리가 생성된 직후 가장 먼저 호출되는 함수이다. 

매개변수가 있는 생성자를 다시 만든다면 새로운 생성자를 사용하겠다는 의미이기떄문에 디폴트 생성자는 만들어지지 않는다.


생성자의 이름은 클래스의 이름과 동일하며 유일하게 리턴타입이 없는 함수이다. 


생성자의 특징 

- 리턴타입이 없다

- 생성자의 이름은 클래스의 이름과 동일하다. 

- new 연산자가 힙 영역에 해당 클래스의 메모리를 생성한 직후 호출된다. 


using System;

public class ConstructTest{

private string name = null;

private string address = null;

private int age = 0;


public ConstructTest(){

this.name = "이름없음";

this.address = "주소없음";

this.age = 0;

}

public void SetList(String sname, String saddress, String sage){

this.name = sname;

this.address = saddress;

this.age = sage;

}

public void GetList(){

String str = name + "" + address + " " + age;

return str;

}

public static void Main(){

ConstructTest ct = new ConstructTest();

String s = ct.GetList();

Console.WriteLine(s);

ct.SetList("홍길동","서울시 중구", 25);

s = ct.GetList();

Console.WriteLine(s);

}

}

결과값 이름없음 주소없음 0 

홍길동 서울시 중구 25 


this.변수

this.변수 는 "멤버변수"임을 명시적으로 표시하는 방법이다.

 

생성자 사용시점

프로그램밍은 정확한 시점에 코딩하는 것이 굉장히 중요하다. 생성자는 말 그대로 객체가 생성되는 순간 호출되기 떄문에 객체의 생성과 동시에 처리되어야 하는 작업들을 넣어주면 된다.


 


'C# > C# 객체지향' 카테고리의 다른 글

추상클래스와 추상함수  (0) 2012.09.26
생성자를 호출하는 THIS() , BASE()  (0) 2012.09.26
C# 상속  (0) 2012.09.20
C# 오버로딩(overloading)  (0) 2012.09.20
C# 객체  (0) 2012.09.03