2011.09.29 12:36

4.2 생성자메서드

4.2.1 생성자메서드

생성자메서드란 클래스를 이용하여 메모리를 가진 instance 즉, 객체를 생성할 때 제일 먼저 호출되는 메서드입니다.

 

생성자메서드의 정의

n        객체를 생성과 동시에 기본적으로 호출 되어지는 메서드

 

여러분은 이미 생성자메서드를 사용하고 있었습니다. 생성자메서드를 여러분이 따로 만들지 않는다면 여러분이 만든 클래스에서 자동으로 디폴트생성자가 만들어지게 됩니다. 앞 절의 예제에서 우리는 다음과 같은 구문을 사용했습니다.

 

MainTest.java(디폴트 생성자메서드를 위한 예제)

public class MainTest{

             public void sayHello(){

                           System.out.println("Hello World!");

             }

 

             public static void main(String[] args){

                           MainTest m = new Ma inTest();

                           m.sayHello();

             }

}

MainTest()라는 메서드는 없습니다. 만들지도 않았죠. 이 때 여러분이 생성자메서드라하여 클래스의 이름과 같은 메서드를 만들지 않는다면 자바에서 기본적으로 디폴트 생성자라는 것이 만들어지는데 이 디폴트 생성자가 바로 MainTest()입니다. 메모리가 생성된 직후 가장 먼저 호출되는 메서드입니다. 물론 현재의 디폴트 생성자는 하는 일이 없습니다. 단지 생성자라고 표시만 할 뿐입니다.

 

, 클래스를 만들 때 사용자가 따로 생성자를 만들지 않는다면 매개변수가 없는 디폴트 생성자메서드 “MainTest()”가 만들어져서 사용되며, 디폴트 생성자메서드를 여러분이 약간 변형하여 만들거나 아니면 매개변수가 있는 생성자메서드를 다시 만든다면 기존의 디폴트 생성자메서드는 없어지고 새로운 생성자가 만들어지는 것입니다.

 

 

4.2.2 생성자메서드의 특징

  생성자메서드는 유일하게 리턴타입이 없는 메서드입니다. 그리고 생성자메서드의 이름은 클래스의 이름과 동일하며 일반적으로 초기화나 멤버의 기본값 할당을 위해 사용됩니다. 보통의 경우 클래스 작업을 할 때 제일 먼저 프로그램해야 하는 것들을 생성자메서드 내에 프로그램하게 됩니다.

 

생성자메서드의 특징

n        메서드의 리턴타입이 없다.

n        메서드의 이름은 클래스의 이름과 동일하다.

n        new생성자가 메모리를 생성한 직후 호출 되어진다.

 

생성자메서드는 new연산자와 함께 사용되는데 new연산자가 메모리를 생성하고 나면 멤버 변수들이 메모리를 할당 받게 됩니다. 멤버 변수들이 메모리가 존재하기 때문에 멤버필드에 값을 할당하거나 초기화를 할 수 있습니다. 이때 생성자 메서드가 활동을 하는 것입니다. 보통은 멤버필드의 초기화를 주로하지만 필요하다면 객체의 생성과 동시에 해 주어야 하는 작업들을 이 생성자메서드에서 하게 됩니다. 생성자가 없는 클래스에 대하여 컴파일러는 인수 리스트를 가지지 않는 생성자메서드를 자동으로 제공합니다. 이 생성자를 우리는 디폴트 생성자라고 부릅니다.

 

생성자의 역할은 초기화 작업이라고 했습니다. 생성자에 관련된 예제를 하나 만들어 보도록 하죠.

 

ConstructTest.java(생성자메서드를 위한 예제)

public class ConstructTest {

             private String name = null;

             private String address = null;

             private int age = 0;

             public ConstructTest(){

                           name = "이름없음";

                           address="주소없음";

                           age=0;

             }

