쌓고 쌓다

[JAVA] 생성자 본문

프로그래밍/java

[JAVA] 생성자

승민아 2021. 12. 20. 23:28

생성자

객체의 생성과 동시에 초기화를 위해 실행되는 메소드이다.

 

 

생성자 선언 방법

class Person {

    public String name;
    public int age;

    public Person()
    {
    
    }
    
}

위와 같이 class 안에 클래스의 이름과 동일하고, 반환값,매개변수가 없는 메소드를 만들면 된다.

반환값이 있을경우 컴파일 에러를 일으킨다.

굳이 생성자를 작성하지 않아도 위와 같은 기본 생성자(디폴트 생성자)는 컴파일러가 알아서 작성해주고 우리눈에는 보이지 않게 해준다.

public void Person() // 컴파일 에러
{
	//코드
}

 

예시

class Person {

    public String name;
    public int age;

    public Person()
    {
        name = "기본 이름";
        age = 1;
    }

    public void ShowInformation()
    {
        System.out.println(name + "," + age);
    }

}

public class Main {

    public static void main(String[] args) {
        Person person = new Person();
        person.ShowInformation();
    }
}

위와 같이 Person 클래스의 객체를 생성만 했을 뿐인데, 변수가 초기화가 되어 출력된다.

 

여러개의 생성자(오버로딩)

class Person {

    public String name;
    public int age;

    public Person() // 매개변수가 없을시 생성자
    {
        name = "기본 이름";
        age = 1;
    }

    public Person(String _name, int _age) // string 과 int가 넘어오는 생성자
    {
        name = _name;
        age = _age;
    }

    public void ShowInformation()
    {
        System.out.println(name + "," + age);
    }

}
public class Main {

    public static void main(String[] args) {
        Person Aperson = new Person();
        Person Bperson = new Person("이승민",22);
        Aperson.ShowInformation();
        Bperson.ShowInformation();
    }
}

그저 매개변수만 달리해주면 알아서 맞는 매개변수를 갖는 생성자를 실행한다.

 

실행 결과

 

 

* 주의 : 기본 생성자가 생성 안될 경우

class Person {

    public String name;
    public int age;

    public Person(String _name, int _age)
    {
        name = _name;
        age = _age;
    }

    public void ShowInformation()
    {
        System.out.println(name + "," + age);
    }

}

public class Main {

    public static void main(String[] args) {
        Person Aperson = new Person(); // 컴파일 오류
        Aperson.ShowInformation();
    }
}

위 코드와 같이 생성자가 하나라도 이미 존재하는경우 기본 생성자를 통해 생성을 할려해도 자바에서 자동으로 생성 해주지 않는다.

이것은 클래스를 만든 개발자의 의도를 지켜주기 위한것으로 컴파일러가 자동으로 생성해주지 않는다.

'프로그래밍 > java' 카테고리의 다른 글

[JAVA] 객체 배열  (0) 2021.12.21
[JAVA] this 와 this()  (0) 2021.12.21
[JAVA] 클래스와 객체  (0) 2021.12.20
[JAVA] for-each 문  (0) 2021.12.19
[JAVA] 예외 처리  (0) 2021.12.19
Comments