생성자 Constructor

박성현·2024년 3월 20일

java

목록 보기
27/51

생성자

  • new 연산자와 함께 클래스 인스턴스화 할때 사용되는 리턴타입이 없는 특별한 메소드
  • 리턴타입이 없으며 클래스이름과 동일
  • 객체를 생성하고 멤버 변수 초기화에 사용
  • 메소드 오버로딩을 통해 여러개의 생성자 정의 가능

기본 생성자

  • 생성자에 매게변수가 없는 생성자
  • 생성자 없이 클래스 작성시 불려지는 생성자
  • 오버로딩된 생성자가 있는 경우에 기본생성자를 사용하려면 꼭 작성해야 함

생성자 기본 오버로딩

package classex;

public class Dog {
	String name;
	int age;

	// 기본생성자
	public Dog() {

	}

	//오버로딩
	public Dog(String name) {
		this.name = name;
	}

	//오버로딩
	public Dog(int age) {

	}
	//오버로딩
	public Dog(String name, int age) {

	}

	public static void main(String[] args) {
		Dog dog= new Dog();
		dog.name = "똘똘이";
		dog.age = 26;
		System.out.println(dog.name);
		System.out.println(dog.age);
		
		Dog dog2 = new Dog("망나니");
		System.out.println(dog2.name);
	}

}

결과값 :


this 란?

  • 생성자 매개변수와 멤버변수와 이름이 같은경우
  • this는 인스턴스화 되었을때의 그 인스턴스를 가르킴
  • this.멤버변수 = 멤버변수 로 사용
  • 가장가까운 나의 변수를 찾으면 됨
package classex;

public class Dog {
	String name;
	int age;

	// 기본생성자(오버로딩 시에 기본생성자를 사용하고 싶으면 생략하면 안됨)
    // 평소에는 생량가능
	public Dog() {

	}

	//오버로딩
	public Dog(String name) {
		this.name = name;
	}

	//오버로딩
	public Dog(int age) {
		this.age = age;

	}
	//오버로딩
	public Dog(String name, int age) {
		this.age=age;
		this.name= name;

	}

	public static void main(String[] args) {
		Dog dog= new Dog();
		dog.name = "똘똘이";
		dog.age = 26;
//		System.out.println(dog.name);
//		System.out.println(dog.age);
		
		Dog dog2 = new Dog("망나니");
//		System.out.println(dog2.name);
		
		Dog dog3 = new Dog("멍멍이",4);
		System.out.println(dog3.age);
		System.out.println(dog3.name);
		
	}

}

결과값 :


this() = 생성자에서 다른 생성자 호출로 멤버변수 초기화

package classex;

public class Cat {
	String name;
	int age;
	
	public Cat() {
	// Cat("나비", 1)의 의미로 아래의 생성자를 실행하게된다
    	// 나의 "나비", 1 함수를 타게된다.
        // 즉, Cat(String name, int age)를 바로 호출하게됨
		this("나비", 1);
	}
	
	public Cat(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public static void main(String[] args) {
		Cat cat = new Cat();
		System.out.println(cat.age);
		System.out.println(cat.name);
	}

}

결과값 :


초기화 블록

  • 클래스 필드의 초기화만을 담당하는 중괄호({})로 둘러싸인 블록
  • 초기화 블록은 생성자보다 먼저 호출
  • static 초기화 블록 : 클래스 instance 생성시 한 번 실행됨 (최초 1번 실행)
  • 인스턴스 초기화 블록 : 클래스 instance 생성시 매 번 실행됨 (매번 실행)
package classex;

public class InitBlockEx {
	static int staticInt;
	int instancsInt;

	static {
		staticAction(); 
		staticInt++;
		System.out.println(staticInt);
		System.out.println("static init block");
	}
	static void staticAction() {
		staticInt++;
	}
	void instanceAction() {
		staticInt++;
	}
	{
		staticAction();
		instanceAction();
	}
	public InitBlockEx() {
		System.out.println("InitBlockEx()");
	}
	public static void main(String[] args) {
		InitBlockEx ib01 = new InitBlockEx();
		InitBlockEx ib02 = new InitBlockEx();
}
}

결과값 :


Tip ! 생성자를 자동으로 쉽게 만들어줄 수 있는 기능

상단(Source) => Generate Constructor using Fields => 사용 하고자하는 변수 선택 => Generate

와 같이 진행하게 되면

public Cat(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

와 같이 자동으로 생성되는 것을 확인할 수 있다.

같은 방법으로 geter, seter, toString도 생성 가능하다.

profile
개발기록장

0개의 댓글