TIL

TIL - 코드 리팩토링 (중복된 코드 메서드로 만들기)

chungmani 2026. 6. 18. 21:07

오늘 계산기 과제를 하면서

지난번에 내가 짠 코드를 보니 중복된 부분이 있어서,

이걸 좀 중복안되게 할 순 없을까? 

라는 고민을 하게 되었다.

 

튜터님께 물어보니 중복된 코드들을 하나의 메서드로 만들면 어떠냐고 해서 

하나의 메서드로 만들어 보았다.


 

기존 코드

try {
                System.out.print("첫번째 숫자를 입력하세요: ");
                num1 = sc.nextInt();
                sc.nextLine();
                if (num1 < 0) {
                    throw new ArithmeticException("0이상의 정수만 입력 가능합니다.");
                }
                System.out.print("사칙연산 기호를 입력하세요(+, -, *, /): ");
                cal = sc.nextLine();
                System.out.print("두번째 숫자를 입력하세요: ");
                num2 = sc.nextInt();
                sc.nextLine();
                if (num2 < 0) {
                    throw new ArithmeticException("0이상의 정수만 입력 가능합니다.");
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());

 

 

여기에서 숫자입력 받는 부분들이 중복이 많았고, 뭔가 되게 보기가 싫었음

그래서 입력받는 메서드를 만듦.

 

초기 메서드 코드,,,ㅋㅋ

static int input(String notice, int num) {
        System.out.print(notice);
        num = sc.nextInt();
        sc.nextLine();
        if (num < 0) {
            throw new ArithmeticException("0 이상의 정수만 입력해주세요.");
        }
        return num;
    }

 

처음에는 바보처럼 이렇게 만듦

여기서 두번의 삽질이 있었다;;

 

일단 어차피 입력 받을 값을 쓸건데 굳이 매개변수로 값을 넣은거랑,

 

저렇게 메서드를 만들고 메인에서 메서드 반환값을 변수에 넣지 않아서

값은 항상 초기값인 0이 나왔던거임;;;;;;;;;;

 

멍청..

int num1 = 0;
int num2 = 0;

String cal = "";

// 숫자, 사칙연산 기호 입력받기
try {
	input("첫번째 숫자를 입력하세요: ", num1);
	System.out.print("사칙연산 기호를 입력하세요(+, -, *, /): ");
	cal = sc.nextLine();
	input("두번째 숫자를 입력하세요: ", num2);
} catch (Exception e) {
	System.out.println(e.getMessage());
	continue;
}

 

 

계속 삽질하면서 뭐가 잘못된건지 못찾다가;;

튜터님이 매개변수로도 받고 또 값을 입력받네요?

라는 말한마디에 깨달음..! 

어? 그러네 나 바보네? 이러면서

다시 코드를 보니 값도 변수에 넣어주지 않아서 꼐속 0이었던거임..ㅋㅋ 

 


 

최종 코드

static int input(Scanner sc, String notice) {
        System.out.print(notice);
        int num = sc.nextInt();
        sc.nextLine();
        if (num < 0) {
            throw new ArithmeticException("0 이상의 정수만 입력해주세요.");
        }
        return num;
}

 

그렇게 우여곡절 끝에 완성되었다..! 

그래도 뭔가 되게 중복되어서 지저분해보였던 코드가  전보다 깔끔해보여서 좋았다. 

 try {
	num1 = input(sc,"첫번째 숫자를 입력하세요: ");
	System.out.print("사칙연산 기호를 입력하세요(+, -, *, /): ");
	cal = sc.nextLine();
	num2 = input(sc,"두번째 숫자를 입력하세요: ");
} catch (Exception e) {
	System.out.println(e.getMessage());
	continue;
}