6장 객체-지향 설계 ②.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
5 장 조건과 반복 ②. Contents Counting and Looping [while 문 사용 ] Powers of 2 [while 문 사용 ] More Guessing [do 문 사용 ] Election Day [do 문 사용 ] Finding Maximum &
객체 지향 디자인 Object-Oriented Design
어서와 Java는 처음이지! 제3장선택과 반복.
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ①.
10. 예외 처리.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Power Java 제8장 클래스와 객체 I.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
최윤정 Java 프로그래밍 클래스 상속 최윤정
7장 배열 ②.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
6장 객체-지향 설계 ①.
10장 예외 Lab 10-1.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
JAVA 언어로 배우는 디자인 패턴 입문 chap. 1-2.
8장 상속 ①.
7장 배열 ②.
Power Java 제10장 배열.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
[Homework #3] 오류 찾기 문제 BankAccount 문제 MyMetric 문제
Lesson 6. 형변환.
명품 Java Programming.
Java practice If Syntax Kim Jinsik... destiny738.tistory.com.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
5장 조건과 반복 ①.
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
제 4 장 클래스 작성 4-1 LAB.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
6장 객체-지향 설계 ①.
10장. 예외처리.
자바 5.0 프로그래밍.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
5장 조건과 반복 ②.
제2장 데이터 및 수식.
인터넷응용프로그래밍 JavaScript(Intro).
6장 객체-지향 설계 ①.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
보고서 (due 5/8) 다음과 같은 방식으로 문제를 해결하시오. 문제 분석 알고리즘 작성 프로그램 작성 테스트 및 검증
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
Power Java 제11장 상속.
5장 조건과 반복 ①.
JA A V W. 06.
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
2nd day Indexing and Slicing
윤 홍 란 4 장 클래스 작성 윤 홍 란
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
함수, 모듈.
Chapter 4 클래스 작성.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
프로그래밍 개론 Ⅰ 제 1장 . 서론 ②.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
Presentation transcript:

6장 객체-지향 설계 ②

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

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

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

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

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;

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;

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

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

유연한 계좌 클래스 만들기 입금, 출금 등의 일을 할 수 있는 은행 계좌 프로그램인 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)를 매개변수로 받고, 이 수수료도 잔액에서 제하도록 만들어 보자.

유연한 계좌 클래스 만들기(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");

유연한 계좌 클래스 만들기(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;

유연한 계좌 클래스 만들기 (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);

유연한 계좌 클래스 만들기 (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!"); }

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

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