[자바기초] 객체 설계하기 연습문제

2021. 3. 21. 22:54IT/JAVA

03. 접근 제어자 연습

'접근 제어자' 강의에서 한 것처럼 Person 클래스와 BankAccount 클래스의 모든 인스턴스 변수들을 private으로 설정해주세요. 각 변수에 해당하는 'setter'(예: setName)과 'getter'(예: getName) 메소드를 써주고, BankDriver에서 오류가 나지 않도록 적절히 적용해주세요!

프로그램을 수정하여 오류가 나오지 않도록 하고,  테스트 케이스는 유지하여  이전 문제와 같이 아래의 출력값이 나오도록 해야 합니다.

30000원 입금하였습니다. 잔고: 530000원, 현금: 70000원
true
170000원 출금하였습니다. 잔고: 360000원, 현금: 240000원
true
입금 실패입니다. 잔고: 360000원, 현금: 240000원
false
출금 실패입니다. 잔고: 360000원, 현금: 240000원
false

03 - 접근제어자 연습.zip
0.00MB

 

04. 메소드 오버로딩

계좌이체

지금까지 만들어 온 은행 시뮬레이션 프로그램에 송금 기능을 담당하는 transfer 메소드를 써봅시다. 메소드 오버로딩의 개념을 이용해서 BankAccount 클래스에 두 개의 transfer 메소드를 쓰고, Person 클래스에도 두 개의 transfer 메소드를 쓰겠습니다.



송금 메소드 작성(BankAccount.java)

송금은 계좌 - 계좌 방식으로 이루어집니다. 하지만 사용자의 편리함을 위해서 아래의 두 메소드를 만들겠습니다:

public class BankAccount {
    // 저번 과제에서의 코드를 포함해주세요!

    // 첫 번째 파라미터: 받는 사람 (Person)
    // 두 번째 파라미터: 이체할 금액 (정수)
    // 리턴 : 성공여부 (불린)
    public boolean transfer(Person to, int amount) {
        // insert code here
    }

    // 첫 번째 파라미터: 받는 사람의 계정 (BankAccount)
    // 두 번째 파라미터: 이체할 금액 (정수)
    // 리턴 : 성공여부 (불린)
    public boolean transfer(BankAccount to, int amount) {
        // insert code here
    }
}

(1) 송금 성공 시 true를 리턴, 실패시 false를 리턴합니다.

(2) 송금하고자 하는 금액(amount)이 음수일 때 송금 실패입니다.

(3) amount가 잔고(balance)보다 클 때 송금 실패입니다.

(4) 나의balance를 amount 만큼 줄이고, 받는사람(to)의 balance를 amount만큼 늘려줍니다.

(5) 송금 성공시 아래 문구를 출력합니다:

true - from: [송금자 이름], to: [수신자 이름], amount: [송금액], balance: [송금자 잔고]

(6) 송금 실패시 아래 문구를 출력합니다:

false - from: [송금자 이름], to: [수신자 이름], amount: [송금액], balance: [송금자 잔고]

 

송금 메소드 작성(Person.java)

위의 룰들을 지킨 송금 메소드를 Person 클래스 내에도 만듭니다.

public class Person {
    // 저번 과제에서의 코드를 포함해주세요!

    // 첫 번째 파라미터: 받는 사람 (Person)
    // 두 번째 파라미터: 이체할 금액 (정수)
    // 리턴 : 성공여부 (불린)
    public boolean transfer(Person to, int amount) {
        // insert code here
    }

    // 첫 번째 파라미터: 받는 사람의 계정 (BankAccount)
    // 두 번째 파라미터: 이체할 금액 (정수)
    // 리턴 : 성공여부 (불린)
    public boolean transfer(BankAccount to, int amount) {
        // insert code here
    }
}

 

테스트

true - from: 문종모, to: 김신의, amount: 200000, balance: 300000
true - from: 김신의, to: 문종모, amount: 150000, balance: 150000
true - from: 문종모, to: 김신의, amount: 270000, balance: 180000
true - from: 김신의, to: 문종모, amount: 130000, balance: 290000

06 - 계좌 이체.zip
0.00MB

 

09. 생성자 연습

생성자 연습

두 클래스에 생성자를 만들어 봅시다.

Person 클래스

Person의 생성자 2개를 만들 것입니다.

(1) 파라미터로 '이름'을 뜻하는 String형 값 pName과 '나이'를 뜻하는 int형 값 pAge를 받고 초기값을 설정합니다. 인스턴스 변수 cashAmount은 0으로 시작합니다. 단, pAge가 음수면 인스턴스 변수 age는 12로 설정합니다.

public Person(String pName, int pAge) {
    // 코드를 입력하세요
}

