rentals = _rentals.iterator();
45 | String result = "" + getName() + "고객님의 대여 기록
\n";
46 | while(rentals.hasNext()) {
47 | Rental each = (Rental) rentals.next();
48 |
49 | //모든 대여 비디오 정보와 대여로를 출
50 | result += each.getMovie().getTitle() + "\t" + String.valueOf(each.getCharge()) + "
\n";
51 | }
52 | //footer
53 | result += "
누적 대여료 : " + String.valueOf(getTotalCharge()) + "
\n";
54 | result += "적립 포인트 : " + String.valueOf(getTotalFrequentRenterPoints()) + "
rentals = _rentals.iterator();
62 |
63 | while (rentals.hasNext()) {
64 | Rental each = (Rental) rentals.next();
65 | result += each.getCharge();
66 | }
67 | return result;
68 | }
69 |
70 | private int getTotalFrequentRenterPoints() {
71 | int result = 0;
72 |
73 | Iterator rentals = _rentals.iterator();
74 |
75 | while (rentals.hasNext()) {
76 | Rental each = (Rental) rentals.next();
77 | result += each.getFrequentRenterPoints();
78 | }
79 | return result;
80 | }
81 |
82 | }
83 |
--------------------------------------------------------------------------------
/src/com/kws/one/after/ExamTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.one.after;
2 |
3 | public class ExamTest {
4 | public static void main(String [] args) {
5 |
6 | Customer customer = new Customer("돈일");
7 |
8 | Movie movie1 = new Movie("시빌워", Movie.NEW_RELEASE);
9 | Movie movie2 = new Movie("탐정 홍길동",Movie.CHILDRENS);
10 |
11 | Rental rental = new Rental(movie1, 3);
12 | Rental rental2 = new Rental(movie2, 4);
13 |
14 | customer.addRental(rental);
15 | customer.addRental(rental2);
16 |
17 | System.out.println(customer.statement());
18 | System.out.println(customer.htmlStatement());
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/com/kws/one/after/Movie.java:
--------------------------------------------------------------------------------
1 | package com.kws.one.after;
2 |
3 | public class Movie {
4 | public static final int CHILDRENS = 2;
5 | public static final int REGULAR = 0;
6 | public static final int NEW_RELEASE = 1;
7 | private String _title;
8 | private Price _price;
9 |
10 | public Movie(String title, int priceCode){
11 | _title = title;
12 | setPriceCode(priceCode);
13 | }
14 |
15 | public int getPriceCode() {
16 | return _price.getPriceCode();
17 | }
18 |
19 | public void setPriceCode(int arg) {
20 | switch(arg) {
21 | case REGULAR:
22 | _price = new RegularPrice();
23 | break;
24 | case CHILDRENS:
25 | _price = new ChildrensPrice();
26 | break;
27 | case NEW_RELEASE:
28 | _price = new NewReleasePrice();
29 | break;
30 | }
31 | }
32 |
33 | public String getTitle() {
34 | return _title;
35 | }
36 |
37 | //별도의 메서드로 작성
38 | public double getCharge(int daysRented) {
39 | return _price.getCharge(daysRented);
40 | }
41 |
42 | public int getFrequentRenterPoints(int daysRented) {
43 |
44 | if((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1)
45 | return 2;
46 | else {
47 | return 1;
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/com/kws/one/after/Price.java:
--------------------------------------------------------------------------------
1 | package com.kws.one.after;
2 |
3 | public abstract class Price {
4 | abstract int getPriceCode();
5 | abstract double getCharge(int daysRented);
6 |
7 | public int getFrequentRenterPoints(int daysRented) {
8 | return 1;
9 | }
10 | }
11 |
12 |
13 | class ChildrensPrice extends Price {
14 |
15 | @Override
16 | double getCharge(int daysRented) {
17 | double result = 1.5;
18 | if(daysRented > 3)
19 | result += (daysRented - 3) * 1.5;
20 | return result;
21 | }
22 |
23 | @Override
24 | int getPriceCode() {
25 | return Movie.CHILDRENS;
26 | }
27 |
28 | }
29 |
30 | class NewReleasePrice extends Price {
31 |
32 | @Override
33 | public int getFrequentRenterPoints(int daysRented){
34 | return (daysRented >1) ? 2:1;
35 | }
36 |
37 | @Override
38 | double getCharge(int daysRented) {
39 | return daysRented *3;
40 | }
41 |
42 | @Override
43 | int getPriceCode() {
44 | return Movie.NEW_RELEASE;
45 | }
46 |
47 | }
48 |
49 | class RegularPrice extends Price {
50 |
51 | @Override
52 | double getCharge(int daysRented) {
53 | double result = 2;
54 | if(daysRented > 2)
55 | result += (daysRented - 2) * 1.5;
56 | return result;
57 | }
58 |
59 | @Override
60 | int getPriceCode() {
61 | return Movie.REGULAR;
62 | }
63 |
64 | }
65 |
--------------------------------------------------------------------------------
/src/com/kws/one/after/Rental.java:
--------------------------------------------------------------------------------
1 | package com.kws.one.after;
2 |
3 | public class Rental {
4 | private Movie _movie;
5 | private int _daysRented;
6 |
7 | public Rental(Movie movie, int daysRented) {
8 | _movie = movie;
9 | _daysRented = daysRented;
10 | }
11 |
12 | public int getDaysRented() {
13 | return _daysRented;
14 | }
15 |
16 | public Movie getMovie() {
17 | return _movie;
18 | }
19 |
20 | //별도의 메서드로 작성
21 | public double getCharge() {
22 | return _movie.getCharge(_daysRented);
23 | }
24 |
25 | public int getFrequentRenterPoints() {
26 | return _movie.getFrequentRenterPoints(_daysRented);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/com/kws/one/before/Customer.java:
--------------------------------------------------------------------------------
1 | package com.kws.one.before;
2 |
3 | import org.junit.Test;
4 |
5 | import java.util.Enumeration;
6 | import java.util.Vector;
7 |
8 | public class Customer {
9 | private String _name;
10 | private Vector _rentals = new Vector();
11 |
12 | public Customer(String name) {
13 | _name = name;
14 | }
15 |
16 | public void addRental(Rental arg) {
17 | _rentals.addElement(arg);
18 | }
19 |
20 | public String getName() {
21 | return _name;
22 | }
23 |
24 | //리팩토링이 필요한 핵심 메서드
25 | //너무 많은 기능을 가지고 있다
26 | public String statement() {
27 | double totalAmount = 0;
28 | int frequentRenterPoints = 0;
29 | Enumeration rentals = _rentals.elements();
30 | String result = getName() + " 고객님의 대여 기록 \n";
31 |
32 | while(rentals.hasMoreElements()) {
33 | double thisAmount = 0;
34 | Rental each = (Rental) rentals.nextElement();
35 |
36 | //비디오 종류별 대여로 계산
37 | thisAmount = each.amountFor();
38 |
39 | //적립 포인트 1포인트 증
40 | frequentRenterPoints ++;
41 |
42 | //최신물을 이틀 이상 대여하면 보너스 포인트 지급
43 | if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) && each.getDaysRented() > 1)
44 | frequentRenterPoints++;
45 |
46 | //대여하는 비디오 정보와 대여로를 출
47 | result += "\t" + each.getMovie().getTitle() + "\t" + String.valueOf(thisAmount) + "\n";
48 |
49 | //현재까지 누적된 총 대여료
50 | totalAmount += thisAmount;
51 | }
52 |
53 | //footer
54 | result += "누적 대여료 : " + String.valueOf(totalAmount) + "\n";
55 | result += "적립 포인트 : " + String.valueOf(frequentRenterPoints);
56 | return result;
57 | }
58 |
59 | }
60 |
--------------------------------------------------------------------------------
/src/com/kws/one/before/ExamTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.one.before;
2 |
3 | public class ExamTest {
4 | public static void main(String [] args) {
5 |
6 | Customer customer = new Customer("돈일");
7 |
8 | Movie movie1 = new Movie("시빌워", Movie.NEW_RELEASE);
9 | Movie movie2 = new Movie("탐정 홍길동",Movie.CHILDRENS);
10 |
11 | Rental rental = new Rental(movie1, 3);
12 | Rental rental2 = new Rental(movie2, 4);
13 |
14 | customer.addRental(rental);
15 | customer.addRental(rental2);
16 |
17 | System.out.println(customer.statement());
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/com/kws/one/before/Movie.java:
--------------------------------------------------------------------------------
1 | package com.kws.one.before;
2 |
3 | public class Movie {
4 | public static final int CHILDRENS = 2;
5 | public static final int REGULAR = 0;
6 | public static final int NEW_RELEASE = 1;
7 | private String _title;
8 | private int _priceCode;
9 |
10 | public Movie(String title, int priceCode){
11 | _title = title;
12 | _priceCode = priceCode;
13 | }
14 |
15 | public int getPriceCode() {
16 | return _priceCode;
17 | }
18 |
19 | public void setPriceCode(int arg) {
20 | _priceCode = arg;
21 | }
22 |
23 | public String getTitle() {
24 | return _title;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/com/kws/one/before/Rental.java:
--------------------------------------------------------------------------------
1 | package com.kws.one.before;
2 |
3 | public class Rental {
4 | private Movie _movie;
5 | private int _daysRented;
6 |
7 | public Rental(Movie movie, int daysRented) {
8 | _movie = movie;
9 | _daysRented = daysRented;
10 | }
11 |
12 | public int getDaysRented() {
13 | return _daysRented;
14 | }
15 |
16 | public Movie getMovie() {
17 | return _movie;
18 | }
19 |
20 | public double amountFor() {
21 | double thisAmount = 0;
22 | switch (getMovie().getPriceCode()) {
23 | case Movie.REGULAR:
24 | thisAmount += 2;
25 | if(getDaysRented() > 2)
26 | thisAmount += (getDaysRented() - 2) * 1.5;
27 | break;
28 | case Movie.NEW_RELEASE:
29 | thisAmount += getDaysRented() * 3;
30 | break;
31 | case Movie.CHILDRENS:
32 | thisAmount += 1.5;
33 | if(getDaysRented() > 3)
34 | thisAmount += (getDaysRented() - 3) * 1.5;
35 | break;
36 | }
37 | return thisAmount;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/extractClass/Person.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.extractClass;
2 |
3 | public class Person {
4 | private String _name;
5 | private TelephoneNumber _officeTelephone = new TelephoneNumber();
6 |
7 | public Person(String name, String officeAreaCode, String officeNumber) {
8 | _name = name;
9 | _officeTelephone.setAreaCode(officeAreaCode);
10 | _officeTelephone.setNumber(officeNumber);
11 | }
12 |
13 | public String getName() {
14 | return _name;
15 | }
16 |
17 | public String getTelephoneNumber() {
18 | return _officeTelephone.getTelephoneNumber();
19 | }
20 |
21 | TelephoneNumber getOfficeTelephone() {
22 | return _officeTelephone;
23 | }
24 |
25 | class TelephoneNumber {
26 | private String _areaCode;
27 | private String _number;
28 |
29 | public String getTelephoneNumber() {
30 | return ("(" + _areaCode + ")" + _number);
31 | }
32 |
33 | String getAreaCode() {
34 | return _areaCode;
35 | }
36 |
37 | void setAreaCode(String areaCode) {
38 | _areaCode = areaCode;
39 | }
40 |
41 | String getNumber() {
42 | return _number;
43 | }
44 |
45 | void setNumber(String number) {
46 | _number = number;
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/hideDelegate/Department.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.hideDelegate;
2 |
3 | class Department {
4 | private String _chargeCode;
5 | private Person _manager;
6 |
7 | public Department(Person manager) {
8 | _manager = manager;
9 | }
10 |
11 | public Person getManager() {
12 | return _manager;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/hideDelegate/Person.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.hideDelegate;
2 |
3 | public class Person {
4 | String _name;
5 | Department _department;
6 |
7 | public Person(String name) {
8 | _name = name;
9 | _department = null;
10 | }
11 |
12 | public Person(String name, Person manager) {
13 | _name = name;
14 | _department = new Department(manager);
15 | }
16 |
17 | public String getName() {
18 | return _name;
19 | }
20 |
21 | public Person getManager() {
22 | return _department.getManager();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/inlineClass/Client.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.inlineClass;
2 |
3 | public class Client {
4 | public static void main() {
5 | Person martin = new Person();
6 | martin.setAreaCode("781");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/inlineClass/Person.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.inlineClass;
2 |
3 | public class Person {
4 | private String _name;
5 | private TelephoneNumberOld _officeTelephone = new TelephoneNumberOld();
6 |
7 | public String getName() {
8 | return _name;
9 | }
10 |
11 | public String getTelephoneNumber() {
12 | return _officeTelephone.getTelephoneNumber();
13 | }
14 |
15 | // TelephoneNumberOld getOfficeTelephone() {
16 | // return _officeTelephone;
17 | // }
18 |
19 | String getAreaCode() {
20 | return _officeTelephone.getAreaCode();
21 | }
22 |
23 | void setAreaCode(String arg) {
24 | _officeTelephone.setAreaCode(arg);
25 | }
26 |
27 | String getNumber() {
28 | return _officeTelephone.getNumber();
29 | }
30 |
31 | void setNumber(String arg) {
32 | _officeTelephone.setNumber(arg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/inlineClass/TelephoneNumber.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.inlineClass;
2 |
3 | class TelephoneNumberOld {
4 |
5 | private String _areaCode;
6 | private String _number;
7 |
8 | public String getTelephoneNumber() {
9 | return ("(" + _areaCode + ")" + _number);
10 | }
11 |
12 | String getAreaCode() {
13 | return _areaCode;
14 | }
15 |
16 | void setAreaCode(String arg) {
17 | _areaCode = arg;
18 | }
19 |
20 | String getNumber() {
21 | return _number;
22 | }
23 |
24 | void setNumber(String arg) {
25 | _number = arg;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/introduceForeignMethod/StartDate.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.introduceForeignMethod;
2 |
3 | import java.util.Calendar;
4 | import java.util.Date;
5 |
6 | public class StartDate {
7 | public Calendar getNextStartDateByCalendar(Calendar previousEnd) {
8 | return getNextDay(previousEnd);
9 | }
10 |
11 | public Date getNextStartDateByDate(Date previousEnd) {
12 | return getNextDay(previousEnd);
13 | }
14 |
15 | private static Calendar getNextDay(Calendar arg) {
16 | Calendar newStart = (Calendar)arg.clone();
17 | newStart.add(Calendar.DAY_OF_MONTH, 1);
18 | return newStart;
19 | }
20 |
21 | private static Date getNextDay(Date arg) {
22 | Date newStart = new Date(arg.getYear(), arg.getMonth(), arg.getDate() + 1);
23 | return newStart;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/moveField/Account.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.moveField;
2 |
3 | public class Account {
4 | private AccountType _type;
5 |
6 | public Account(String owner) {
7 | _type = new AccountType(owner);
8 |
9 | if (owner.equals("홍길동")) {
10 | setInterestRate(0.3);
11 | } else {
12 | setInterestRate(4.5);
13 | }
14 | }
15 |
16 | public double interestForAmount_days(double amount, int days) {
17 | return getInterestRate() * amount * days / 365;
18 | }
19 |
20 | private void setInterestRate(double arg) {
21 | _type.setInterestRate(arg);
22 | }
23 |
24 | private double getInterestRate() {
25 | return _type.getInterestRate();
26 | }
27 | }
--------------------------------------------------------------------------------
/src/com/kws/seven/after/moveField/AccountType.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.moveField;
2 |
3 | public class AccountType {
4 | private String _owner;
5 | private double _interestRate;
6 |
7 | public AccountType(String owner) {
8 | _owner = owner;
9 | }
10 |
11 | public double getInterestRate() {
12 | return _interestRate;
13 | }
14 |
15 | public void setInterestRate(double interestRate) {
16 | _interestRate = interestRate;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/moveMethod/Account.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.moveMethod;
2 |
3 | public class Account {
4 | private AccountType _type;
5 | private int _daysOverdrawn;
6 |
7 | public Account(String owner) {
8 | _type = new AccountType(owner);
9 | }
10 |
11 | double overdraftCharge() {
12 | return _type.overdraftCharge(_daysOverdrawn);
13 | }
14 |
15 | double bankCharge() {
16 | double result = 4.5;
17 | if (_daysOverdrawn > 0) {
18 | result += _type.overdraftCharge(_daysOverdrawn);
19 | }
20 | return result;
21 | }
22 |
23 | public void setDayOverdrawn(int dayOverdrawn) {
24 | _daysOverdrawn = dayOverdrawn;
25 | }
26 |
27 | public int getDayOverdrawn() {
28 | return _daysOverdrawn;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/moveMethod/AccountType.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.moveMethod;
2 |
3 | public class AccountType {
4 | private String _owner;
5 |
6 | public AccountType(String owner) {
7 | _owner = owner;
8 | }
9 |
10 | double overdraftCharge(int daysOverdrawn) {
11 | if (isPremium()) {
12 | double result = 10;
13 | if (daysOverdrawn > 7) {
14 | result += (daysOverdrawn - 7) * 0.85;
15 | }
16 | return result;
17 | } else {
18 | return daysOverdrawn * 1.75;
19 | }
20 | }
21 |
22 | boolean isPremium() {
23 | switch (_owner) {
24 | case "홍길동":
25 | return true;
26 | default:
27 | return false;
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/removeMiddleMan/Department.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.removeMiddleMan;
2 |
3 | public class Department {
4 | private String _chargeCode;
5 | private Person _manager;
6 |
7 | public Department(Person manager) {
8 | _manager = manager;
9 | }
10 |
11 | public Person getManager() {
12 | return _manager;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/com/kws/seven/after/removeMiddleMan/Person.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.after.removeMiddleMan;
2 |
3 | public class Person {
4 | String _name;
5 | Department _department;
6 |
7 | public Person(String name) {
8 | _name = name;
9 | _department = null;
10 | }
11 |
12 | public Person(String name, Person manager) {
13 | _name = name;
14 | _department = new Department(manager);
15 | }
16 |
17 | public Department getDepartment() {
18 | return _department;
19 | }
20 |
21 | public void setDepartment(Department arg) {
22 | _department = arg;
23 | }
24 |
25 | public String getName() {
26 | return _name;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/extractClass/Person.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.extractClass;
2 |
3 | public class Person {
4 | private String _name;
5 | private String _officeAreaCode;
6 | private String _officeNumber;
7 |
8 | public Person(String name, String officeAreaCode, String officeNumber) {
9 | _name = name;
10 | _officeAreaCode = officeAreaCode;
11 | _officeNumber = officeNumber;
12 | }
13 |
14 | public String getName() {
15 | return _name;
16 | }
17 |
18 | public String getTelephoneNumber() {
19 | return ("(" + _officeAreaCode + ")" + _officeNumber);
20 | }
21 |
22 | String getOfficeAreaCode() {
23 | return _officeAreaCode;
24 | }
25 |
26 | void setOfficeAreaCode(String officeAreaCode) {
27 | _officeAreaCode = officeAreaCode;
28 | }
29 |
30 | String getOfficeNumber() {
31 | return _officeNumber;
32 | }
33 |
34 | void setOfficeNumber(String officeNumber) {
35 | _officeNumber = officeNumber;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/hideDelegate/Department.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.hideDelegate;
2 |
3 | public class Department {
4 | private String _chargeCode;
5 | private Person _manager;
6 |
7 | public Department(Person manager) {
8 | _manager = manager;
9 | }
10 |
11 | public Person getManager() {
12 | return _manager;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/hideDelegate/Person.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.hideDelegate;
2 |
3 | public class Person {
4 | String _name;
5 | Department _department;
6 |
7 | public Person(String name) {
8 | _name = name;
9 | _department = null;
10 | }
11 |
12 | public Person(String name, Person manager) {
13 | _name = name;
14 | _department = new Department(manager);
15 | }
16 |
17 | public Department getDepartment() {
18 | return _department;
19 | }
20 |
21 | public void setDepartment(Department arg) {
22 | _department = arg;
23 | }
24 |
25 | public String getName() {
26 | return _name;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/inlineClass/Client.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.inlineClass;
2 |
3 | public class Client {
4 | public static void main() {
5 | Person martin = new Person();
6 | martin.getOfficeTelephone().setAreaCode("781");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/inlineClass/Person.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.inlineClass;
2 |
3 | public class Person {
4 | private String _name;
5 | private TelephoneNumber _officeTelephone = new TelephoneNumber();
6 |
7 | public String getName() {
8 | return _name;
9 | }
10 |
11 | public String getTelephoneNumber() {
12 | return _officeTelephone.getTelephoneNumber();
13 | }
14 |
15 | TelephoneNumber getOfficeTelephone() {
16 | return _officeTelephone;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/inlineClass/TelephoneNumber.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.inlineClass;
2 |
3 | public class TelephoneNumber {
4 |
5 | private String _areaCode;
6 | private String _number;
7 |
8 | public String getTelephoneNumber() {
9 | return ("(" + _areaCode + ")" + _number);
10 | }
11 |
12 | String getAreaCode() {
13 | return _areaCode;
14 | }
15 |
16 | void setAreaCode(String arg) {
17 | _areaCode = arg;
18 | }
19 |
20 | String getNumber() {
21 | return _number;
22 | }
23 |
24 | void setNumber(String arg) {
25 | _number = arg;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/introduceForeignMethod/StartDate.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.introduceForeignMethod;
2 |
3 | import java.util.Calendar;
4 | import java.util.Date;
5 |
6 | public class StartDate {
7 | public Calendar getNextStartDateByCalendar(Calendar previousEnd) {
8 | Calendar newStart = (Calendar)previousEnd.clone();
9 | newStart.add(Calendar.DAY_OF_MONTH, 1);
10 | return newStart;
11 | }
12 |
13 | public Date getNextStartDateByDate(Date previousEnd) {
14 | Date newStart = new Date(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1);
15 | return newStart;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/moveField/Account.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.moveField;
2 |
3 | public class Account {
4 | private AccountType _type;
5 | private double _interestRate;
6 |
7 | public Account(String owner) {
8 | _type = new AccountType(owner);
9 |
10 | if (owner.equals("홍길동")) {
11 | _interestRate = 0.3;
12 | } else {
13 | _interestRate = 0.45;
14 | }
15 | }
16 |
17 |
18 |
19 | public double interestForAmount_days(double amount, int days) {
20 | return _interestRate * amount * days / 365;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/moveField/AccountType.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.moveField;
2 |
3 | public class AccountType {
4 | private String _owner;
5 |
6 | public AccountType(String owner) {
7 | _owner = owner;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/moveMethod/Account.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.moveMethod;
2 |
3 | public class Account {
4 | private AccountType _type;
5 | private int _daysOverdrawn;
6 |
7 | public Account(String owner) {
8 | _type = new AccountType(owner);
9 | }
10 |
11 | double overdraftCharge() {
12 | if (_type.isPremium()) {
13 | double result = 10;
14 | if (_daysOverdrawn > 1) {
15 | result += (_daysOverdrawn - 7) * 0.85;
16 | }
17 | return result;
18 | } else {
19 | return _daysOverdrawn * 1.75;
20 | }
21 | }
22 |
23 | public double bankCharge() {
24 | double result = 4.5;
25 | if (_daysOverdrawn > 0) {
26 | result += overdraftCharge();
27 | }
28 | return result;
29 | }
30 |
31 | public void setDayOverdrawn(int dayOverdrawn) {
32 | _daysOverdrawn = dayOverdrawn;
33 | }
34 |
35 | public int getDayOverdrawn() {
36 | return _daysOverdrawn;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/moveMethod/AccountType.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.moveMethod;
2 |
3 | public class AccountType {
4 | private String _owner;
5 |
6 | public AccountType(String owner) {
7 | _owner = owner;
8 | }
9 |
10 | boolean isPremium() {
11 | switch (_owner) {
12 | case "홍길동":
13 | return true;
14 | default:
15 | return false;
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/src/com/kws/seven/before/removeMiddleMan/Department.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.removeMiddleMan;
2 |
3 | class Department {
4 | private String _chargeCode;
5 | private Person _manager;
6 |
7 | public Department(Person manager) {
8 | _manager = manager;
9 | }
10 |
11 | public Person getManager() {
12 | return _manager;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/com/kws/seven/before/removeMiddleMan/Person.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.before.removeMiddleMan;
2 |
3 | public class Person {
4 | String _name;
5 | Department _department;
6 |
7 | public Person(String name) {
8 | _name = name;
9 | _department = null;
10 | }
11 |
12 | public Person(String name, Person manager) {
13 | _name = name;
14 | _department = new Department(manager);
15 | }
16 |
17 | public String getName() {
18 | return _name;
19 | }
20 |
21 | public Person getManager() {
22 | return _department.getManager();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/com/kws/seven/test/extractClass/PsersonTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.test.extractClass;
2 |
3 |
4 | import com.kws.seven.before.extractClass.Person;
5 | import org.junit.Assert;
6 | import org.junit.Test;
7 |
8 | public class PsersonTest {
9 |
10 | @Test
11 | public void PersonCreationUnitTest() {
12 | // Arrange
13 | String officeTelephone = "(02)6233-0214";
14 | // Act
15 | Person person = new Person("홍길동", "02", "6233-0214");
16 |
17 | // Assert
18 | Assert.assertEquals(officeTelephone, person.getTelephoneNumber());
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/com/kws/seven/test/hideDelegate/AfterPersonTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.test.hideDelegate;
2 |
3 | import com.kws.seven.after.hideDelegate.Person;
4 | import org.junit.Assert;
5 | import org.junit.Test;
6 |
7 | public class AfterPersonTest {
8 | @Test
9 | public void getManagerTest() {
10 | Person honggildong = new Person("Hong,Gildong");
11 | Person john = new Person("John", honggildong);
12 |
13 | Person manager = john.getManager();
14 |
15 | Assert.assertEquals(honggildong.getName(), manager.getName());
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/com/kws/seven/test/hideDelegate/BeforePersonTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.test.hideDelegate;
2 |
3 | import com.kws.seven.before.hideDelegate.Person;
4 | import org.junit.Assert;
5 | import org.junit.Test;
6 |
7 | public class BeforePersonTest {
8 |
9 | @Test
10 | public void getManagerTest() {
11 | Person honggildong = new Person("Hong,Gildong");
12 | Person john = new Person("John", honggildong);
13 |
14 | Person manager = john.getDepartment().getManager();
15 |
16 | Assert.assertEquals(honggildong.getName(), manager.getName());
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/com/kws/seven/test/introduceForeignMethod/StartDateTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.test.introduceForeignMethod;
2 |
3 | import com.kws.seven.before.introduceForeignMethod.StartDate;
4 | import org.junit.Assert;
5 | import org.junit.Test;
6 |
7 | import java.util.Calendar;
8 | import java.util.Date;
9 |
10 | public class StartDateTest {
11 | @Test
12 | public void getNextStartDateByCalendarUnitTest() {
13 | // Arrange
14 | StartDate startDate = new StartDate();
15 |
16 | Calendar end1 = Calendar.getInstance();
17 | end1.set(Calendar.YEAR, 2015);
18 | end1.set(Calendar.MONTH, Calendar.FEBRUARY);
19 | end1.set(Calendar.DAY_OF_MONTH, 28);
20 |
21 | Calendar end2 = Calendar.getInstance();
22 | end2.set(Calendar.YEAR, 2016);
23 | end2.set(Calendar.MONTH, Calendar.FEBRUARY);
24 | end2.set(Calendar.DAY_OF_MONTH, 28);
25 |
26 | // Act
27 | Calendar start1 = startDate.getNextStartDateByCalendar(end1);
28 | Calendar start2 = startDate.getNextStartDateByCalendar(end2);
29 |
30 | // Assert
31 | Assert.assertEquals(1, start1.get(Calendar.DAY_OF_MONTH));
32 | Assert.assertEquals(29, start2.get(Calendar.DAY_OF_MONTH));
33 | }
34 |
35 | @Test
36 | public void getNextStartDateByDate() {
37 | // Arrange
38 | StartDate startDate = new StartDate();
39 |
40 | Date end1 = new Date(2015, Calendar.FEBRUARY, 28);
41 | Date end2 = new Date(2016, Calendar.FEBRUARY, 28);
42 |
43 | // Act
44 | Date start1 = startDate.getNextStartDateByDate(end1);
45 | Date start2 = startDate.getNextStartDateByDate(end2);
46 |
47 | // Assert
48 | Assert.assertEquals(1, start1.getDate());
49 | Assert.assertEquals(29, start2.getDate());
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/com/kws/seven/test/moveField/AccountTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.test.moveField;
2 |
3 | import com.kws.seven.before.moveField.Account;
4 | import org.junit.Assert;
5 | import org.junit.Test;
6 |
7 | public class AccountTest {
8 | @Test
9 | public void interestForAmount_daysUnitTest() throws Exception {
10 | // Arrange
11 | Account honggildong = new Account("홍길동");
12 | Account doolry = new Account("둘리");
13 | Account gogildong = new Account("고길동");
14 |
15 | double amount = 10000000.0;
16 | int days = 30;
17 |
18 | double premiumInterest = 0.3 * amount * days / 365;
19 | double normalInterest = 0.45 * amount * days / 365;
20 |
21 | // Act
22 | double hongInterest = honggildong.interestForAmount_days(amount, days);
23 | double doolInterest = doolry.interestForAmount_days(amount, days);
24 | double goInterest = gogildong.interestForAmount_days(amount, days);
25 |
26 | // Assert
27 | Assert.assertEquals(premiumInterest, hongInterest, 0.1);
28 | Assert.assertEquals(normalInterest, doolInterest, 0.1);
29 | Assert.assertEquals(normalInterest, goInterest, 0.1);
30 |
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/com/kws/seven/test/moveMethod/AccountTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.test.moveMethod;
2 |
3 | import com.kws.seven.before.moveMethod.Account;
4 | import org.junit.Assert;
5 | import org.junit.Test;
6 |
7 | public class AccountTest {
8 | @Test
9 | public void bankChargeUnitTest() throws Exception {
10 | // Arrange
11 | Account honggildong = new Account("홍길동");
12 | Account doolry = new Account("둘리");
13 | Account gogildong = new Account("고길동");
14 |
15 | double premiumCharge = 17.05;
16 | double normalCharge = 22.0;
17 |
18 | // Act
19 | honggildong.setDayOverdrawn(10);
20 | doolry.setDayOverdrawn(10);
21 | gogildong.setDayOverdrawn(10);
22 |
23 | double hongCharge = honggildong.bankCharge();
24 | double doolCharge = doolry.bankCharge();
25 | double goCharge = gogildong.bankCharge();
26 |
27 | // Assert
28 | Assert.assertEquals(premiumCharge, hongCharge, 0.01);
29 | Assert.assertEquals(normalCharge, doolCharge, 0.01);
30 | Assert.assertEquals(normalCharge, goCharge, 0.01);
31 | }
32 |
33 | }
--------------------------------------------------------------------------------
/src/com/kws/seven/test/removeMiddleMan/AfterPersonTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.test.removeMiddleMan;
2 |
3 | import com.kws.seven.after.removeMiddleMan.Person;
4 | import org.junit.Assert;
5 | import org.junit.Test;
6 |
7 | public class AfterPersonTest {
8 |
9 | @Test
10 | public void getManagerTest() {
11 | Person honggildong = new Person("Hong,Gildong");
12 | Person john = new Person("John", honggildong);
13 |
14 | Person manager = john.getDepartment().getManager();
15 |
16 | Assert.assertEquals(honggildong.getName(), manager.getName());
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/com/kws/seven/test/removeMiddleMan/BeforePersonTest.java:
--------------------------------------------------------------------------------
1 | package com.kws.seven.test.removeMiddleMan;
2 |
3 | import com.kws.seven.before.removeMiddleMan.Person;
4 | import org.junit.Assert;
5 | import org.junit.Test;
6 |
7 | public class BeforePersonTest {
8 | @Test
9 | public void getManagerTest() {
10 | Person honggildong = new Person("Hong,Gildong");
11 | Person john = new Person("John", honggildong);
12 |
13 | Person manager = john.getManager();
14 |
15 | Assert.assertEquals(honggildong.getName(), manager.getName());
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/com/kws/testFixture/data.txt:
--------------------------------------------------------------------------------
1 | Bradman 99.94 52 80 10 6996 334 29
2 | Pollock 60.97 23 41 4 2256 274 7
3 | Headly 60.83 22 40 4 2256 270* 10
4 | Sutcliffe 60.73 54 84 9 4555 194 16
--------------------------------------------------------------------------------
/src/com/kws/testFixture/empty.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KWSStudy/Refactoring/0c50dc148b2d4c4ac04030803430216a993056e3/src/com/kws/testFixture/empty.txt
--------------------------------------------------------------------------------