Presentation is loading. Please wait.

Presentation is loading. Please wait.

6장 객체-지향 설계 ②.

Similar presentations


Presentation on theme: "6장 객체-지향 설계 ②."— Presentation transcript:

1 6장 객체-지향 설계 ②

2 목차 인터페이스 메소드 분해 메소드 중복정의 Comparable 인터페이스 사용하기 MiniQuiz 수정하기
유연한 계좌 클래스 만들기 편향된 동전 클래스 만들기

3 Comparable 인터페이스 사용하기 Comparable 인터페이스의 사용을 연습해 보기 위해서, 세가지 값 중 최대값을 찾는 프로그램인 Compare3.java, Comparisons.java를 작성해 보자. Compare3 클래스 작성 세개의 Comparable값을 매개변수로 받아서, 그 중 가장 큰 값을 찾아 반환하는 static 메소드 largest()를 만든다. 가장 큰 값을 찾을 때, Comparable 인터페이스가 가지고 있는 compareTo() 메소드를 이용하라. Comparisons 클래스 작성 위의 lagest() 메소드를 테스트하는 메인 메소드를 만든다. 3개의 문자열을 입력 받아 테스트해 본다. 3개의 숫자를 입력 받아 테스트해 본다. – java1.5의 int에서 Integer로의 자동변환 기능 추가로 인해서 가능.

4 MiniQuiz 수정하기 교재 에 있는, 질문을 하고 그에 응답하는 프로그램인 Complexity.java, Question.java, MiniQuiz.java 를 수정해 보자. 사용자에게 문제를 보여주고, 답을 받아, 정답여부를 알려주는 부분의 코드를 보자. 같은 코드가 q1과 q2에 대해서 두 번 사용되었음을 볼 수 있다. 이 부분을 askQuestion()이라는 메소드로 따로 분리 해 보자. 메소드의 헤더 부분은 아래와 같이 되어야 할 것이다. private static void askQuestion(Question question) 이 메소드는 main()메소드를 가지고 있는 MiniQuiz 클래스 안에 정의되어야 할 것이다. main()메소드에서는 같은 클래스내의 static 메소드만 호출 할 수 있으므로, static 메소드로 만들어야 한다. 이 클래스에서만 사용할 것이므로 private으로 만든다.

5 MiniQuiz 수정하기 (Complexity.java)
//******************************************************************** // Complexity.java Author: Lewis/Loftus // // 명시적인 복잡도를 할당할 수 있는 객체에 대한 인터페이스를 표현한다. public interface Complexity { public void setComplexity (int complexity); public int getComplexity(); }

6 MiniQuiz 수정하기 (Question.java)
//******************************************************************** // Question.java // 질문(과 그 답을) 표현한다. public class Question implements Complexity { private String question, answer; private int complexityLevel; // // 구성자 : 질문의 복잡도를 기본으로 설정한다. public Question (String query, String result) question = query; answer = result; complexityLevel = 1; } // 이 질문에 대한 복잡도 수준을 설정한다. public void setComplexity (int level) complexityLevel = level; // 이 질문에 대한 복잡도 수준을 반환한다. public int getComplexity() return complexityLevel;

7 MiniQuiz 수정하기 (Question.java)
// // 질문을 반환한다. public String getQuestion() { return question; } // 이 질문에 대한 답을 반환한다. public String getAnswer() return answer; // 후보 답이 정답과 같으면 참을 반환한다. public boolean answerCorrect (String candidateAnswer) return answer.equals(candidateAnswer); // 이 질문(과 그 답)을 스트링으로 반환한다. public String toString() return question + "\n" + answer;

8 MiniQuiz 수정하기 (MiniQuiz.java)
//******************************************************************** // MiniQuiz.java // // 인터페이스를 구현한 클래스 사용을 보인다. import java.util.Scanner; public class MiniQuiz { // // 간단한 퀴즈를 제공한다. public static void main (String[] args) Question q1, q2; String possible; Scanner scan = new Scanner(System.in); q1 = new Question ("What is the capital of Jamaica?", "Kingston"); q1.setComplexity (4); q2 = new Question ("Which is worse, ignorance or apathy?", "I don't know and I don't care"); q2.setComplexity (10);

9 MiniQuiz 수정하기 (MiniQuiz.java)
System.out.print (q1.getQuestion()); System.out.println (" (Level: " + q1.getComplexity() + ")"); possible = scan.nextLine(); if (q1.answerCorrect(possible)) System.out.println ("Correct"); else System.out.println ("No, the answer is " + q1.getAnswer()); System.out.println(); System.out.print (q2.getQuestion()); System.out.println (" (Level: " + q2.getComplexity() + ")"); if (q2.answerCorrect(possible)) System.out.println ("No, the answer is " + q2.getAnswer()); }

