생성자
- 생성자는 메소드다
- 생성자는 클래스의 이름과 동일한 이름을 가진 메소드다
- 생성자 메소드는 반환타입이 없다 (void도 있으면 안된다)
public class Sample {
int no;
String name;
// 생성자 메소드
Sample() {
}
}
- 객체 생성할 때 실행되는 메소드. 즉, 객체의 초기화 작업을 진행한다
- new 생성자 메소드( )의 형태로만 사용한다
- 참조변수.생성자메소드( )의 형태로 사용할 수 없다.
인스턴스 메소드와의 차이
- 인스턴스 메소드는 객체 생성 후 사용가능한 메소드다.
- 객체 생성 후, 객체의 참조값을 가지고 있는 참조변수를 이용해서 참조변수.인스턴스 메소드( )의 형태로 사용한다
기본 생성자 메소드
매개변수가 하나도 없는 생성자 메소드를 기본 생성자 메소드라고 한다.
기본 생성자 메소드는 다른 생성자가 하나도 없을 때 컴파일러가 자동으로 추가한다. ( 생성자 메소드가 하나라도 존재하면 자동으로 추가되지 않는다)
생성자 메소드의 수행문
생성자 메소드의 수행문은 객체 생성 직후에 실행된다.
생성자 메소드의 수행문으로 객체의 멤버변수를 초기화할수 있다
- 객체의 멤버변수는 해당 데이터 타입의 기본값으로 초기화된다.
- 생성자메소드의 수행문으로 객체의 멤버변수에 원하는 값을 저장할 수 있다.
public class Person {
String name;
int age;
double height;
double weight;
Person () {
name = "홍길동";
age = 30;
height = 175.5;
weight = 71.5;
}
}
생성자 메소드의 중복정의
매개변수를 가지는 생성자 메소드를 여러개 중복정의할 수 있다. ( 기본 생성자 메소드는 중복 정의 X )
매개변수를 서로 다르게 중복정의를 해야한다.

// 기본생성자
public Product() {
}
// 이런식으로도 표현이 가능하다.
public Product(int no, String name, String maker, int price) {
this(no, name, maker, price, 3);
}
// 대부분 이런식으로 작성한다
public Product(int no, String name, String maker, int price, int stock) {
this.no = no;
this.name = name;
this.maker = maker;
this.price = price;
this.stock = stock;
this.soldOut = false;
}
메소드를 사용한 예시 코드
package method;
public class BankAccount {
// iv 정의하기
String owner; // 예금주
String accNo; // 계좌번호
int password; // 비밀번호
long balance; // 현재 잔액
double interestRate; // 이율
// 생성자 정의하기
public BankAccount(String owner, String accNo, int password, long balance, double interestRate) {
this.owner = owner;
this.accNo = accNo;
this.password = password;
this.balance = balance;
this.interestRate = interestRate;
}
// 인스턴스 메소드 정의하기
/**
* 계좌정보를 화면에 출력한다
*/
public void display() {
System.out.println("계좌정보");
System.out.println("예금주 : "+owner);
System.out.println("계좌번호 : "+accNo);
System.out.println("현재잔액 : "+balance);
}
/**
* 입금액을 전달받아서, 계좌의 잔액만큼 증가시킨다.
* @param amount 입금액
*/
public void deposit(int ammout) {
System.out.println("입금액 : " + ammout);
balance += ammout;
System.out.println("입금 후 잔액 : "+ balance);
System.out.println("입금이 완료되었습니다.");
}
/**
* 출금요구금액, 비밀번호를 전달받아서 인증이 완료되면 요구금액만큼 출금액을 반환한다
* @param amount 출금요구금액
* @param pwd 비밀번호
* @return 출금액, 비밀번호가 일치하지 않으면 출금액은 0이다.
*/
public long withdraw(int amount, int pwd) {
// 빠른 종료, 나쁜 경우를 먼저 찾아서 제거하기
if(password != pwd) {
System.out.println("비밀번호가 일치하지 않습니다");
return 0;
}
balance -= amount;
System.out.println("출금 후 잔액은 : "+balance);
return amount;
}
/**
* 이전 비밀번호와 새 비밀번호를 전달받아서 비밀번호를 변경합니다
* 이전 비밀번호와 비밀번호가 일치하고, 새 비밀번호와 이전 비밀번호가 서로 다른경우에만
* 비밀번호를 변경한다
* @param oldPwd 이전 비밀번호
* @param newPwd 새 비밀번호
*/
public void changePassword(int oldPwd, int newPwd) {
if(oldPwd != password) {
System.out.println("비밀번호 변경실패 : 비밀번호가 일치하지 않습니다");
return;
}
if (oldPwd == newPwd) {
System.out.println("비밀번호 변경실패 : 기존 비밀번호와 같은 비밀번호를 사용할 수 없습니다");
return;
}
password = newPwd;
System.out.println("비밀번호 변경이 완료되었습니다");
}
/**
* 비밀번호를 전달받아서, 계좌를 해지키신다. 해지가 완료되면 해지환급금을 반환한다
* @param pwd 비밀번호
* @return 해지환급금, 현재 잔액에 이율을 적용한 금액이다.
*/
public long terminate(int pwd) {
if(pwd != password) {
System.out.println("비밀번호가 일치하지 않습니다.");
return 0;
}
System.out.println("계좌가 해지되었습니다.");
long amount = balance + (long)(balance * interestRate);
return amount;
}
}
BankAccount 라는 클래스에 인스턴스 변수와 인스턴스 메서드를 선언하고
package method;
public class BankAccountApp {
public static void main(String[] args) {
// 계좌정보 객체를 생성하고, 조회,입금,출금,비밀번호변경,해지 기능 사용해보기
// 계좌정보 객체 생성하기
BankAccount acc1 = new BankAccount("김유성", "1234-56-789", 1234, 1000000L, 0.05);
// 계좌정보 조회하기
acc1.display();
System.out.println();
// 입금하기
acc1.deposit(300000);
System.out.println();
// 출금하기
long amount1 = acc1.withdraw(50000, 1234);
System.out.println("출금액 : "+ amount1);
System.out.println();
// 비밀번호 변경하기
acc1.changePassword(1111, 1541);
acc1.changePassword(1234, 4271);
System.out.println();
// 해지하기
acc1.terminate(1545);
long amount = acc1.terminate(4271);
System.out.println("해지금액 : "+ amount);
}
}
만든 토대로 출력하는 클래스인 BankAccountApp 이다

'Java' 카테고리의 다른 글
| Java_상속, Object, 클래스 형변환(oop) (0) | 2023.11.08 |
|---|---|
| Java_static변수와 static메소드 (oop) (0) | 2023.11.08 |
| Java_클래스와 메소드, 오버로딩(oop) (0) | 2023.11.01 |
| Java_객체지향프로그래밍 (oop) (0) | 2023.11.01 |
| Java_배열 [ Array ] (0) | 2023.10.27 |