- 객체 생성할 때 마지막에 ()붙인게 생성자 메서드임
- 클래스와 같은 이름의 메서드
- 인스턴스 변수를 초기화하기 위해 사용함
- 클래스에 생성자는 반드시 하나 이상 존재해야 함
- 직접 선언해주지 않으면 컴파일러가 기본 생성자를 만들어줌
- 생성자는 리턴타입이 없음
package oop; public class VariableInit { //명시적 초기화 int var = 10; static int classVar = 20; //초기화 블럭(아무것도 없이 블럭열면 초기화 블럭) { var = 30; } static { classVar = 40; } //()가 붙으면 무조건 메서드임 //안에 로직을 넣고 싶을 때는 초기화 블럭이나 생성자를 사용함 //생성자 사용 이유 //초기화에 여러줄의 코드가 필요할 때 //초기화에 파라미터가 필요할 때 public static void main(String[] args) { Init i = new Init(); //생성자를 만들지 않아서 컴파일러가 스스로 생성자를 만들어줌 i.a = 10; i.b = 20; i.c = 30; Init i2 = new Init(); // 2)컴파일 에러 해결 방법 : 아래 Init(){} 생성자를 만들어줌 i2.a = 40; i2.b = 50; i2.c = 60; System.out.println(i2.a); // 40 //i2.a = 40; 을 해주지 않으면 i2.a = 10이 됨 Init i3 = new Init(70, 80, 90); // 1)파라미터가 있는 생성자를 만들었기 때문에 위의 파라미터가 없는 생성자는 컴파일 에러 발생 } } class Init{ //인스턴스 변수 int a; int b; int c; Init(int a, int b, int c) { //지역 변수 this.a = a; this.b = b; this.c = c; //this : 인스턴스 변수와 지역변수의 이름이 같을 때 둘을 구분하기 위해 사용함 } //오버로딩 : 같은 이름의 메서드를 여러개 정의하는 것 (ex : Init 메서드 두개 만듦) //파라미터의 갯수가 다르거나 타입이 다르면 즉, 차이가 있으면 둘을 구분할 수 있음 Init() { //a = 10; //b = 20; //c = 30; this(10, 20, 30); //생성자의 첫줄에서만 사용할 수 있음 //this() : 생성자에서 다른 생성자를 호출할 때 사용함 } }
package oop; public class ClassMaker2 { //인스턴스 변수 하나를 선언하고 명시적으로 초기화 해주세요. //인스턴스 변수 : static이 붙지 않은 명칭 int a = 10; //위에서 선언한 인스턴스 변수를 초기화 블럭을 사용해 초기화 해주세요. { a = 20; } //위에서 선언한 인스턴스 변수를 생성자의 파라미터를 사용해 초기화 해주세요. ClassMaker2(int a) { this.a = a; } //위에서 선언한 인스턴스 변수를 생성자를 하나 더 만들어서 초기화 해주세요. ClassMaker2() { this(10); } //초기화 순서 : 명시적 초기화 -> 초기화 블럭 -> 생성자 }