티스토리 뷰

테스트

테스트 주도개발_3

Hilu 2023. 2. 12. 11:54

임시 저장 했던게... 다 날아 갔다 ㅠ.ㅜ...

 

다시 요약 하면

 

4장 에서는 객체 변수에 직접 접근을 위해 변수를 private 하게 변경 하였고,

 

5장 에서는 Account(계좌)를 새롭게 만들었다, 현재 요구 사항은 아래와 같다.

 

요구사항

카드 수수료 (20%)
카드번호, 유효기간, 결제 금액 값 필요
card 부작용?
+ 수수료비율 필드 추가
+ 수수료금액 필드 추가
+ getChargeAmt 추가
equals()

hashCode()
chageAmt private 하게 만들기
계좌 수수료 (30%)
카드, 계좌 중복
공용 equals
공용 getChargeAmt

 


6장 돌아온 '모두를 위한 평등'

 

5장에 계좌를 만들면서 카드를 복붙하였기 때문에 (빠른 테스트 성공을 보기 위함이다...!) 우리는 엄청난 중복 코드를 가지고 있다.

 

여기서 우리는 equals 를 공용으로 만들어 보도록 하자.

 

요구사항

카드 수수료 (20%)
카드번호, 유효기간, 결제 금액 값 필요
card 부작용?
+ 수수료비율 필드 추가
+ 수수료금액 필드 추가
+ getChargeAmt 추가
equals()

hashCode()
chageAmt private 하게 만들기
계좌 수수료 (30%)
카드, 계좌 중복
공용 equals
공용 getChargeAmt

 

이를 위해 우리는 계좌, 카드에 결제(PAYMENT) 이라는 공통 상위클레스를 만들 것이다.

 

우선, Card, Account 에 Payment 를 상속해 보자.

 

테스트를 한번 돌려 볼까?

 

아직까지는 이슈가 없이 잘 돌아 간다.

 

그렇다면 이제 Card, Account 에 공통으로 가지고 있는 변수들을 Payment 로 이동하자.

 

private 로 선언 했던 변수들은 상속 받은 class 에서 사용 가능 하도록, Protected 로 변경해 준다.

 

public class Payment {

	protected double chargeRate = 0;
	protected int chargeAmt = 0;

}

 

여기서 한번더 테스트를 돌려 보자~!

 

역시 초록 막대가 보인다~! 더 자신감을 가지고! 이제는 equals 함수를 Payment 로 리펙토링 하자.

 

package com.example.demo;

public class Payment {

	protected double chargeRate = 0;
	protected int chargeAmt = 0;

	public boolean equals(Object object) {
		Payment card = (Payment) object;

		if (this.chargeAmt != card.chargeAmt) {
			return false;
		}

		if (this.chargeRate != card.chargeRate) {
			return false;
		}

		return true;
	}
}

 

테스트를 실행하면 all pass 그런데 equals 에 변수가 거슬린다. 변경하자 (card => payment)

 

package com.example.demo;

public class Payment {

	protected double chargeRate = 0;
	protected int chargeAmt = 0;

	public boolean equals(Object object) {
		Payment payment = (Payment) object;

		if (this.chargeAmt != payment.chargeAmt) {
			return false;
		}

		if (this.chargeRate != payment.chargeRate) {
			return false;
		}

		return true;
	}
}

 

여전히 테스트 코드는 초록막대이다.

 

느낌점 :

 

이번 장에서는 TDD 를 통해 캡슐화, 상속 리팩토링을 진행 하였다. 딱히 크게 느낌 점은 없지만, 중복코드 리팩토링에 대한 경각심을 다시 느끼게 되었다.


 

참고 : 테스트 주도 개발(켄트백)

'테스트' 카테고리의 다른 글

테스트 주도 개발_5  (0) 2023.02.12
테스트 주도 개발_4  (0) 2023.02.12
테스트 주도개발_2  (0) 2023.02.11
테스트 주도 개발_1  (0) 2023.02.05
TDD 훈련을 위한 주제 정하기  (0) 2023.02.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함