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;
}
}