반응형
/*
* 생성자(Constructor)
* - 클래스를 사용하여 인스턴스를 생성할 때 호출되는 메서드 형태
* => new 키워드 뒤에 생성자 호출 코드가 기술됨
* - 주로 인스턴스 변수를 초기화하는 용도 또는
* 인스턴스 생성 시 초기에 수행할 작업을 기술하는 용도
* - 메서드와 형태가 유사하나 차이점 두 가지 존재
* 1) 선언부에 리턴타입이 없음
* (리턴값이 없는 것이 아니라 리턴타입 자체를 기술하지 않음)
* 2) 생성자 이름이 클래스 이름과 동일함
* - 개발자가 클래스 정의 시 생성자를 하나도 정의하지 않으면
* 컴파일러에 의해 자동으로 기본(Default) 생성자가 생성됨
* - 메서드와 유사한 형태이므로 파라미터가 없을 수도 있고 있을 수도 있음
* - 생성자를 별도로 호출할 수 없으며, 반드시 new 키워드 뒤에만 지정 가능
*
* < 생성자 정의 기본 문법 >
* [접근제한자] 클래스명([매개변수선언...]) {
* // 생성자 호출 시점(인스턴스 생성 시점)에 수행할 작업을 기술
* // => 인스턴스 변수 초기화 등
* }
*
* < 인스턴스 생성 기본 문법 >
* 클래스명 참조변수명 = new 생성자명([데이터...]);
*/
public class Ex2 {
public static void main(String[] args) {
System.out.println("Person2 인스턴스 생성 전");
Person2 p = new Person2(); // Person2 인스턴스 생성
// => new 키워드에 의해 인스턴스가 생성될 때
// Person2() 형태의 생성자를 자동으로 호출하게 된다!
// p.Person2(); // 주의! 생성자를 별도로 호출할 수 없다!
System.out.println("Person2 인스턴스 생성 후");
// p.name = "홍길동";
// p.age = 20;
System.out.println("이름 : " + p.name);
System.out.println("나이 : " + p.age);
// Person2 p2 = new Person2();
// p2.name = "이순신";
// p2.age = 44;
// System.out.println("이름 : " + p2.name);
// System.out.println("나이 : " + p2.age);
}
}
class Person2 {
String name;
int age;
// 클래스 정의 시 개발자가 별도의 생성자를 하나도 정의하지 않을 경우
// 자바 컴파일러에 의해 기본 생성자가 자동으로 생성됨
// => 기본 생성자는 접근제한자가 클래스와 같고,
// 리턴타입이 없으며, 이름은 클래스이름과 같다.
// 또한, 매개변수가 없으며 중괄호 블록{} 내에 수행할 코드가 없다.
// public Person2() {} // 기본 생성자(Default Constructor)
// public Person2() {
// // 기본 생성자 내에서 생성자 호출 확인을 위한 출력문 작성
// System.out.println("생성자 Person2() 호출됨!");
// }
// 생성자의 기본 역할 = 주로 인스턴스 변수 초기화
// => 객체 생성 시 기본적으로 가져야하는 값을 설정하는 역할
// => 기본 생성자 내에서 멤버변수에 특정 값을 지정하여
// 객체 생성 시 해당 데이터를 가진 채로 사용 가능하도록 한다.
// 즉, 객체가 기본적으로 가져야 할 공통적인 값을 설정
public Person2() {
System.out.println("생성자 Person2() 호출됨!");
// 인스턴스 변수 name 에 "홍길동" 저장, age 에 20 저장
name = "홍길동";
age = 20;
}
}
/*
인스턴스 생성 전
생성자 Person2()가 호출됨!
인스턴스 생성 후
이름 : 홍길동
나이 : 20
*/
public class Test2 {
public static void main(String[] args) {
// 은행계좌(Account2) 클래스의 인스턴스(acc) 생성
Account2 acc = new Account2();
// acc.accountNo = "111-1111-111";
// acc.ownerName = "홍길동";
// acc.balance = 10000;
// System.out.println("계좌번호 : " + acc.accountNo);
// System.out.println("예금주명 : " + acc.ownerName);
// System.out.println("현재잔고 : " + acc.balance + "원");
}
}
class Account2 {
String accountNo;
String ownerName;
int balance;
public Account2() {
System.out.println("Account2() 생성자 호출됨!");
// 인스턴스 생성 시 기본값으로 가져야할 데이터를 멤버변수에 저장
accountNo = "111-1111-111";
ownerName = "홍길동";
balance = 0;
// 인스턴스 생성 시 초기화 후 계좌 정보를 출력하기 위해
// showAccountInfo() 메서드 호출
showAccountInfo();
}
// 계좌 정보를 출력하는 showAccountInfo() 메서드 정의
public void showAccountInfo() {
System.out.println("계좌번호 : " + accountNo);
System.out.println("예금주명 : " + ownerName);
System.out.println("현재잔고 : " + balance + "원");
}
}
/*
Account2() 생성자 호출됨!
계좌번호 : 111-1111-111
예금주명 : 홍길동
현재잔고 : 0원
*/
/*
* 파라미터 생성자
* - 생성자 호출 시점에서 전달해야할 데이터가 있을 경우
* 생성자 파라미터(매개변수)를 선언할 수 있음(= 메서드와 동일)
* - 전달받은 데이터는 인스턴스 변수를 초기화하는 용도로 사용
* - 즉, 객체마다 다른 데이터를 가진 채로 인스턴스를 생성하기 위해 사용
*
* < 파라미터 생성자 정의 기본 문법 >
* < 생성자 정의 기본 문법 >
* [접근제한자] 클래스명(매개변수선언...) {
* // 생성자 호출 시점에 파라미터에 데이터를 전달하여
* // 인스턴스 내의 인스턴스 변수를 초기화함
* 인스턴스변수명 = 데이터;
* }
*
* => 파라미터 생성자 자동 생성 단축키 : Alt + Shift + S -> O
* (단, 멤버변수가 하나도 없을 경우 자동 생성창 실행되지 않음)
*/
public class Ex3 {
public static void main(String[] args) {
/*
* 파라미터 생성자
* - 생성자 호출 시점에서 전달해야할 데이터가 있을 경우
* 생성자 파라미터(매개변수)를 선언할 수 있음(= 메서드와 동일)
* - 전달받은 데이터는 인스턴스 변수를 초기화하는 용도로 사용
* - 즉, 객체마다 다른 데이터를 가진 채로 인스턴스를 생성하기 위해 사용
*
* < 파라미터 생성자 정의 기본 문법 >
* < 생성자 정의 기본 문법 >
* [접근제한자] 클래스명(매개변수선언...) {
* // 생성자 호출 시점에 파라미터에 데이터를 전달하여
* // 인스턴스 내의 인스턴스 변수를 초기화함
* 인스턴스변수명 = 데이터;
* }
*
* => 파라미터 생성자 자동 생성 단축키 : Alt + Shift + S -> O
* (단, 멤버변수가 하나도 없을 경우 자동 생성창 실행되지 않음)
*/
Person3 p = new Person3("홍길동", 20);
p.showPersonInfo();
Person3 p2 = new Person3("이순신", 44);
p2.showPersonInfo();
// Person3 p3 = new Person3(); // 오류 발생!
// => 파라미터 생성자를 하나라도 정의할 경우
// 컴파일러에 의해 기본 생성자가 자동으로 생성되지 않기 때문에
// 기본 생성자를 호출할 수 없게 된다!
}
}
class Person3 {
String nation;
String name;
int age;
// 생성자를 정의하지 않으면 기본 생성자가 자동으로 생성됨
// public Person3() {} // 기본 생성자
// String, int 타입 데이터를 전달받을 파라미터 생성자 정의
public Person3(String newName, int newAge) {
System.out.println("Person3(String, int) 생성자 호출됨!");
// 전달받은 파라미터값을 인스턴스 변수에 저장
name = newName;
age = newAge;
// 만약, 국가명(nation)은 무조건 "대한민국"으로 고정하는 경우
// 별도로 파라미터값을 전달받지 않고 생성자 내에서 "대한민국"으로 초기화
nation = "대한민국";
}
// 파라미터 생성자 자동 생성 단축키 : Alt + Shift + S -> O
// public Person3(String nation, String name, int age) {
// super();
// this.nation = nation;
// this.name = name;
// this.age = age;
// }
public void showPersonInfo() {
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
System.out.println("국가 : " + nation);
}
}
/*
Person3(String,int) 생성자 호출됨
이름: 홍길동
나이 : 20
국가 : 대한민국
Person3(String,int) 생성자 호출됨
이름: 이순신
나이 : 44
국가 : 대한민국
*/
public class Test3 {
public static void main(String[] args) {
// 은행계좌(Account3) 클래스의 인스턴스(acc) 생성
Account3 acc = new Account3("111-1111-111", "홍길동", 10000);
acc.showAccountInfo();
Account3 acc2 = new Account3("555-5555-555", "이순신", 99999);
acc2.showAccountInfo();
}
}
class Account3 {
String accountNo;
String ownerName;
int balance;
// 계좌번호, 예금주명, 현재잔고를 전달받아 초기화하는 생성자 Account3() 정의
public Account3(String newAccountNo, String newOwnerName, int newBalance) {
System.out.println("Account3(String, String, int) 생성자 호출됨!");
accountNo = newAccountNo;
ownerName = newOwnerName;
balance = newBalance;
// showAccountInfo();
}
// 계좌 정보를 출력하는 showAccountInfo() 메서드 정의
public void showAccountInfo() {
System.out.println("계좌번호 : " + accountNo);
System.out.println("예금주명 : " + ownerName);
System.out.println("현재잔고 : " + balance + "원");
}
}
/*
계좌번호 : 123-4567-8910
예금주명 : 홍길동
현재잔고 : 0원
*/
반응형
'JAVA' 카테고리의 다른 글
[Java] 생성자 오버로딩(Constructor Overloading) (0) | 2021.10.28 |
---|---|
[Java] 메서드 오버로딩(Method Overloading) (0) | 2021.10.28 |
[Java] Getter / Setter 메서드 (0) | 2021.10.28 |
[Java] 접근제한자 (0) | 2021.10.28 |
[Java] Class 연습 (0) | 2021.10.28 |