1. 생성자 함수란?
생성자 함수란 클래스 변수에 메모리를 할당, 즉 인스턴스를 만드는 과정에서 호출되는 함수를 뜻한다.
그래서 클래스명과 동일한 함수이다.
new 연산자와 함께 메모리를 할당할 때 사용하며 오버로딩(overloading)도 가능하다.
이와 반대되는 개념인 소멸자 함수도 다른 언어에는 개념이 존재하지만 자바에는 존재하지 않는다.
JVM이 자동으로 쓰레기 데이터를 Garbage Collecting을 통해 메모리를 회수하기 때문이다.
우선 생성자 함수를 사용해보자.
여기서는 달력과 관련된 함수를 사용해보려 한다.
new GregorianCalendar()
이 함수를 입력하면 자동으로 임포트까지 완료된다.
이 함수를 today라는 참조변수에 담아서 사용해보고자 한다.
이 때 자바에서 또 사용해주는 isLeapYear 메서드를 사용하여 윤년과 평년을 구분해주는 코드를 구현했다.
GregorianCalendar today = new GregorianCalendar();
if(today.isLeapYear(2022)) {
System.out.println("윤년");
} else {
System.out.println("평년");
} // if end
* 나의 착각
어라,, 분명 생성자함수는 클래스명과 동일한 함수랬는데 GregorianCalender 가 왜 생성자 함수이지?
자바에서 GregorianCalender를 이미 갖고 있었다는 것을 까먹고 혼란에 빠졌었다.
전혀 문제 되지 않음!!
2. 생성자 함수의 특징
1) 생성자 함수의 특징 : 리턴형이 없다
class School {
// 멤버변수 field
private String name;
private int kor, eng, mat;
private int aver;
// 생성자 함수 constructor
// -> 클래스명과 동일한 함수
// -> 리턴형이 없다 public void School(){} 주의
public School() { // 기본 생성자 함수 default constructor
// 자동으로 생성된다
System.out.println("Scholl() 호출됨");
} // School() end
// 멤버함수 method
} // class end
우선 School이라는 클래스를 하나 만들고 그 안에 생성자함수를 만들었다.
이 때 주의해야할 것이 있다.
바로 void를 붙이지 않는 것.
생성자함수는 리턴값이 없는 것이 아니라 리턴형이 없다.
void는 리턴값이 없다는 리턴형을 갖고 있기에 void를 붙이면 안된다.
2) 생성자 함수의 특징 : 오버로딩이 가능하다
// 생성자 함수도 오버로딩(함수명 중복)이 가능하다
public School(String n) {
name=n;
} // School() end
public School(int k, int e, int m) {
kor=k;
eng=e;
mat=m;
} // School() end
public School(String n, int k, int e, int m) {
name=n;
kor=k;
eng=e;
mat=m;
} // School() end
또한 생성자 함수는 오버로딩이 가능하다.
같은 함수명을 주더라도 매개변수의 값의 자료형과 개수를 달리하여 이름이 같은 생성자 함수를 중복생성 할 수 있다는 뜻이다.
3. 생성자 함수 사용해보기
이제 생성자 함수를 본격적으로 사용하기 위해 이전에 성적 클래스에서 사용했었던 함수를 추가하였다.
void calc() {
aver=(kor+eng+mat)/3;
} // calc() end
public void disp() {
System.out.println(name);
System.out.println(kor);
System.out.println(eng);
System.out.println(mat);
System.out.println(aver);
} // disp() end
그리고 main() 함수로 돌아와 아래와 같이 코드를 작성했다.
School one = new School();
System.out.println(one.hashCode());
one.calc();
one.disp();
School two = new School("개나리");
two.calc();
two.disp();
School three = new School(10, 20, 35);
three.calc();
three.disp();
School four = new School("진달래", 40, 50, 55);
four.calc();
four.disp();
위의 코드처럼 생성자 함수는 전달값을 지정해줄 수 있다.
이 전달값은 객체선언과 동시에 초기값을 전달해주는 역할을 한다.
'⁂ Java > : 기본 익히기' 카테고리의 다른 글
[JAVA] #5-5 This와 This() (0) | 2022.09.13 |
---|---|
[JAVA] #5-4 String 메서드 (0) | 2022.09.08 |
[JAVA] #5-2 New 연산자 - 참조 자료형을 이해해보자 (0) | 2022.09.08 |
[JAVA] #5-1 클래스(Class) (2) | 2022.09.08 |
[JAVA] #4-4 메인(main) (0) | 2022.09.07 |