1. 생성자(Constructor)
다음코드를 살펴보자
class Dog {
String name;
void setName(String name) {
this.name = name;
}
}
public class Sample {
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog.name); // null 출력
}
}
이러한 코드의 결과는 null이다. 그 이유는 Dog 이라는 객체에 아무런 name도 설정해 주지 않아서 이다.
생성자를 이용하면 name이라는 객체변수에 값이 설정되었을때만 객체가 생성될 수 있도록 강제 할 수 있다.
Dog 객체에 다음과 같은 메서드를 추가해보자.
class Dog {
String name;
void setName(String name) {
this.name = name;
}
Dog(String name) {
this.setName(name);
}
}
위 Dog 메소드처럼 클래스명과 동일하고 return 자료형이 정의되지 않은 메소드를 생성자라고 한다.
생성자는 다음과 같은 규칙을 따른다.
1. 클래스명과 메소드명이 동일
2. 리턴타입을 정의 하지 않음(void도 사용x)
생성자는 객체가 생성될때 호출된다. 즉 new를 사용했을 때 호출된다.
따라서 다음과 같이 new를 통해 객체를 생성할때 String 문자열을 전달해야한다.
Dog dog = new Dog("강아지");
다음과 같이 코딩한다면 에러가 발생한다.
Dog dog = new Dog();
그 이유는 생성자가 생성된 경우에는 생성자의 규칙대로만 객체를 생성할 수 있기 때문이다.
2. 디폴트 생성자
다음 코드를 살펴보자
class Dog {
String name;
void setName(String name) {
this.name = name;
}
Dog() {
}
}
위와같이 생성자의 파라미터가 없고, 메소드 내부에 아무 내용이 없는 생성자를 디폴트 생성자라고 부른다.
일반적으로 생성자가 없다면 컴파일러는 자동으로 디폴트생성자를 추가한다.
3. 생성자 오버로딩
다음 코드를 살펴보자
class Dog {
String name;
void setName(String name) {
this.name = name;
}
Dog(String name) {
this.setName(name);
}
Dog(int type) {
if(type == 1) {
this.setName("tom");
}else if(type == 2){
this.setName("gigi");
}
}
}
Dog 클래스에는 현재 두개의 생성자가 있다. 하나는 String 자료형을 입력받는 생성자이고, 하나는 Int자료형을 입려받는 생성자이다. 입력항목이 다른 생성자를 여러 개 만들 수 있는데 이를 생성자 오버로딩 이라고 한다.
'[JAVA] 기본 문법' 카테고리의 다른 글
[JAVA] 제네릭 프로그래밍 (0) | 2023.02.07 |
---|---|
[JAVA] 자바 스트림 (0) | 2023.02.06 |
[JAVA] 어노테이션 (0) | 2022.08.06 |
[JAVA] Enum (0) | 2022.07.30 |
[JAVA] 정적 변수와 메소드 (0) | 2022.07.24 |
[JAVA] 접근 제어자 (0) | 2022.07.24 |
[JAVA] 자료형-문자열 (0) | 2022.07.17 |
[JAVA] 자료형-숫자 (0) | 2022.07.17 |