훈수/저작권 관련 지적 환영합니다 - 댓글 또는 audgnssweet@naver.com
Java의 생성자
생성자 |
생성자는 객체 지향 프로그래밍에서 객체의 초기화를 담당하는 서브루틴을 가리킨다. 생성자는 객체가 처음 생성될 때 호출되어 멤버 변수를 초기화하고, 필요에 따라 자원을 할당하기도 한다. 객체의 생성 시에 호출되기 때문에 생성자라는 이름이 붙었다. -위키백과- |
위키백과에 정리가 너무 잘 되어있습니다.
생성자의 목적은, 객체의 필드를 초기화하는 데 있습니다.
그렇다면 초기화를 해주는 init함수라던지, 그런 것들로 초기화를 해도 되는데 왜 생성자를 사용할까요?
생성자를 사용하면, 생성과 동시에 초기화를 강제할 수 있습니다.
그러나 init함수를 사용하면, 강제할 수 없습니다. 그렇다면 초기화를 깜빡한다던가 하는 실수가 발생할 수 있겠죠?
그런 실수가 발생하면 껍질만 있는 객체가 생성될 수 있고, 프로그램이 커지면 그런 실수를 찾기도 힘들어집니다.
생성자 분석
public class MyClass {
String className;
//생성자
MyClass(String className) {
this.className = className;
}
public static void main(String[] args) {
MyClass myClass = new MyClass("mine");
}
}
1. 생성자는 '메서드'이다
2. 생성자의 이름은 클래스의 이름과 동일하다
3. 리턴 타입이 없다.
4. 목적은 필드 초기화이다
5. 객체가 생성될 때 호출된다.
디폴트 생성자
public class MyClass {
String className;
public static void main(String[] args) {
//디폴트 생성자 호출
MyClass myClass = new MyClass();
}
}
//다음과 같은 코드를 클래스 안에 컴파일러가 삽입해준다
MyClass() {}
위의 코드를 보면, 따로 생성자를 만들어주지도 않았는데 빈 생성자 (매개변수를 받지 않는 생성자)를 호출하고 있는 것을 확인할 수 있습니다.
이처럼 프로그래머가 생성자를 아무것도 만들어주지 않으면, 컴파일러가 컴파일 시
(매개변수를 받지 않고, 아무 작업(초기화)도 하지 않는 생성자를 만들어줍니다.)
단, 프로그래머가 하나라도 생성자를 정의한다면 컴파일러가 디폴트 생성자를 만들어주지 않으니 주의하세요.
생성자 오버로딩
public class MyClass {
String className;
Integer classNum;
//1번 생성자
MyClass(String className) {
this.className = className;
}
//2번 생성자
MyClass(String className, Integer classNum) {
this.className = className;
this.classNum = classNum;
}
public static void main(String[] args) {
//1번 사용
MyClass myClass1 = new MyClass("1번생성자 사용");
MyClass myClass2 = new MyClass("2번 생성자 사용", 2);
}
}
위 코드를 보시면 생성자가 동시에 2개가 있는 것을 알 수 있습니다.
다른 점은, 생성자가 받고 있는 매개변수의 개수입니다.
이처럼 자바에서는 함수의 이름이 같더라도 매개변수가 다르면 다른 함수로 인식하기 때문에,
매개변수가 다른 생성자를 여러 개 정의할 수 있고 이것을 생성자 오버로딩이라고 합니다.
'Java' 카테고리의 다른 글
Java static / non-static (0) | 2021.05.06 |
---|---|
Java의 패키지와 접근 지정자 (0) | 2021.05.06 |
클래스와 객체(미완성) (0) | 2021.04.06 |
예외 처리 (0) | 2021.04.06 |
자바 배열과 메모리 (0) | 2021.03.30 |