우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 1번
📋 문제 1번
https://github.com/woowacourse-precourse/javascript-onboarding/blob/main/docs/PROBLEM1.md
⚙️ 기능 목록
1. 예외처리
- 두 페이지가 나오지 않은 경우
- 오른쪽 페이지에서 왼쪽 페이지를 뺐을 때 1이 나오지 않는 경우
- 예외 처리에 해당되는 경우 -1 리턴
2. 점수 계산
- 페이지의 각 자릿수 더하기
- 페이지의 각 자릿수 곱하기
3. 점수 비교
- 포비가 더 크면 1 리턴
- 크롱이 더 크면 2 리턴
- 무승부 0 리턴
⬅️이전 풀이
😥 미흡했던 점
- let과 const를 적절하게 사용하지 않은점
- 불필요한 변수를 선언한 점 (ex. result)
- 함수의 배치
- 함수명 단어 3개 이상
📌 고려사항
- 클래스로 구현
- 메소드는 한 가지일만 해야하기에 plus와 multiply를 나눔.
- leftPage와 rightPage는 굳이 선언하지 않아도 되지만, 가독성을 위해 작성.
- let, const 적절히 사용
- 메소드명 단어 3개 이하
- 메소드는 사용 순서대로 위에서 부터 아래로 배치
📜 리팩터링
https://github.com/soohyun-dev/javascript-onboarding/blob/soohyun-dev/src/problem1.js
class Exception {
constructor(pobi, crong) {
this.pobi = pobi;
this.crong = crong;
}
check() {
return this.isException(this.pobi) || this.isException(this.crong);
}
isException(target) {
return this.isAllowLength(target) || this.isAllowPage(target);
}
isAllowLength(target) {
return target.length !== 2;
}
isAllowPage(target) {
const [leftPage, rightPage] = target;
return rightPage - leftPage !== 1;
}
}
class Calculator {
constructor(pobi, crong) {
this.pobi = pobi;
this.crong = crong;
}
compareScore() {
const pobiScore = this.getScore(this.pobi);
const crongScore = this.getScore(this.crong);
if (pobiScore > crongScore) return 1;
if (pobiScore < crongScore) return 2;
return 0;
}
getScore(target) {
let score = 0;
target.forEach((page) => {
score = Math.max(this.plus(page), this.multiply(page), score);
});
return score;
}
plus(target) {
let cnt = 0;
String(target)
.split("")
.forEach((num) => (cnt += +num));
return cnt;
}
multiply(target) {
let cnt = 1;
String(target)
.split("")
.forEach((num) => (cnt *= +num));
return cnt;
}
}
function problem1(pobi, crong) {
const exception = new Exception(pobi, crong);
if (exception.check()) return -1;
const calculator = new Calculator(pobi, crong);
return calculator.compareScore();
}
module.exports = problem1;
반응형
'성장기록 > 우아한테크코스' 카테고리의 다른 글
우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 3번 (0) | 2022.11.27 |
---|---|
우아한테크코스 5기 프론트엔드 미션 리팩터링 1주차 2번 (0) | 2022.11.26 |
우아한테크코스 5기 프론트엔드 프리코스 그 이후 (0) | 2022.11.24 |
우아한테크코스 5기 프론트엔드 프리코스 4주차 회고 (0) | 2022.11.23 |
우아한테크코스 5기 프론트엔드 프리코스 3주차 회고 (1) | 2022.11.16 |