SKSDUD

Clean 코드와 bad 코드 리뷰 - for문(1) 본문

프로그래밍/개발공부

Clean 코드와 bad 코드 리뷰 - for문(1)

NYinJP 2023. 2. 2. 00:34

왕도는 없다

 

1️⃣ 문제 

두 개의 수를 입력받아 두 수를 포함해 두 수 사이의 수 중 2의 배수의 개수를 리턴해야 합니다. 

 

num1과 num2는 0 이상의 정수

0은 홀수로 판별합니다. 

 

🟧 Bad Code

수도코드

결과값을 저장할 count 변수 

1. 둘 다 0인 경우

  0을 리턴합니다. (0은 홀수이기 때문에)

2. 둘 중 하나가 0인 경우

  만약 num1이 0이라면

  만약 num2가 0이라면

3. 둘 다 0이 아닌 경우

  두 수가 같은 경우

    짝수로 같다면  count에 1을 저장합니다.

    홀수로 같다면 count에 0을 저장합니다.

  두 수가 다른 경우

    num1이 더 큰 경우

    num2가 더 큰 경우

결과 count를 반환합니다!

public int makeMultiplesOfDigit2(int num1, int num2) {
		// 두 수 사이의 정수 중에서 2의 배수의 개수를 리턴합니다.
		// 두 수를 포함한다. 0은 홀수로 판단한다. 
		int count=0;
		// 둘 다 0인 경우
		if(num1==0&&num2==0) count=0;
		// 둘 중 하나가 0인 경우
		if(num1 == 0 && num2 !=0){
			for(int i=1;i<=num2;i++){
				if(i%2==0){
					count++;
				}
			}
		}
		else if(num1!=0&&num2==0){
			for(int i=1;i<=num1;i++){
				if(i%2==0){
					count++;
				}
			}
		}
		// 모두 0이 아닌 경우
		else if(num1 !=0 && num2 !=0){
			if(num1==num2){
				if(num1%2==0){
					count++;
				}
				else count=0;
			}
			else if(num1>num2){
				for(int i=num2;i<=num1;i++){
					if(i%2==0){
						count++;
					}
				}
			}
			else if(num1<num2){
				for(int i=num1;i<=num2;i++){
					if(i%2==0){
						count++;
					}
				}
			}
		}
		return count;
	}

 

 

🟩 Clean Code

int count=0;
		int start=num1;
		int end=num2;
		
		if(num1>num2){
			start=num2;
			end=num1;
		}

		if(start==0){
			start=1;
		}
		for(int i=start;i<=end;i++){
			if(i%2==0){
				count++;
			}
		}
		return count;
둘 다 0이 들어오는 경우
for(int i = 1 ; i <= 0 ; i++) { }

초기식 조건식 증감식

초기식을 시작으로 조건문을 검사했을 때 참이 아니므로 

for문 밖 출력문을 바로 수행한다. 

 

Character.getNumericValue(character)

char 형을 int 형으로 바꾸는 메서드

 

  • start와 num변수를 이용하여 큰 값 작은 값을 특정하였다. 
  • 0은 홀수로 판별하기 위해  0인 경우 1로 만들어주어 % 계산을 용이하게 하였다. 
  •  

bad코드로나마 어려워했던 반복문을 작성하여 돌아가게 한 것에 의의를 두겠다.