[Java] 생성자(constructor)



1️⃣ 생성자를 사용하는 이유

(1) 생성자를 사용하지 않을 경우

< 샘플코드(생성자사용x) >

public class main {
    public static void main(String[] argc) {
        Student person1 = new Student();
        person1.name = "kirim";
        person1.age = 29;s
    }
}

class Student {
    public String name;
    public int age;
}
  • 멤버변수의 초기화를 위해 코드처럼 직접 값을 대입해야 합니다. 그렇기 때문에 멤버변수가 있었는지 까먹을 수 있어서 실수할 가능성이 커집니다.
  • 또한 Student클래스의 멤버변수public으로 선언되어 있기 때문에 외부에서 참조가 가능해집니다.(멤버변수를 비밀로할 수 없음)

(2) 생성자를 사용할 경우

  • 클래스의 멤버변수protected로 선언하여 사용할 수 있습니다.(멤버변수를 비밀로할 수 있음)
  • 새로운 클래스의 인스턴스를 생성과 동시에 유효한값을 가질 수 있습니다.
  • 멤버변수 초기화를 강제하기때문에 실수할 가능성이 적습니다.


2️⃣ 생성자로 초기화하기

(1) 생성자 기본초기화

  • 생성자함수 함수명은 클래스명과 동일합니다.
  • 생성자함수는 반환값이 없으며 반환형을 적어주지 않습니다.
public class main {
    public static void main(String[] argc) {
        Student person1 = new Student("kirim", 29);
    }
}

class Student {
    protected String name;
    protected int age;

    public Student (String name, int age) {
        this.name = name;
        this.age = age;
    }
}

(2) 다양한경우의수의 생성자생성

  • 멤버변수가 2개이더라도 인자를 1개만 받아도 혹은 아이에 받지않아도 초기화되도록 만들어줄 수 있습니다.

< Student클래스 부분 >

class Student {
    protected String name;
    protected int age;

    public Student (String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Student (String name) {
        this.name = name;
    }
    public Student () {
    }
}

< 사용 예시(main클래스) >

public class main {
    public static void main(String[] argc) {
        Student person1 = new Student("Mike", 25);
        Student person2 = new Student("Jane");
        Student person3 = new Student();
        System.out.println(person1.name);
        System.out.println(person2.name);
        System.out.println(person3.name);
    }
}
/* 출력 */
Mike
Jane
null

(3) 다른방법으로 생성자 초기화하기

  • 멤버변수가 많아지면 다양한경우수의 코드가 중복되는 경우가 많습니다.
  • this(인자1, 인자2, ...)를 이용하여 기존의 생성자를 이용하여 초기화 시켜줄 수 있습니다.

< Student클래스 부분 >

class Student {
    protected String name;
    protected int age;
    protected String city;

    /* 기본 생성자는 그대로 만들어줌 */
    public Student (String name, int age, String city) {
        this.name = name;
        this.age = age;
        this.city = city;
    }
    /* 기본 생성자를 이용해서 초기화시켜줌 */
    public Student (String name, int age) {
        this(name, age, null);
    }
    public Student (String name, String city) {
        this(name, 0, city);
    }
    public Student (String name) {
        this(name, 0, null);
    }
    public Student () {
        this(null, 0, null);
    }
}

< 사용 예시(main클래스) >

public class main {
    public static void main(String[] argc) {
        Student person1 = new Student("Mike", 25);
        Student person2 = new Student("Jane");
        Student person3 = new Student("Kane", "seoul");
        Student person4 = new Student();
        System.out.println(person1.name + " " + person1.age + " " + person1.city);
        System.out.println(person2.name + " " + person2.age + " " + person2.city);
        System.out.println(person3.name + " " + person3.age + " " + person3.city);
        System.out.println(person4.name + " " + person4.age + " " + person4.city);
    }
}
/* 출력 */
Mike 25 null
Jane 0 null
Kane 0 seoul
null 0 null




© 2021.02. by kirim

Powered by kkrim