new
키워드를 사용하여 객체가 생성될 때 자동으로 실행되는 특수한 형태의 메서드객체가 생성되면서 해당 객체의 특성을 초기화
하기 위하여 사용
(ex. 멤버변수의 초기값을 할당하는 용도)
→ 객체가 생성될 때 자동으로 실행된다는 특성 때문
📝 형식
class User{
User(){ // 생성자
... // 이 안은 객체가 생성될 때 자동으로 호출됨
}
}
public class Main01 {
public static void main(String[] args) {
User user = new User();
// User(); → 생성자 호출
}
}
🖥️ 예시
package object;
class Book{
String subject;
String content;
Book(){ //기본 생성자(클래스 이름과 동일)
System.out.println("생성자 호출");
this.subject = "주제";
this.content = "내용입니다";
}
void read() {
System.out.println("----read() 실행----");
System.out.println(this.subject);
System.out.println(this.content);
}
}
public class Main01 {
public static void main(String[] args) {
/* Book 클래스의 생성자에서 멤버변수에 대한 기본값을
설정하기 때문에, 객체를 생성하는 것 만으로 멤버변수가
초기화 된다.*/
Book book = new Book(); //Book(); → 생성자 호출
book.read();
}
}
결과값
생성자 호출 // Book() 생성자 호출 결과
----read() 실행---- // read() 메서드 호출 결과
주제
내용입니다
📝 형식
class User{
User(){
// 생성자는 있지만, 내용은 비어있다.
}
}
생성자도 메서드의 한 종류이므로 파라미터를 함께 정의하는 것이 가능
생성자의 파라미터를 멤버변수에 복사
→ 객체의 초기화를 외부적인 요인에 의해 처리할 수 있음
🖥️ 예시
package object;
class User{
String name;
int age;
User( String name, int age ){
// 객체를 만들 때 강제로 쓰도록 할 수 있다.
// 생성자 파라미터의 값을 멤버변수에 복사, 할당
this.name = name;
this.age = age;
}
}
public class Main08 {
public static void main(String[] args) {
/*
* 생성자에 파라미터가 정의된 경우 객체 생성 구문에서
* 해당 파라미터를 반드시 전달해야 한다.
*/
//객체의 초기화를 외부적인 요인에 의해 처리
User user = new User("사용자", 20);
System.out.println(user.age);
System.out.println(user.name);
}
}
결과값
20
사용자