소프트웨어시스템설계 2023-03-22 수업정리

Flow

Refactoring Example


Refactored UML

step3

Step 1

Step 2

public void setPriceCode(int arg) {
	switch(arg) {
		case REGULAR: _price = new RegularPrice(); break;
		case CHILDREN: _price = new ChildrenPrice(); break;
		case NEW_RELEASE: _price = new NewReleasePrice(); break;
		default: throw new illegalArgumentException("Incorrect Price Code");	
	}
}

Step 3

More Refactoring Techniques


본 절에서는 리펙토링 실습에서 학습한 리펙토링 기법 이외에 추가적인 리펙토링 기법에 대해서 다룬다.

Introduce Assertion

double getExpenseLimit() {
	// should have either expense limit or a primary project
	return(_expenseLimit != NULL_EXPENSE) ?
			_expenseLimit:
			_primaryProject.fetMemberExpenseLimit();
}
double getExpenseLimit() {
	Assert.isTrue (_expenseLimit != NULL_EXPENSE ||
									_primaryProject != null);
	return(_expenseLimit != NULL_EXPENSE) ?
			_expenseLimit:
			_primaryProject.fetMemberExpenseLimit();
}

Rename Method

Encapsulate Downcast

Replace Error Code with Exception

Introduce Explaining Variable

Encapsulate Field

Self Encapsulate Field

Encapsulate Collection

Person kent = new Person();
Set s = new HashSet();
s.add(new Course("Smalltalk Programming", false));
s.add(new Course("Appreciating Single Malts", true));
kent.initializeCourses(s);
Person kent = new Person();
kent.addCourse(new Course("Smalltalk Programming", false));
kent.addCourse(new Course("Appreciating Single Malts", true));

Seperate Query from Modifier