생성자(constructor)

2020. 3. 10. 13:13자바 Java/자바 공부 java study

반응형

 

 

생성자란 객체가 생성될때(new) 반드시 한번 수행되는 메소드 

 

 

 

생성자의 특징 

 

public 클래스명 (매개변수){}

 

1) 수식어는 우선 public  (생성자 앞에는 접근 제어자 - public만 올 수 있다. )  <-> 메소드는 static 올 수 있다. 

 

2) 문법적으로 반환 유형 자체가 없음(void나 자료형을 작성할 수 없다. )          <-> 메소드는 void나 자료형이 있어야한다. 

 

3) 메소드이기 때문에 오버로딩 가능 

 

4) 생성자 메소드의 이름은 크래스 명과 완벽하게 동일하게 정의해야한다. 

 

5) 생성자는 인스턴스를 초기화 시킨다. 

 

*2,4번이 반드시 지켜져야 컴파일러가 생성자로 인식 

 

 

 

 

인스턴스를 생성할때 반드시 생성자를 호출한다고 하였는데 생성자를 따로 정의하지않을때는 어떻게 호출 된 것일가?

그 이유는 클래스를 정의할때 생성자를 생략하면 컴파일러가 자동적으로 기본생성자(Default constructor)를 생성하여 주기 때문이다. 

public 클래스명(){}

 

멤버 변수, 멤버 함수, 클래스를 구성하는 요소로 클래스를 통해 객체를 생성하면 각 객체마다 새로운 인스턴스 변수, 함수들을 생성한다. 

 

public class Introduction {

	//public Introduction(){}  만약 아래의 생성자 두개를 만들지 않았다면 생성 되었을 default constructior

	public Introduction() {        //기본 생성자 : 매개변수를 쓰지 않은 생성자 
		System.out.println("안녕하세요");
	}

	public Introduction(String a) {      // 사용자 정의 생성자 : 매개변수를 쓴 생성자 
		System.out.println("제 이름은 " + a + "입니다");
	}

	public Introduction(int b) {      // 사용자 정의 생성자 : 매개변수를 쓴 생성자 
		System.out.println("제 나이는 " + b + "입니다");
	}
    
    
    // 이렇게 같은 이름이 같은데 매개변수의 옵션들이 달라지면서 같은 이름을 식별자로 쓸수 있는 것을 생성자 오버로딩이라고 한다 

	public static void main(String[] args) {

		Introduction I1 = new Introduction();         //출력 "안녕하세요"
		Introduction I2 = new Introduction("백지영");   //출력 " 제 이름은 백지영입니다" 
		Introduction I3 = new Introduction(31);       //출력 " 제 나이는 31입니다"
	}

}

 

 

public class Calculation {
	int a;
	int b;

	public Calculation() {  //기본 생성자 & 필드 변수 초기화 
		a = 10;
		b = 20;
	}

	public Calculation(int x, int y) {   //생성자 오버로딩 & 매개값 이용해 필드 변수 초기와 
		a = x;
		b = y;
	}

	public void sum() {  // 메소드 
		System.out.println("두 수의 합은: " + (a + b));
	}

	public static void main(String[] args) {
		Calculation c1 = new Calculation();
		c1.sum();         //결과 30 
		Calculation c2 = new Calculation(10, 10);
		c2.sum();        // 결과 10 
	}
}

 

별도의 클래스를 하나 정의 하였고, 필드 변수 (int x, int y)를 선언 하였다. 

main 메소드에서 인스턴스를 생성하면서 생성자를 호출 하였고, 호출된 생성자에 의해 필드 변수가 초기화 되었다. 

그리고 인스턴스로 메소드를 호출하여 값을 출력한다. 

반응형