             public void setList(String sname, String saddress, int sage){

                           name = sname;

                           address = saddress;

                           age = sage;

             }

             public String getList(){

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

                           return str;

             }

             public static void main(String[] args) {

                           ConstructTest ct = new ConstructTest();

                           String s;

                           s = ct.getList();

                           System.out.println(s);

 

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

                           s = ct.getList();

                           System.out.println(s);

             }

}

C:\examples\4. Class for Basic Java>java ConstructTest

이름없음  주소없음   0

홍길동  서울시 중구   25

 

생성자메서드에서 값을 name, address, age 멤버필드에 할당하고 있습니다. 그렇기 때문에 객체를 생성한 직후 바로 getList멤버메서드를 호출 했을 때 생성자메서드에서 초기화 한 값을 얻을 수 있습니다. 다시 setList메서드를 통해서 값을 할당한 이후에는 바뀌겠죠. 이렇게 생성자에서 우선적으로 값을 할당해야 할 경우가 있다면 생성자메서드를 이용하면 아주 편하게 해결할 수 있습니다.

 

생성자메서드도 매개변수를 이용하여 외부로부터 직접 생성자메서드에 값을 할당하는 방법으로 멤버필드를 초기화 할 수 도 있습니다. 그 예를 살펴 보기로 하죠.

 

ConstructDirect.java(생성자메서드를 위한 예제)

public class ConstructDirect{

             private String name = null;

             private String address = null;

             private int age = 0;

             public ConstructDirect(String sname, String saddress, int sage){

                           name = sname;

                           address = saddress;

                           age = sage;

             }

             public void setList(String sname, String saddress, int sage){

                           name = sname;

                           address = saddress;

                           age = sage;

             }

             public String getList(){

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

                           return str;

             }

             public static void main(String[] args) {

                           ConstructDirect ct = new ConstructDirect("홍길동", "서울시 중구", 25);

                           String s;

                           s = ct.getList();

                           System.out.println(s);

             }

}

C:\examples\4. Class for Basic Java>javac ConstructDirect.java

 

C:\examples\4. Class for Basic Java>java ConstructDirect

홍길동  서울시 중구   25

 

우리는 이 예제에서 생성자에서 매개변수를 사용하는 방법을 쉽게 볼 수 있습니다. 만약 여러분이 이 예제처럼 매개변수가 있는 생성자메서드를 만들었다면 디폴트 생성자는 더 이상 사용할 수 없습니다. 그리고 반드시 생성자메서드를 사용될 때 매개변수의 개수와 형을 맞추어 주어야 합니다. 메서드는 매개변수의 개수와 매개변수의 형에 목숨을 걸고 있습니다. 그리고 생성자메서드에는 리턴타입이 없기 때문에 당연히 리턴이라는 것이 없습니다. 다른 일반 메서드 또한 리턴타입과 리턴값은 반드시 지켜야 합니다.

 

 

4.2.3 결론

 생성자메서드는 말 그대로 생성될 때 호출 되는 메서드입니다. 그 유용함은 객체 생성순간에 같이 호출 될 수 있다는 장점이 있습니다. 이 생성자를 아주 유용하게 사용하면 편리한점 뿐만 아니라 반드시 필요한 메서드입니다. 물론 그것은 아주 미세한 것이지만 이렇게 생각 해 볼 수 있습니다. 만약 인간이라는 데이터 타입으로 아기를 만든다고 생각 해 보십시오. 아기는 어느 정도 초기화는 되어 있어야 합니다. 눈, 코, 입, 팔, 다리등 필수적인 요소들은 전부 초기화 되어 있어야 합니다. 이러한 면에서 본다면 생성순간에 해 주어야 하는 일은 아주 중요한 일입니다. 만약 이것을 잘못하게 되면 아마 여러분들이 만든 객체는 이상한 괴짜 객체가 되고 말 것입니다.

 

출처 소설같은자바

신고
Posted by 그린블로그 DEV그린