본문 바로가기

국비지원_핀테크

11일차_ [java] 생성자 ( Constructor )

 

 

 

 

 

생성자 ( Constructor )

생성자

 

package constructor;

class TestClass01{
	public TestClass01() {
		// 생성자는 객체를 만들때 자동으로 호출
		System.out.println("생성자 실행");
	}
	public void test() {
		System.out.println("test 호출");
	}
}

public class Ex01 {
	public static void main(String[] args) {
		// 객체 생성, 생성자가 호출되어 자동으로 실행된다
		// "생성자 실행" 문구 출력
		TestClass01 t = new TestClass01();
	}
}

생성자는 객체가 생성될때 자동으로 호출된다

 

package constructor;

class TestClass02{
	private String officeName;
	// 생성자
	public TestClass02(String officeName) {
		System.out.println("생성자 실행");
		this.officeName = officeName;
		// 생성자에서 초기화
	}
	// setter
	public void setOfficeName(String officeName) {
		this.officeName = officeName;
	}
	// getter
	public String getOfficeName() {
		return this.officeName;
	}
}

public class Ex02 {
	public static void main(String[] args) {
		String name = "나의 회사";
		TestClass02 t = new TestClass02(name);
		// 객체를 만들때 생성자가 자동으로 호출,,,,,
		// officeName 이 생성자의 코드에서 초기화 됨 - 생성자는 초기화하는 목적으로 사용
		// ( 즉, setter 를 사용할 필요가 없음 )
		
		// t.setOfficeName(name); // setter 호출
		System.out.println(t.getOfficeName()); // getter 호출
	}
}

생성자를 사용하는 이유

 

package constructor;

class TestClass03{
	private String name, addr;
	private int age;
	
	// 생성자 선언
	// setter 를 사용하지 않고 생성자를 통해 초기화
	public TestClass03(String name, String addr, int age) {
		this.name = name;
		this.addr = addr;
		this.age = age;
		System.out.println("생성자를 통한 초기화");
	}
	
	// getter / setter 생성
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

public class Ex03 {
	public static void main(String[] args) {
		TestClass03 t = null; // = new TestClass03();
		// System.out.println(t);
		// t.setAddr("aaa");
		String name = "홍길동";
		String addr = "산골짜기";
		int age = 20;
		t = new TestClass03(name, addr, age);
		// t.setName(name);
		// t.setAddr(addr);
		// t.setAge(age);
		System.out.println("이름 : " + t.getName());
		System.out.println("주소 : " + t.getAddr());
		System.out.println("나이 : " + t.getAge());
	}
}

setter 를 사용하면 멤버변수의 갯수가 많아지면 많아질수록 코드가 길어지는데, 이때 생성자를 사용하여 간단하게 초기화를 시킬 수 있다

 

 

 

 

 

생성자 오버로딩

package constructor;

class TestClass04{
	public TestClass04(int num) {
		System.out.println("매개변수 받는 생성자");
	}
	// 생성자를 선언하는 순간 기본 생성자는 자동으로 소멸되기 때문에
	// 생성자를 선언 후 기본 생성자가 필요하다면 따로 선언해줘야 한다
	public TestClass04() {
		System.out.println("기본 생성자 실행");
	}
	
	// 메소드 오버로딩
	public void test() {
		System.out.println("test 호출");
	}
	public void test(int num) {
		System.out.println(num + " test 호출");
	}
}

public class Ex04 {
	public static void main(String[] args) {
		TestClass04 t = null;
		t = new TestClass04(20); // 매개변수 받는 생성자
		t = new TestClass04(); // 기본 생성자 실행
		
		// 오버로딩된 메소드 호출
		// t.test(); // test 호출
		// t.test(20); // 20 test 호출
		
	}
}

생성자를 선언하면 기본 생성자는 소멸하기 때문에 무조건 기본 생성자는 선언해주는 것이 오류 예방에 좋다

728x90