기본 생성자 & 매개변수 생성자
클래스를 설계하고 사용할 때, 생성자를 만들지 않고 메소드만 사용하는 경우도 있습니다.
Q. 객체(클래스)는 생성자 없이 생성이 가능할까? NO
A. 인자도 없이 단순히 리턴되는 형태를 기본 생성자(default constructor)
* 생성자를 명시하지 않더라도 컴파일러가 기본 생성자를 자동으로 생성해준다.
왜냐하면 객체가 생성될 때 반드시 생성자가 호출되어야 하기 때문이다.
Q. 생성자를 명시하든 안하든 컴파일러에 의해 기본 생성자가 무조건 실행되는 것일까?
생성자에는 기본 생성자(default constructor)와 사용자 정의 생성자(UserDefined Constructor)가 존재합니다.
※ "사용자 정의 생성자"를 "매개변수"가 있는 생성자로 볼 수 있습니다.
A. 생성자가 하나라도 존재하는 클래스에는 컴파일러에 의해 자동으로 기본 생성자가 삽입되지 않습니다.
(본생성자도 아니면서 생성자라면 당연히 매개변수가 필요한 형태)
사용자 정의 생성자 (UserDefined Constructor)
생성자는 개발자가 객체를 만들 때 꼭 이렇게 하고 싶다고 의사표현을 하는 것입니다.
따라서, 컴파일러는 기본 생성자를 포기하고, 개발자의 의견대로 객체를 만들 수 있게 합니다.
public class SampleObj {
public SampleObj(int value) { }
public SampleObj(String value) { }
public SampleObj(String value, int idx) { }
}
- 사용자 정의 생성자의 경우에는 이름이 다 똑같이 클래스의 이름과 같습니다.
다만, 그 안의 파라미터의 값이 경우에 따라 다르게 작성됩니다.
객체지향에서는 오버로딩(Overloading)이라는 용어로 위의 형태를 설명가능
- 사용자 정의 생성자는 객체에서 여러개 만들 수 있다.
오버로딩(Overloading)
; 이름이 같은 메소드나 사용자 정의 함수가 여러 개인 모습을 의미합니다.
- 호출하는 이름은 같지만, 파라미터들은 다르다.
- 파라미터의 개수가 같다면 파라미터들의 타입이 다르다.
- 리턴 타입은 다를 수 있다.
(생성자의 경우에는 리턴 타입이 없으므로 신경 쓰지 않아도 된다.)
ex) 다른 형태로는 객체가 만들어지면서 어떤 메소드를 실행할 때도 생성자 이용
public class InternetData {
private String domain;
public InternetData(String domain) {
this.domain = domain;
checkInternet();
}
private void checkInternet() {
System.out.println("인터넷 확인.....!");
}
public static void main(String[] args) {
InternetData obj = new InternetData("http://www.google.com");
}
}
생성자의 기능을 크게 두 가지로 구분 가능
① 객체 생성 시에 절대적으로 필요한 데이터를 넣도록 하는 강제성의 기능
② 객체가 생성되면 자동으로 어떤 메소드를 호출하는 기능을 위한 장치
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] [예제] 비만 지수 구하기 (0) | 2021.02.23 |
---|---|
[Java] 역컴파일로 기본 생성자 확인해보기 (0) | 2021.02.23 |
[Java] 생성자(Constructor) (0) | 2021.02.23 |
[Java] 객체 프로그래밍이란? (0) | 2021.02.23 |
[Java] ArrayList (0) | 2021.02.23 |
댓글