10 유연한 계좌 클래스 만들기 입금, 출금 등의 일을 할 수 있는 은행 계좌 프로그램인 Account.java, TestAccount.java를 수정해 보자. 구성자를 중복정의 해 보자. Public Account(double initBal, String owner, long number) : 명시된 값으로 잔액, 소유주, 계좌번호를 초기화한다. (이미 정의되어있다.) Public Account(double initBal, String owner) : 명시된 값으로 잔액과 소유주를 초기화하고, 계좌번호는 랜덤하게 만든다. Public Account(String owner) : 명시된값으로 소유주를 초기화하고, 잔액은 0으로 하고, 계좌번호는 랜덤하게 만든다. 출금(withdraw) 메소드를 중복정의 해 보자. 수수료(fee)를 매개변수로 받고, 이 수수료도 잔액에서 제하도록 만들어 보자.

11 유연한 계좌 클래스 만들기(Account.java)
//******************************************************* // Account.java // 입금, 출금, 소유주 변경, 계좌정보 제공의 메소드들을 // 가지는 은행 계좌 클래스 public class Account { private double balance; private String name; private long acctNum; // // 구성자 - 잔액, 소유주, 계좌번호를 초기화한다. public Account(double initBal, String owner, long number) balance = initBal; name = owner; acctNum = number; } // 잔액이 출금을 하기에 충분한지 확인하고, // 만약 그렇다면, 잔액에서 출금액 만큼을 제하고, // 그렇지 않다면, 메세지를 출력한다. public void withdraw(double amount) if (balance >= amount) balance -= amount; else System.out.println("Insufficient funds");

12 유연한 계좌 클래스 만들기(Account.java)
// // 잔액에 입금액을 더한다. public void deposit(double amount) { balance += amount; } // 잔액을 반환한다. public double getBalance() return balance; // 소유주, 계좌번호, 잔액을 문자열로 반환한다. public String toString() return "Name:" + name + "\nAccount Number: " + acctNum + "\nBalance: " + balance;

13 유연한 계좌 클래스 만들기 (TestAccount.java)
//******************************************************* // TestAccount.java // // 계좌 클래스의 중복정의된 메소드들을 테스트해 본다. import java.util.Scanner; public class TestAccount { public static void main(String[] args) String name; double balance; long acctNum; Account acct; Scanner scan = new Scanner(System.in); System.out.println("Enter account holder's first name"); name = scan.next(); acct = new Account(name); System.out.println("Account for " + name + ":"); System.out.println(acct); System.out.println("\nEnter initial balance"); balance = scan.nextDouble(); acct = new Account(balance,name);

14 유연한 계좌 클래스 만들기 (TestAccount.java)
System.out.println("\nEnter account number"); acctNum = scan.nextLong(); acct = new Account(balance,name,acctNum); System.out.println("Account for " + name + ":"); System.out.println(acct); System.out.print("\nDepositing 100 into account, balance is now "); acct.deposit(100); System.out.println(acct.getBalance()); System.out.print("\nWithdrawing $25, balance is now "); acct.withdraw(25); System.out.print("\nWithdrawing $25 with $2 fee, balance is now "); acct.withdraw(25,2); System.out.println("\nBye!"); }

15 편향된 동전 클래스 만들기 정해진 비율에 따라 앞면과 뒷면을 던져 주는 동전 클래스 BiasedCoin.java를 작성 해 보자. 교재의 소스리스트 5.4 coin클래스를 참고하여 아래의 내용을 추가한다. 0~1사이의 값을 갖는 double 타입 변수 bias를 만든다. 이 변수는 앞면이 나올 확률을 의미한다. 디폴트 구성자에서 flip() 메소드를 호출하기 전에, bias값을 0.5로 설정하도록 수정한다. bias값을 매개변수로 받아들이는 구성자를 추가한다. 랜덤하게 만들어낸 숫자가 bias값보다 작으면 앞면으로, 그렇지 않으면 뒷면으로 설정하도록 flip()메소드를 수정한다.

16 편향된 동전 클래스 만들기(cont.) 이제, 앞에서 만든 BiasedCoin 클래스를 사용하는 프로그램인 BiasedCoinFlip.java를 작성해 보자. 디폴트 구성자를 이용하여 공정한 동전을 하나 만들고, 매개변수를 받아들이는 구성자로 편향된 동전을 두 개 만든다. 편향된 동전의 bias값은 사용자로부터 받아들인다. 이 세 개의 동전을 100회 던지도록 loop을 만든다. 이때, 각각의 동전마다 앞면이 나온 횟수를 센다. Loop이 끝난 후에, 각 동전마다 앞면이 나온 횟수를 출력해 준다.


Download ppt "6장 객체-지향 설계 ②."

Similar presentations


Ads by Google