6장 객체-지향 설계 ①.

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

5 장 조건과 반복 ②. Contents Counting and Looping [while 문 사용 ] Powers of 2 [while 문 사용 ] More Guessing [do 문 사용 ] Election Day [do 문 사용 ] Finding Maximum &
강원대학교 자바프로그래밍 제 4 주 클래스 설계 2 자바프로그래밍 1. 객체 자신에게 메소드 호출하기 vs 다른 객체에게 메소드 호출하기 강원대학교자바프로그래밍 2.
명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
제 7주 2015년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
Recursion SANGJI University KO Kwangman
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
7장 배열 ②.
어서와 Java는 처음이지! 제4장 배열.
Java Seminar 6.
Java Presentation 중간 시험2 풀이
제6장 제어(Control) 6.1 구조적 프로그래밍(Structured Programming)
6장 객체-지향 설계 ①.
10장 예외 Lab 10-1.
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
[INA470] Java Programming Youn-Hee Han
명품 JAVA Programming 제 7 장 제네릭과 컬렉션.
명품 JAVA Essential.
제7장 제어구조 I – 식과 문장.
[ 단원 08 ] 예외처리와 스레드.
명품 JAVA Essential.
명품 JAVA Programming 제 4 장 클래스와 객체.
Power Java 제4장 자바 프로그래밍 기초.
7장 배열 ②.
Power Java 제10장 배열.
자바 5.0 프로그래밍.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
Power Java 제15장 예외 처리 (Exception Handling).
6장 객체-지향 설계 ②.
명품 JAVA Essential.
명품 Java Programming.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
5장 조건과 반복 ①.
인터페이스(Interfaces) 강원대학교.
This, static, final 지정 예약어 자바 4대 중첩 클래스
주소록 프로그램.
7장 배열 ①.
제 4 장 클래스 작성 4-1 LAB.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
제 4주 – 클래스 설계 제 4주 목표 클래스를 구현하는 법을 배운다. 변수 선언 메소드 구현 구성자 객체지향프로그래밍
6장 객체-지향 설계 ①.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
12 검색.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
5장 조건과 반복 ②.
제2장 데이터 및 수식.
어서와 Java는 처음이지! 제4장 배열 IT응용시스템공학과 김형진 교수.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
JA A V W. 04.
자바 5.0 프로그래밍.
5장 조건과 반복 ①.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
C# 10장. 참조형.
Chapter 4 클래스 작성.
Java 5장. 객체지향 개념 public class SumTest {
자바 가상 머신 프로그래밍 Chapter 3. 메소드 작성하기 Pslab 오민경.
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

6장 객체-지향 설계 ①

은행 거래 횟수 세기 입금이나 출금의 횟수를 셀 수 있도록 Account.java를 수정해 보자. 입금 횟수, 총 입금량, 출금 횟수, 총 출금량을 저장할 4개의 private static 변수를 선언한다. 이 4개의 값들을 리턴하는 4개의 메소드를 작성한다. ex. public static int getNumDeposits() 이 4개의 변수들의 값을 적절히 업데이트 하도록 입금과 출금 메소드를 수정한다. ProcessTransactions.java는 두 개의 계좌를 생성하고, 이에 대해 입금과 출금 거래를 반복 수행한다. 총 거래 횟수와 거래량을 출력하도록 이 프로그램을 완성하고, 실행시켜 그 결과를 확인해 보자.

은행 거래 횟수 세기 (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;

은행 거래 횟수 세기 (ProcessTransactions.java) //******************************************************* // ProcessTransactions.java // 하루 동안에 두개의 은행 계좌에서 입금과 출력을 처리하는 클래스 import java.util.Scanner; public class ProcessTransactions { public static void main(String[] args){ Account acct1, acct2; // 두개의 계좌 String keepGoing = "y"; // 거래를 계속할 것인지의 여부 String action; // 입금이나 출금 double amount; // 입금이나 출금을 할 금액 long acctNumber; // 거래할 계좌 Scanner scan = new Scanner(System.in) // 두개의 계좌 생성 acct1 = new Account(1000, "Sue", 123); acct2 = new Account(1000, "Joe", 456); System.out.println("The following accounts are available:\n"); System.out.println(acct1); System.out.println(); System.out.println(acct2); while (keepGoing.equals("y") || keepGoing.equals("Y")) // 거래할 계좌번호와, 무엇을 할 것인지, 얼마를 할 것인지에 대한 정보를 얻어온다. System.out.print("\nEnter the number of the account you would like to access: "); acctNumber = scan.nextLong(); System.out.print("Would you like to make a deposit (D) or withdrawal (W)? "); action = scan.next(); System.out.print("Enter the amount: "); amount = scan.nextDouble();

은행 거래 횟수 세기 (ProcessTransactions.java) if (amount > 0) if (acctNumber == acct1.getAcctNumber()) if (action.equals("w") || action.equals("W")) acct1.withdraw(amount); else if (action.equals("d") || action.equals("D")) acct1.deposit(amount); else System.out.println("Sorry, invalid action."); else if (acctNumber == acct2.getAcctNumber()) System.out.println("Sorry, invalid account number."); System.out.println("Sorry, amount must be > 0."); System.out.print("\nMore transactions? (y/n)"); keepGoing = scan.next(); } // 입금 횟수를 출력한다. // 출금 횟수를 출력한다. // 총 입금액을 출력한다. // 총 출금액을 출력한다.

은행 계좌 열고 닫기 아래와 같이 Account.java를 수정해 보자. 계좌의 총 개수를 관리해 보자. 계좌의 총 개수를 저장하기 위한 정수형 변수 numAccounts를 private static 타입으로 생성한다. 계좌를 생성할 때마다 이 변수의 값을 증가 시키도록, 구성자에 해당 코드를 추가한다. 계좌의 총 개수를 리턴하는 static 메소드 getNumAccounts() 를 생성한다. 계좌를 닫는 close() 메소드를 작성해 보자. 계좌가 닫혔다는 것을 나타내기 위해, 이름을 “CLOSED”로, 잔액을 0으로 설정한다. 계좌가 하나 닫혔으므로, 계좌의 총 개수를 하나 줄인다.

은행 계좌 열고 닫기 (cont.) 두 계좌를 하나로 합치는 consolidate() 메소드를 작성해 보자. 두 개의 계좌를 매개변수로 받아, 이를 합친 하나의 계좌를 리턴한다. 이때, 두 계좌의 소유주가 같아야 합칠 수 있으며, 두 계좌의 계좌번호가 같을 경우에는 합칠 수 없다. 만약, 계좌를 합칠 수 없다면 null을 리턴하고, 적절한 메시지를 출력한다. 두 계좌를 합칠 새로운 계좌를 생성하여, 두 계좌의 잔액을 합하여 잔액으로 설정하고, 소유주의 이름은 그대로 설정하며, 계좌번호는 새로 생성한다. 그리고 기존의 두 계좌는 닫는다. 수정한 Account.java를 테스트하는 프로그램을 작성해 보자. 사용자로부터 세 명의 소유주의 이름을 읽어 들여, 잔액을 100으로 해서 계좌를 생성한다. 계좌들의 정보를 출력한다. 첫 번째 계좌를 닫고, 두 번째와 세 번째 계좌를 하나로 합치도록 시도한다. (합쳐질 수도 있고, 못 합쳐질 수도 있을 것이다.) 다시 계좌들의 정보를 출력한다.

은행 계좌 열고 닫기 (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;

계좌 이체 계좌 이체를 수행할 수 있도록 Account.java를 수정해 보자. 아래와 같은 계좌 이체 메소드를 작성한다. public void transfer(Account acct, double amount) 계좌 이체를 테스트하는 TransferTest.java를 작성한다. 두 개의 계좌를 만든다. 아래와 같은 일을 반복하는 loop을 작성한다. “첫 번째 계좌에서 두 번째 계좌로, 두 번째 계좌에서 첫 번째 계좌로, 종료” 중 하나를 선택하도록 메시지를 출력한다. 이체를 선택하면, 이체 금액을 받아들이고, 이체를 실행 후, 그 결과를 출력한다. 종료를 선택하면 loop을 빠져 나오고, 계좌들의 현재 정보를 출력한다. static 계좌 이체 메소드를 중복 정의한다. public static void transfer(Account acct1, Account acct2, double amount) static 계좌 이체 메소드를 테스트 하도록 TransferTest.java를 수정한다.

계좌 이체 (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;