6장 객체-지향 설계 ①.

Slides:



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

6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ①.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
최윤정 Java 프로그래밍 클래스 상속 최윤정
7장 배열 ②.
컴퓨터 프로그래밍 실습 #7 제 4 장 GUI 클래스 작성.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
10장 예외 Lab 10-1.
제 4 장 클래스 작성 Lab 4- 2.
8장 상속 ①.
7장 배열 ②.
Power Java 제10장 배열.
6장 객체-지향 설계 ②.
Lesson 5. 레퍼런스 데이터형.
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ②.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
5장. 참조 타입.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
제 4 장 클래스 작성 4-1 LAB.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
6장 객체-지향 설계 ①.
10장. 예외처리.
11장. 1차원 배열.
Choi, Namseok Java 기초 (객체와 클래스) Choi, Namseok
13. 연산자 오버로딩.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
6장 객체-지향 설계 ①.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Chapter 08. 함수.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
JA A V W. 06.
Fucntion 요약.
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
윤 홍 란 4 장 클래스 작성 윤 홍 란
에어 PHP 입문.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
Flow Diagram IV While.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
JSP Programming with a Workbook
함수, 모듈.
Chapter 4 클래스 작성.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
프로그래밍 개론 Ⅰ 제 1장 . 서론 ②.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
SPL-Duino 블록 편집기 이용하기 전류센서 블록 만들기 SPL-Duino 블록 편집기를 실행합니다.
BoardGame 보드게임 따라가기.
Presentation transcript:

6장 객체-지향 설계 ①

목차 매개변수 전달 사람 바꾸기 정적 변수와 메소드 은행 계좌 열고 닫기 은행 거래 횟수 세기 계좌 이체

사람 바꾸기 매개변수 전달을 연습해 보기 위해서, 사람을 바꾸는 프로그램인, ChangingPeople.java, Person.java 를 수정해 보자. 교재의 그림 6.5와 같이 프로그램의 실행과정을 추적해 보자. 실제로 프로그램을 실행시켜 그 결과를 확인해 보자. changePeople() 메소드가 원하는대로 잘 동작하도록 수정해 보자. (주석 참고)

사람 바꾸기 ( ChangingPeople.java ) // ********************************************************************** // ChangingPeople.java // // 매개변수 전달 실습 - Person 객체들을 변경하는 메소드를 포함하고 있다. public class ChangingPeople { // --------------------------------------------------------- // 두개의 Person 객체, 하나의 정수, 하나의 문자열의 값을 설정하고, // Person 객체들을 변경하는 메소드에 이 정보들을 보낸다. public static void main (String[] args) Person person1 = new Person ("Sally", 13); Person person2 = new Person ("Sam", 15); int age = 21; String name = "Jill"; System.out.println ("\nParameter Passing... Original values..."); System.out.println ("person1: " + person1); System.out.println ("person2: " + person2); System.out.println ("age: " + age + "\tname: " + name + "\n"); changePeople (person1, person2, age, name); System.out.println ("\nValues after calling changePeople..."); }

사람 바꾸기 ( ChangingPeople.java ) // ------------------------------------------------------------------- // 첫번째 실 매개변수를 "Jack - 나이 101"로 바꾸고, // 두번째 실 매개변수를 세번째와 네번째 매개변수에서 주어진 이름과 // 나이를 가지는 사람으로 바꾼다. public static void changePeople (Person p1, Person p2, int age, String name) { System.out.println ("\nInside changePeople... Original parameters..."); System.out.println ("person1: " + p1); System.out.println ("person2: " + p2); System.out.println ("age: " + age + "\tname: " + name + "\n"); // 정보 변경하기 Person p3 = new Person (name, age); p2 = p3; name = "Jack"; age = 101; p1.changeName (name); p1.changeAge (age); // 변경 정보 출력하기 System.out.println ("\nInside changePeople... Changed values..."); }

사람 바꾸기 ( Person.java ) // **************************************************************** // Person.java // // 사람을 표현하는 간단한 클래스 // *************************************************************** public class Person { private String name; private int age; // ------------------------------------------------------------ // 주어진 이름과 나이로 Person 객체를 설정한다. public Person (String name, int age) this.name = name; this.age = age; } // 사람의 이름을 매개변수 newName의 값으로 바꾼다. public void changeName(String newName) name = newName;

사람 바꾸기 ( Person.java ) // ----------------------------------------------------------- // 사람의 나이를 매개변수 newAge의 값으로 바꾼다. public void changeAge (int newAge) { age = newAge; } // 사람의 이름과 나이를 문자열로 반환한다. public String toString() return name + " - Age " + age;

은행 계좌 열고 닫기 아래와 같이 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를 수정해 보자. 입금 횟수, 총 입금량, 출금 횟수, 총 출금량을 저장할 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를 수정해 보자. 아래와 같은 계좌 이체 메소드를 작성한다. 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;