Java 생성자 필요성
자바에서 프로그래밍 도중 생성자가 필요한 시점이 있다. 이 생성자가 왜 필요한지 예시 코드를 살펴보면서 생성자에 대해 알아본다.
먼저 예시 코드부터 살펴보도록 한다.
Student.java
public class Student {
String name;
int age;
int grade;
}
Main.class
public class Main {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "guest1";
student1.age = 14;
student1.grade = 90;
Student student2 = new Student();
student2.name = "guest2";
student2.age = 19;
student2.grade = 70;
Student[] students = {student1, student2};
for (Student s : students) {
System.out.println("학생이름: " + s.name + ", 학생 나이: " + s.age + ", 학생 점수: " + s.grade);
}
}
}
출력 예시
학생이름: guest1, 학생 나이: 14, 학생 점수: 90
학생이름: guest2, 학생 나이: 19, 학생 점수: 70
new 키워드로 회원 객체를 생성하면 name, age, grade 변수에 초기 값을 할당한다.
이는 회원 객체를 다루기 위해서는 객체를 생성하자마자 초기값을 설정이 필요하기 때문이다. 이 코드에서는 초기 값 설정이 반복되는 것을 확인할 수 있다.
메소드를 추가하여 반복을 없애보도록 한다.
예시 코드 - 메소드 추가
Main 클래스에서 initStudent메소드를 추가하여 반복적인 초기 값 설정하는 부분을 없애보도록 한다.
Main.java
public class Main {
public static void main(String[] args) {
Student student1 = new Student();
initStudent(student1, "guest1", 14, 90);
Student student2 = new Student();
initStudent(student2, "guest2", 19, 70);
Student[] students = {student1, student2};
for (Student s : students) {
System.out.println("학생이름: " + s.name + ", 학생 나이: " + s.age + ", 학생 점수: " + s.grade);
}
}
static void initStudent(Student s, String name, int age, int grade) {
s.name = name;
s.age = age;
s.grade = grade;
}
}
initStudent 추가하여 반복적인 초기 설정이 없어지고 정상적으로 출력되는 것을 확인할 수 있다.
그러나 initStudent 메소드의 파라미터 Class s 들어가는 부분이 거슬릴 수 있는데, 개선해보도록 한다.
예시 코드 - this 추가
앞서 설명한 코드를 개선해보도록 한다.
Main 에 분리되어있는 initStudent 기능 메소드를 initStudent 으로 옮겨주었다.
Student.java
public class Student {
String name;
int age;
int grade;
void initStudent(String name, int age, int grade) {
this.name = name;
this.age = age;
this.grade = grade;
}
}
Main.java
public class Main {
public static void main(String[] args) {
Student student1 = new Student();
student1.initStudent( "guest1", 14, 90);
Student student2 = new Student();
student2.initStudent( "guest2", 19, 70);
Student[] students = {student1, student2};
for (Student s : students) {
System.out.println("학생이름: " + s.name + ", 학생 나이: " + s.age + ", 학생 점수: " + s.grade);
}
}
}
프로그래밍 진행 시 앞서 만든 객체의 메소드(initStudent...)처럼 생성하고 바로 초기화하는 작업이 반복된다. 이러한 반복적인 작업을 제거하기 위해 생성자(Construct) 가 추가되었고, 이것은 객체를 생성하자마자 바로 필요한 기능을 수행할 수 있다.