(2) 파라미터로 '이름'을 뜻하는 String형 값 pName, '나이'를 뜻하는 int형 값 pAge, 그리고 '보유 현금'을 뜻하는 int형 값 pCashAmount를 받고 초기값을 설정합니다. (1)번과 마찬가지로 pAge가 음수인 경우에는 age를 12로 설정합니다. pCashAmount가 음수면 인스턴스 변수 cashAmount를 0으로 설정합니다.

public Person(String pName, int pAge, int pCashAmount) {
    // 코드를 입력하세요
}

 

BankAccount 클래스


BankAccount의 생성자 3개를 만들 것입니다.

(1) 파라미터로 '잔액'을 뜻하는 int형 값 pBalance를 받습니다. 파라미터로 받은 잔액은 음수가 될 수 없습니다. 음수 입력이 있을 경우 0으로 설정합니다.

public BankAccount(int pBalance) {
    // 코드를 입력하세요
}

(2) 파라미터로 '소유자'를 뜻하는 Person형 값 pOwner를 받습니다. pOwner를 인스턴스 변수 owner에 지정해주고, 잔액은 0으로 시작합니다.

public BankAccount(Person pOwner) {
    // 코드를 입력하세요
}

(3) 파라미터로 '잔액'을 뜻하는 int형 값 pBalance와 '소유자'를 뜻하는 Person형 값 pOwner를 받습니다. 마찬가지로 balance와 owner를 설정해주고, 파라미터로 받은 잔액이 음수인 경우에는 balance를 0으로 설정합니다.

public BankAccount(int pBalance, Person pOwner) {
    // 코드를 입력하세요
}

 

테스트

Main 클래스의 main 메소드에:

Person의 1번 생성자를 사용해서 인스턴스 p1을 만듭니다. 생성 후 보유 현금은 30000으로 재설정해줍니다.

Person의 2번 생성자를 사용해서 인스턴스 p2를 만듭니다. 보유 현금 초기값은 100000으로 설정해줍니다.

BankAccount의 2번 생성자를 사용해서 인스턴스 a1을 만듭니다. 파라미터로 p1을 넘겨줘서 p1과 a1을 연결해줍니다. 생성 후 잔액을 100000으로 재설정해줍니다.

BankAccount의 3번 생성자를 사용해서 인스턴스 a2을 만듭니다. 파라미터로 p2을 넘겨줘서 p2과 a2을 연결해줍니다. 잔액 초기값은 500000입니다.

위의 지시에 따라 프로그램을 수정하여 오류가 나오지 않도록 하고, 테스트 케이스는 유지하여 이전 문제와 같이 아래의 출력값이 나오도록 해야 합니다.

 

true - from: 문종모, to: 김신의, amount: 200000, balance: 300000
true - from: 김신의, to: 문종모, amount: 150000, balance: 150000
true - from: 문종모, to: 김신의, amount: 270000, balance: 180000
true - from: 김신의, to: 문종모, amount: 130000, balance: 290000

09 - 생성자연습.zip
0.00MB

 

실습과제

특가 할인 매장

가게에서 판매할 상품을 위한 클래스를 만들어봅시다!

MarketGood 클래스

인스턴스 변수

MarketGood 클래스는 아래와 같은 인스턴스 변수들을 포함합니다:

(1) String name (상품의 이름)

(2) int retailPrice (상품의 출시 가격)

(3) int discountRate (상품의 할인율. 단위: %)

모두 private으로 설정해주세요!



생성자

MarketGood 클래스는 두 개의 생성자를 가지고 있습니다:

(1) public MarketGood(String name, int retailPrice, int discountRate)

생성자의 파라미터로 받은 값들을 인스턴스 변수에 지정해줍니다.

discountRate가 0%보다 작거나 100%보다 큰 경우, 0으로 지정해줍니다.

(2) public MarketGood(String name, int retailPrice)

두 번째 생성자는 discountRate의 기본값으로 0을 넣어줍니다.

 

Getter / Setter 메소드

(1) name, retailPrice는 getter 메소드만 만들어줍니다. 값을 지정해주는 것은 생성자에서 완료되었기 때문에 setter 메소드는 따로 만들 필요가 없습니다.

(2) discountRate는 바뀔 수 있기 때문에 getter과 setter 메소드를 모두 만들어줍니다.

public int getDiscountedPrice()

할인가를 리턴하는 메소드를 만듭니다. 예를 들어서 retailPrice가 10000이고 discountRate가 20이면, 8000을 리턴하는 것이죠.

MacBook Air의 할인율: 0%
MacBook Pro의 할인율: 15%
iPhone 7의 정상 가격: 920000원
iPhone 7의 할인 가격: 736000원
경쟁 업체가 많아져서 iPhone 7의 할인율이 35%로 올랐습니다.
iPhone 7의 할인 가격: 598000원

12 - 특가 할인 매장.zip
0.00MB