생성자 는 클래스형의 인스턴스를 만들 때 필요한 요소이다. 생성자는 멤버 인스턴스가 만들어 질 때 멤버변수의 초기화에 관여하고 정보은닉과 관계되는 Java의 핵심 내용중 하나이다.

1. 생성자


package classpart;

public class Person {
   String name;
   int age;
}

위와 같이 정의된 클래스로 인스턴스를 만들 때 다음과 같이 했다.

package classpart;

public class Test {
    public static void main(String[] args) {
       Person per = new Person();
    }
}

저기서 Person()을 생성자(Constructor)라고 한다.

Person 클래스를 정의한 코드는 컴파일되면서 자동으로 다음과 같이 된다.

package classpart;

public class Person {
   String name;
   int age;

   public Person() {} //default 생성자
}

클래스를 정의할 때 생성자가 포함되어있지 않으면 디폴트로 생성자를 넣어준다.

디폴트 생성자는 아무런 매개변수도 없고 코드도 없다. 단지 인스턴스를 만들기 위한 용도만 가지고 있다.

 

 

2. 생성자 만들기


생성자를 프로그래머가 직접 만들 수 있다. 보통 이런 경우는 인스턴스가 만들어지면서 곧바로 멤버 변수들을 초기화 시킬때이다.

package classpart;

public class Person {
   String name;
   int age;
   String addr;

   public Person(String str) {
      name = str;
   } 
}

위 코드에서는 생성자가 매개변수를 가지고 있다. 매개변수를 받아 멤버변수 name에 값을 저장한다.

위와 같이 만들어진 클래스로 인스턴스를 만드는 방법은 다음과 같다.

package classpart;

public class Test {
    public static void main(String[] args) {
        Person per = new Person("Kim");
        System.out.println(per.name); // "Kim"
    }
}

인스턴스를 만들면서 바로 String 타입의 문자열을 전달해야 한다. 이 때 전달받은 문자열이 name에 저장된다. 출력해보면 "Kim"이 나온다.

생성자를 프로그래머가 직접 만든 경우에는 default 생성자가 자동으로 만들어지지 않는다. 따라서 위에서 만든 생성자뿐이므로 인스턴스를 만들 때 매개변수를 넣어주어야 하고 그렇지 않으면 컴파일 오류가 난다.

디폴트 생성자도 추가해주면 인스턴스는 두 가지 생성자 중에서 하나를 이용해서 만들 수 있다.

 

 

3. 생성자 오버로드


위에서 매개변수가 있는 생성자나 디폴트생성자 모두 사용할 수 있다고 했다. 이 때에는 디폴트 생성자도 프로그래머가 직접 추가해야한다.

그리고 매개변수가 있는 생성자도 여러개 만들 수 있다.

package classpart;

public class Person {
    String name;
    int age;
    String addr;

    public Person(String pname) {
        name = pname;
    }

    public Person(String pname, int page) {
        name = pname;
        age = page;
    }
}

위에서는 매개변수가 1개인 생성자와 2개인 생성자가 있다. 이같은 경우를 생성자 오버로드(OverLoad)라고 한다.

package classpart;

public class Test {
    public static void main(String[] args) {
        Person per1 = new Person("Kim");
        Person per2 = new Person("Kelly", 20);

        System.out.println(per1.name);
        System.out.println(per2.name);
        System.out.println(per2.age);
    }
}

이렇게 두 생성자중 아무거나 사용하여 인스턴스를 생성할 수 있다.

매개변수가 프로그램 사용자에게 노출되면 안되는 경우 매개변수에 직접 접근하는 것을 제한시키고 인스턴스를 만들 때 정보를 입력받아 초기화 해야하는 경우 등에 매개변수가 있는 생성자를 사용한다.

또한 홈페이지등에 회원가입을 할 때 필수 입력사항같은 항목도 미리 생성자의 매개변수로 지정해두면 편리하다.

'프로그래밍 언어 > Java' 카테고리의 다른 글

(Java) 19 - 정보 은닉  (0) 2020.05.17
(Java) 18 - 참조 자료형  (0) 2020.05.17
(Java) 16 - 인스턴스  (0) 2020.05.17
(Java) 15 - 메소드  (0) 2020.05.17
(Java) 14 - 클래스  (0) 2020.05.17

+ Recent posts