Dev.J
[JAVA] 생성자, 기본생성자, 언제 (기본)생성자를 만들어야 할까? 본문
생성자 란?
객체가 생성될 때마다 호출되는 '인스턴스 초기화 메서드'
- 객체를 생성한다.
- 객체의 속성(인스턴스 변수)들을 초기화 시킨다. (but 실무에서는 getter, setter로 초기화를 시킨다고 함 주된 목표는 객체를 생성하는 것)
형태
클래스명 (타입 변수명, 타입 변수명, ... ) {
// 인스턴스 생성 시 수행될 코드(주로 인스턴스 변수의 초기화 작업을 위한 코드를 적음.)
}
생성자는 객체가 생성될 때 호출된다.
객체가 생성될 때란 new라는 키워드로 객체가 만들어질 때를 말한다.
즉, 생성자는 다음과 같이 new라는 키워드가 사용될 때 호출된다.
new 클래스명(입력항목, ... )
생성자의 규칙
- 클래스명과 메소드명이 동일하다.
- 리턴타입을 정의하지 않는다. (void 안붙임)
기본생성자 란?
생성자를 한개도 정의하지 않았을 경우 자바에서 자동으로 기본 생성자를 제공해준다.
하나라도 생성자를 정의하면 기본 생성자는 사용할 수 없게 된다.
-----------------------------
문제 : 다음과 같은 실행결과를 얻도록 Student클래스에 생성자와 info()를 추가하시오.
(from/ 자바의정석 기초편 예제 6-2, 6-3 일부)
class Student1 {
public static void main(String[] args) {
Student s = new Student("홍길동",1,1,100,60,76);
String str = s.info();
System.out.println(str);
}
}
class Student1 {
String name;
int ban;
int no;
int kor;
int eng;
int math;
Student1 (String name, int ban, int no, int kor, int eng, int math) {
this.name = name;
this.ban = ban;
this.no = no;
this.kor = kor;
this.eng = eng;
this.math = math;
}
public String info() {
return name +","+ban +","+no +","+kor +","+eng +","+math +","+(kor+eng+math) +","
+((int)((kor+eng+math) / 3f * 10 + 0.5f) / 10f) ;
}
}
Student1은 괄호안에 직접 항목들을 써주면서 기본생성자를 자동 생성해주고
-----------------------------
class Student2 {
public static void main(String[] args) {
Student s = new Student();
s.name = "홍길동";
s.ban = 1;
s.no = 1;
s.kor = 100;
s.eng = 60;
s.math = 76;
System.out.println("이름 :" + s.name);
System.out.println("총점 :" + s.getTotal());
System.out.println("평균 :" + s.getAverage());
}
}
class Student2 {
String name;
int ban;
int no;
int kor;
int eng;
int math;
Student2() {} // 기본 생성자
Student2 (String name, int ban, int no, int kor, int eng, int math) {
this.name = name;
this.ban = ban;
this.no = no;
this.kor = kor;
this.eng = eng;
this.math = math;
}
public String info() {
return name +","+ban +","+no +","+kor +","+eng +","+math +","+(kor+eng+math) +","
+((int)((kor+eng+math) / 3f * 10 + 0.5f) / 10f) ;
}
}
Student2는 괄호가 빈 상태, 따라서 기본생성자가 안만들어졌으므로 직접 만들어줘야함.
Student1, Student2 둘 다 똑같이 출력은 되지만
Student1 처럼 하면 기본생성자를 자동으로 만들어줘서 직접 만들 필요X.
Student2 처럼 하면 기본생성자를 새로 만들어줘야함.
Student2에 기본생성자를 만들어주지 않은 상태에서 s.name 출력하면 출력이 안됨.
'Programming > JAVA' 카테고리의 다른 글
[JAVA] 객체배열 연습1 (0) | 2021.07.18 |
---|