생성자(constructor)

Mia Lee·2021년 12월 2일
0

JAVA

목록 보기
57/98
package ex_constructor;

public class Ex1 {

	public static void main(String[] args) {

		/*
		 * 생성자(Constructor)
		 * 
		 * < 생성 정의 기본 문법 >
		 * [접근제한자] 클래스명([매개변수...]) {
		 * 		// 생성자 호출(객체 생성)시 수행할 코드들...
		 * 
		 * }
		 * 
		 * < 기본 생성자 형태 >
		 * public 클래스명() {}
		 * 
		 */
		
		// Person 클래스 인스턴스(p) 생성
		// 이름 : "홍길동", 나이 : 20으로 초기화
		Person p = new Person();
		// => Person 클래스의 매개변수가 없는 Person() 생성자를 호출
		//    만약, Person() 생성자가 없으면 컴파일러에 자동으로 생성
		p.name = "홍길동";
		p.age = 20;
		System.out.println("이름 : " + p.name);
		System.out.println("나이 : " + p.age);
		
		System.out.println("=====================================");
		
		DefaultPerson dp = new DefaultPerson();
		// new DefaultPerson() 코드에 의해 객체 생성 시점에서 
		// DefaultPerson() 생성자가 호출됨
		System.out.println("이름 : " + dp.name);
		System.out.println("나이 : " + dp.age);
		
		System.out.println("=====================================");
		
		// 파라미터 2개(String, int)를 전달받는 생성자 ParammeterPerson() 호출
		ParameterPerson pp = new ParameterPerson("박장범", 20);
		// => 객체 생성 시 전달된 데이터를 사용하여 생성자에게 초기화 수행
		
		System.out.println("이름 : " + pp.name);
		System.out.println("나이 : " + pp.age);
		
		ParameterPerson pp2 = new ParameterPerson("한광헌", 30);
		System.out.println("이름 : " + pp2.name);
		System.out.println("나이 : " + pp2.age);
		
		// 파라미터 생성자가 1개이상 존재하는 클래스의 기본 생성자를 호출하면
		// 자동으로 생성되지 않기 때문에 컴파일 에러 발생한다!
//		ParameterPerson pp3 = new ParameterPerson(); // 컴파일 에러 발생!
		// => 파라미터 생성자를 하나라도 정의하게 되면
		//    기본 생성자는 더 이상 자동으로 생성되지 않는다!
		
		
		
		
	}

}

/*
 * Person 클래스 정의
 * 멤버변수 : 이름(name, 문자열), 나이(age, 정수)
 */
class Person {
	// 생성자가 하나도 정의되지 않은 클래스는 컴파일러에 의해
	// 기본 생성자가 자동으로 생성됨
	
	// public Person() {}
	// => 컴파일러에 의해 생성될 기본 생성자
	
	String name;
	int age;
	
}

// 파라미터가 없는 기본 생성자 정의
class DefaultPerson {
	
	String name;
	int age;
	
	// 매개변수가 없는 기본 생성자와 동일한 형태의 생성자를 정의
	// => 출력문을 사용하여 메세지 출력
	public DefaultPerson() {
		// DefaultPerson 클래스의 인스턴스가 호출될 때
		// 생성자가 호출되며, 내부의 코드가 실행됨
		System.out.println("DefaultPerson() 생성자 호출됨!");
		
		name = "홍길동";
		age = 20;
		// 생성자에서는 주로 멤버변수의 초기화나 다른 메서드의 호출을 통해
		// 객체가 실행될 때 수행할 초기 작업을 수행하는 내용이 기술
		
	}
	
}

// 파라미터가 1개 이상인 파라미터 생성자 정의
class ParameterPerson {
	
	String name;
	int age;
	
	// 일반 메서드와 동일하게 생성자에 전달할 데이터가 있을 경우
	// 생성자 정의 시 파라미터 부분에 매개변수를 선언할 수 있다!
	
	// 이름(newName)과 나이(newAge)를 전달받는 파라미터 생성자를 정의
	// => "ParameterPerson(String, int) 생성자 호출됨" 출력 후
	//    이름과 나이를 멤버변수에 저장
	public ParameterPerson(String newName, int newAge) {
		System.out.println("ParameterPerson(String, int) 생성자 호출됨!");
		
		// 생성자 호출 시 전달되는 데이터를 사용하여 멤버변수 초기화
		name = newName;
		age = newAge;
		
	}
	
}








연습

package ex_constructor;

public class Test1 {

	public static void main(String[] args) {

		Account acc = new Account();
		
		System.out.println("계좌번호 : " + acc.accountNo);
		System.out.println("예금주명 : " + acc.ownerName);
		System.out.println("현재잔고 : " + acc.balance);
		
	}

}

/*
 * Account 클래스 정의
 * - 멤버변수
 *   1) 계좌번호(accountNo, 문자열)
 *   2) 예금주명(ownerName, 문자열)
 *   3) 현재잔고(balance, 정수)
 *   
 * - 기본생성자 정의
 *   => 다음 데이터로 초기화
 *   계좌번호 : "111-1111-111"
 *   예금주명 : "홍길동"
 *   현재잔고 : 10000
 * 
 */
class Account {
	
	String accountNo;
	String ownerName;
	int balance;
	
	public Account() {
		accountNo = "111-1111-111";
		ownerName = "홍길동";
		balance = 10000;
	}
	
}

















0개의 댓글