ํด๋ฆฐ ์ฝ๋๋ ์ ์ค์ํ๊ณ ์ด๋ป๊ฒ ์ค์ฒํด์ผ ํ ๊น?
ํด๋ฆฐ ์ฝ๋๋ ์ ์ค์ํ๊ณ ์ด๋ป๊ฒ ์ค์ฒํด์ผ ํ ๊น? ๊ด๋ จ
ํด๋ฆฐ ์ฝ๋(Clean Code)๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ผ๋ก, ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ฐ์กฐํฉ๋๋ค. ํด๋ฆฐ ์ฝ๋๋ ํ๋ก๊ทธ๋จ์ ๋์์ ๋ณด์ฅํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ์ฝ๋ ์์ฒด๊ฐ ๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋๊ณ ์ ์ง ๋ณด์๊ฐ ์ฝ๋๋ก ์์ฑ๋์ด์ผ ํ๋ค๋ ์์น์ ๊ธฐ๋ฐํฉ๋๋ค.
์ด๋ ๊ฐ๋ฐํ์ด ์๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ฌ๋ฟ๋ง ์๋๋ผ, ์คํ ์์ค ํน์ ๋ค์ํ ์ข ๋ฅ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์๋ ์ค์ํ๊ฒ ๊ฐ์กฐ๋๋ ์์น ์ค ํ๋์ด๋ฉฐ, ์ข์ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ค์ฒ์ ์ผํ์ผ๋ก ์ฌ๊ฒจ์ง๋๋ค. ๊ทธ๋ฐ๋ฐ ํ์ค์ ์ผ๋ก ์ค์ฒํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ด๋ฒ ๊ธ์์๋ ํด๋ฆฐ ์ฝ๋๊ฐ ์ค์ํ ์ด์ ์ ์ด๋ฅผ ์ค์ฒํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํด๋ฆฐ ์ฝ๋๊ฐ ์ค์ํ ์ด์
์ฐ์ ํด๋ฆฐ ์ฝ๋๊ฐ ๊ฐ๋ฐํ์ ์ค์ํ ์ด์ ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ๊ณผ์ ์์ ์ฝ๋์ ํ์ง๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ค์ํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๊ณ , ํ์ง ๋์ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค๊ธฐ ์ํด์์ ๋๋ค.
๋ฌผ๋ก ์ด๋ค ๊ฐ๋ฐ์๋ ์ง์ ๋ถํ ์ฝ๋๋ก ํ๋ก์ ํธ๋ฅผ ๊ณ์ ์งํํ๊ณ ์ถ์ง ์์ ๊ฒ๋๋ค. ๊ทธ๋ฌ๋ ๋๋๋ก ๋ง๊ฐ ๊ธฐํ ์๋ฐ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ํด๋ฆฐ ์ฝ๋ ์์ฑ์ ํผํ๋ ๊ฒฝ์ฐ๋ ์์ฃ . ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ง๋๋ฅผ ์ํด ์๋๋ฅด์ง๋ง, ๊ฒฐ๊ตญ ๋์ค์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฝ๋๋ก ๋ค์ ๋์๊ฐ ๋ฒ๊ทธ๋ฅผ ์์ ํ๊ฑฐ๋, ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฑ ์ ์ง ๋ณด์ ์์ ์ด ํ์ํฉ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์์ ํ๋๋ผ ํจ์ฌ ๋ ๋ง์ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.
๊ฐ๊ฒฐํ๊ณ ๋ช ํํ ํด๋ฆฐ ์ฝ๋๋ ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ์ค๋๋ค. ๋ฐ๋ฉด ๋ณต์กํ๊ณ ๋ํดํ ์ฝ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ , ๋ฐ๊ฒฌํ ํ์๋ ์์ ์ด ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ํ ๊ฐ๋ ์ฑ์ด ๋๊ณ ์ ์ง ๋ณด์๊ฐ ์ฉ์ดํ ์ฝ๋๋ ๊ฐ๋ฐ ์๋๋ฅผ ํฅ์์ํต๋๋ค. ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์์ ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์ค๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ๊ตฌํํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ํด๋ฆฐ ์ฝ๋๋ ๋น๋จ ๊ฐ๋ฐ์ ํ ์ฌ๋๋ฟ๋ง ์๋๋ผ, ํ ์ ์ฒด์ ํ๋ก์ ํธ์ ์ฑ๊ณต์ ๊ธฐ์ฌํ๋ ์ค์ํ ๊ฐ์น๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
ํด๋ฆฐ ์ฝ๋์ ์ฃผ์ ์์น
ํด๋ฆฐ ์ฝ๋์ ์ฃผ์ ์์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ์๋ฏธ ์๋ ๋ณ์์ ํจ์ ์ฌ์ฉํ๊ธฐ
๋ณ์์ ํจ์๋ ๊ทธ ์ฌ์ฉ ๋ฌธ๋งฅ์ ๋ง๊ฒ ๋ช ํํ๊ฒ ๋ช ๋ช ๋์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ดํด๊ฐ ์ฌ์์ง๊ณ ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค.
2) ๊ฐ๋ ์ฑ ์ข์ ์ฝ๋ ๋ง๋ค๊ธฐ
์ฝ๋๋ ๋ค๋ฅธ ์ฌ๋์ด๋ ๋์ค์ ์์ ์ด ์ฝ๊ธฐ ์ฝ๊ฒ ์์ฑ๋์ด์ผ ํฉ๋๋ค. ์๋ฏธ ์๋ ๋ณ์๋ช , ํจ์๋ช , ํด๋์ค๋ช ๋ฑ์ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์๋๋ฅผ ๋ช ํํ๊ฒ ์ ๋ฌํด์ผ ํฉ๋๋ค.
/**
* <์์ ์ฝ๋ 1-1.>
*/
public class Calculator {
public static void main(String[] args) {
double a = 10, b = 5;
double result = add(a, b);
System.out.println("Sum is: " + result);
}
public static double add(double num1, double num2) {
return num1 + num2;
}
}
์์์ ์ธ๊ธํ ๋๋ก ๋ณ์๋ช
์ ์๋ฏธ ์๋ ๋ณ์์ ํจ์๋ก ๋ ๋ช
ํํ๊ฒ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด, a
, b
๋์ ์ operand1
, operand2
๋ก ๋ณ๊ฒฝํ์ฌ ๋ณ์์ ์ญํ ์ ๋ช
ํํ ํ๋ ๊ฒ์ด์ฃ . operand๋ ์์์์ ์ฐ์ฐ์ด ์ํ๋๋ ๊ฐ ๋๋ ํผ์ฐ์ฐ์๋ฅผ ๋ํ๋ด๋ ์ผ๋ฐ์ ์ธ ์ฉ์ด์
๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์
์ฐ์ฐ a + b
์์ a์ b๋ ๋ ํผ์ฐ์ฐ์ ๋๋ operand์
๋๋ค. ์์ ์ฝ๋์์๋ ์ฐ์ฐ์ ์ฐธ์ฌํ๋ ๊ฐ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. ๋๋ถ์ ๊ฐ ๋ณ์๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ๋ช
ํํ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
๋ฉ์๋ ๋ช
๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ์์ ์ฝ๋ 1-2์์ add ๋์ ์ addNumbers
๋ก ๋ณ๊ฒฝํ์ฌ ๋ฉ์๋์ ์ญํ ์ ๋ช
ํํ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก โ์๋ฏธ ์๋ ๋ณ์์ ํจ์ ์ฌ์ฉโ๊ณผ ๋๋ถ์ด ์ฝ๋์ ๊ฐ๋
์ฑ์ด ํฅ์๋์์ต๋๋ค.
/**
* <์์ ์ฝ๋ 1-2. ๊ฐ๋
์ฑ์ ์ถ๊ฐํ ์ฝ๋>
*/
public class Calculator {
public static void main(String[] args) {
double operand1 = 10;
double operand2 = 5;
double sum = addNumbers(operand1, operand2);
System.out.println("Sum is: " + sum);
}
public static double addNumbers(double num1, double num2) {
return num1 + num2;
}
}
3) ์ฃผ์์ ํ์ํ ๋๋ง ์ ํ์ฉํ๊ธฐ
์ฝ๋์ ์๋๋ ์ค์ํ ๋ถ๋ถ์ ์ฃผ์์ ์ถ๊ฐํ์ฌ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ ์ค๋๋ค. ๊ทธ๋ฌ๋ ์ฃผ์์ด ํ์ํ ๊ฒฝ์ฐ์ ์ฃผ์์ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค๋ ์ฝ๋ ์์ฒด๋ก ์๋๋ฅผ ๋ช ํํ ๋๋ฌ๋ด๋ ๊ฒ์ด ์ข์ต๋๋ค.
4) ๊ฐ๊ฒฐํ ์ฝ๋ ์ ์งํ๊ธฐ
๋ถํ์ํ ์ฝ๋๋ ํผํ๊ณ , ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. ๊ฐ๊ฒฐํ ์ฝ๋๋ ๋ฒ๊ทธ๋ฅผ ์ค์ด๊ณ ์ ์ง ๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ๋ง๋ญ๋๋ค. ์๋ ์์ ์ฝ๋ 2-1์ ์ฌ์ฉ์์๊ฒ ๋ ๊ฐ์ ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค.
/**
* <์์ ์ฝ๋ 2-1.>
*/
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the first number: ");
double operand1 = scanner.nextDouble();
System.out.print("Enter the second number: ");
double operand2 = scanner.nextDouble();
double sum = operand1 + operand2;
System.out.println("Sum is: " + sum);
scanner.close();
}
๋จผ์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ถ๋ถ์ด ์๋๋ฐ, ๋ฐ๋ก ์ฌ์ฉ์ ์
๋ ฅ์ ๋ ๋ฒ ๋ฐ๋ ๋ถ๋ถ์
๋๋ค. ์์ ์ฝ๋ 3-2์์๋ ์ด๊ฒ์ getUserInput
๋ฉ์๋๋ก ์ถ์ถํ์ฌ ์ค๋ณต์ ์ ๊ฑฐํ์ต๋๋ค. ๋ํ Scanner
๋ฅผ getUserInput
๋ฉ์๋ ๋ด๋ถ์์ ์์ฑํ์ฌ ๋ฉ์๋ ์คํ ์๋ฃ ํ ์๋์ผ๋ก close
๋๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฉ์์ง ์ถ๋ ฅ๊ณผ ์ ๋ ฅ์ ํ ์ค๋ก ์ฒ๋ฆฌํ์ฌ ์ฝ๋๋ฅผ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์ ๋ฐฉ์์ผ๋ก ์ค์์ต๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ์ผ๋ก ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ํฅ์๋๊ณ , ์ค๋ณต์ด ์ ๊ฑฐ๋์ด ๋ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ์ด ํฅ์๋ ์ฝ๋๊ฐ ๋์์ต๋๋ค. ๋ํ ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ฝ๋์ ๋ชฉ์ ๊ณผ ๊ฐ ๋ถ๋ถ์ ์ญํ ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ์ต๋๋ค. ์ด๋ ์ฝ๋์ ์๋๋ฅผ ์ค๋ช ํ์ฌ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
/**
* <์์ ์ฝ๋ 2-2. ํ์ํ ์ฃผ์์ ์ถ๊ฐ์ ์ฝ๋ ๊ฐ๊ฒฐํํ๊ธฐ>
*/
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
// ์ฌ์ฉ์๋ก๋ถํฐ ๋ ๊ฐ์ ์ซ์๋ฅผ ์
๋ ฅ๋ฐ์ ๋ง์
๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ
double operand1 = getUserInput("Enter the first number: ");
double operand2 = getUserInput("Enter the second number: ");
// ์
๋ ฅ๋ฐ์ ๋ ์ซ์๋ฅผ ๋ํจ
double sum = operand1 + operand2;
// ๊ฒฐ๊ณผ ์ถ๋ ฅ
System.out.println("Sum is: " + sum);
}
// ์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ์ ๋ฐ๋ ๋ฉ์๋
private static double getUserInput(String message) {
System.out.print(message);
return new Scanner(System.in).nextDouble();
}
}
5) ๋ชจ๋ํ ์ํํ๊ธฐ
์ฝ๋๋ฅผ ์์ ๋ชจ๋๋ก ๋๋์ด ๊ฐ ๋ชจ๋์ด ํน์ ๊ธฐ๋ฅ์ด๋ ์ญํ ์ ์ํํ๋๋ก ํด์ผ ํฉ๋๋ค. ์ด๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ์ ์ง ๋ณด์๋ฅผ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
์๋ ์์ ์ฝ๋๋ ์ฌ์ฉ์์๊ฒ ๋ ๊ฐ์ ๋ณ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ์ด๋ฅผ ์ฌ์น์ฐ์ฐ ํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํํ ์์ ์ ๋๋ค.
/**
* <์์ ์ฝ๋ 3-1.>
*/
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
//๋ ๊ฐ์ ์ซ์๋ฅผ ์
๋ ฅ๋ฐ์
double operand1 = getUserInput("Enter the first number: ");
double operand2 = getUserInput("Enter the second number: ");
//์ฌ์น์ฐ์ฐ ๊ตฌํ
double sum = operand1 + operand2;
double difference = operand1 - operand2;
double product = operand1 * operand2;
double quotient = operand1 / operand2;
//๊ฒฐ๊ณผ ์ถ๋ ฅ
System.out.println("Sum is: " + sum);
System.out.println("Difference is: " + difference);
System.out.println("Product is: " + product);
System.out.println("Quotient is: " + quotient);
}
// ์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ์ ๋ฐ์
private static double getUserInput(String message) {
System.out.print(message);
return new Scanner(System.in).nextDouble();
}
}
๋ชจ๋ํ๋ฅผ ์ ์ฉํ๊ธฐ ์ํด ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ธฐ๋ฅ๋ค์ ์ดํด๋ด
๋๋ค. ์์ ์ฝ๋ 3-2์์๋ ์ผ๋จ ๋ ์์ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฉ์๋๋ค๋ก ์ฝ๋๋ฅผ ๋ชจ๋ํ๊ฐ ํ์ํ๋ฐ, ๋ถ๋ฆฌ๋ ๊ธฐ๋ฅ์ ์ํํ๋ add
, subtract
, multiply
, divide
๋ฉ์๋๋ค์ ๊ฐ๊ฐ ๋ง์
, ๋บ์
, ๊ณฑ์
, ๋๋์
์ ์ํํฉ๋๋ค.
displayResult
๋ฉ์๋๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์ญํ ์ ์ํํฉ๋๋ค. ์ฝ๋์ ๊ฐ๋
์ฑ์ด ํฅ์๋๊ณ , ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ด ๋ช
ํํ๊ฒ ๋ถ๋ฆฌ๋์ด ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ก์ต๋๋ค. ๋๋์
์์ 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ์ฌ ์์ธ ์ํฉ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
/**
* <์์ ์ฝ๋ 3-2. ์ฒซ ๋ฒ์งธ ๋ชจ๋ํ๋ฅผ ์ํํ ์ฝ๋>
*/
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
//๋ ๊ฐ์ ์ซ์๋ฅผ ์
๋ ฅ๋ฐ์
double operand1 = getUserInput("Enter the first number: ");
double operand2 = getUserInput("Enter the second number: ");
//์ฌ์น์ฐ์ฐ ๊ตฌํ
double sum = add(operand1, operand2);
double difference = subtract(operand1, operand2);
double product = multiply(operand1, operand2);
double quotient = divide(operand1, operand2);
//๊ฒฐ๊ณผ ์ถ๋ ฅ ๋ฉ์๋ ํธ์ถ
displayResult("Sum is: ", sum);
displayResult("Difference is: ", difference);
displayResult("Product is: ", product);
displayResult("Quotient is: ", quotient);
}
private static double add(double num1, double num2) {
return num1 + num2;
}
private static double subtract(double num1, double num2) {
return num1 - num2;
}
private static double multiply(double num1, double num2) {
return num1 * num2;
}
private static double divide(double num1, double num2) {
if (num2 != 0) {
return num1 / num2;
else {
System.out.println("Cannot divide by zero.");
return Double.NaN;
}
}
//๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
private static void displayResult(String message, double result) {
System.out.println(message + result);
}
//์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ์ ๋ฐ์
private static double getUserInput(String message) {
System.out.print(message);
return new Scanner(System.in).nextDouble();
}
}
๋ชจ๋ํ๋ฅผ ์ง๋์น๊ฒ ์ ์ฉํ๋ฉด ์ฝ๋์ ๊ธธ์ด๊ฐ ์ฆ๊ฐํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฐ๋ ์ฑ๊ณผ ๊ฐ๊ฒฐ์ฑ์ ํด์น ์ ์์ต๋๋ค. ํญ์ ์ ์ ํ ์์ค์์ ๋ชจ๋ํ๋ฅผ ์ ์ฉํด์ผ ํฉ๋๋ค. ์์ ๊ท๋ชจ์ ํ๋ก๊ทธ๋จ์ด๋ ๊ฐ๋จํ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ํ๋ฅผ ๊ณผ๋ํ๊ฒ ์ ์ฉํ์ง ์๊ณ , ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ์์ ์์ ์ฌ์น์ฐ์ฐ์ ๊ฐ๋จํ๊ฒ ์ํํ๋ ๋ฐ ๊ตณ์ด ์ฝ๋๋ฅผ ์ ๋ ๊ฒ ๋๋ฆด ํ์๊ฐ ์์๊น๋ผ๊ณ ํ๋จ ํ๊ณ ์ฝ๋์ ์ต์ ํ๋ฅผ ์ํํด ๋ด ๋๋ค.
/**
* <์์ ์ฝ๋ 3-3. ๋ ๋ฒ์งธ ๋ชจ๋ํ๋ฅผ ์ํํ ์ฝ๋>
*/
import java.util.Scanner;
public class SimpleCalculator {
public static void main(String[] args) {
double operand1 = getUserInput("Enter the first number: ");
double operand2 = getUserInput("Enter the second number: ");
// ๋ง์
, ๋บ์
, ๊ณฑ์
, ๋๋์
๊ฒฐ๊ณผ ๊ณ์ฐ ๋ฐ ์ถ๋ ฅ
calculateAndDisplay(operand1, operand2, "Sum", (a, b) -> a + b);
calculateAndDisplay(operand1, operand2, "Difference", (a, b) -> a - b);
calculateAndDisplay(operand1, operand2, "Product", (a, b) -> a * b);
calculateAndDisplay(operand1, operand2, "Quotient", (a, b) -> (b != 0) ? a / b : Double.NaN);
}
private static double getUserInput(String message) {
System.out.print(message);
return new Scanner(System.in).nextDouble();
}
private static void calculateAndDisplay(double num1, double num2, String operation, DoubleOperation op) {
double result = op.apply(num1, num2);
System.out.println(operation + " is: " + result);
}
@FunctionalInterface
private interface DoubleOperation {
double apply(double a, double b);
}
}
์์ ์ฝ๋ 3-3์์๋ ๋๋ค ํํ์์ ํ์ฉํ์ฌ ๊ฐ๋จํ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ ํจ์ํ ์ธํฐํ์ด์ค DoubleOperation
์ ๋์
ํ๊ณ , calculateAndDisplay
๋ฉ์๋์์ ๊ฐ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋์ ๋ฉ์๋๋ก ์ฌ๋ฌ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ฉด์๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ์ฌ ๋ถํ์ํ ์ฝ๋์ ๋ผ์ธ์ ์ค์ด๊ณ ๊ธฐ๋ฅ์ ์ต์ ํํ์ต๋๋ค.
6) ํ ์คํธ ๊ฐ๋ฅํ ์ฝ๋ ๋ง๋ค๊ธฐ
ํด๋ฆฐ ์ฝ๋๋ ํ ์คํธ๊ฐ ์ฝ๊ฒ ๊ฐ๋ฅํ ๊ตฌ์กฐ์ฌ์ผ ํฉ๋๋ค. ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๊ณ ์ ์ง ๋ณด์ํ ๋ ํ ์คํธ๊ฐ ๋์์ด ๋๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ ์ฝ๋๋ ์ฃผ๋ก ๋ชจ๋ํ, ์์กด์ฑ ์ฃผ์ , ์ธํฐํ์ด์ค ํ์ฉ ๋ฑ์ ํตํด ์ ์ฉํ ์ ์์ต๋๋ค.
์์์ ์๊ฐํ ์์น์ ํด๋ฆฐ ์ฝ๋๋ฅผ ์ํํ๋ ์๋ ค์ง ๋ง์ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ๋ํ์ ์ธ ์์ ์์ต๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ Robert Martin์ Clean Code์ ์ธ๊ธ๋ ์์น ์์ฝ์ ์ฐธ๊ณ ํ์ธ์.
ํด๋ฆฐ ์ฝ๋๋ฅผ ๋ฐฉํดํ๋ ์์
์ด๋ฌํ ํด๋ฆฐ ์ฝ๋ ์์น์ ํ์ค์ ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ ์ฌ์ค ์ฝ์ง ์์ ๊ณผ์ ์ ๋๋ค. ์ด 15๋ช ์ผ๋ก ์ด๋ฃจ์ด์ง ์ ๊ฐ ์ํ ๊ฐ๋ฐํ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ํด๋ฆฐ ์ฝ๋๋ฅผ ์งํค๊ธฐ ์ด๋ ค์ ์ต๋๋ค.
1) ์๊ฐ๊ณผ ์ผ์ ์๋ฐ
ํ๋ก์ ํธ ์ผ์ ๊ณผ ๋ง๊ฐ์ผ์ ์งํค๋ ๊ฒ์ ์ค์ํ ์ผ์ ๋๋ค. ๊ทธ๋์ ๊ฐ๋ฐ์๋ค์ ์ข ์ข ๊ธฐ๋ฅ ์์ฃผ์ ์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํด์ผ ํ๋ค๋ ์๋ฐ์ด ์๊ณ , ์ด๋ ํด๋ฆฐ ์ฝ๋ ์์ฑ์ ๋ถ๋ด์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ธฐ์ ๋ถ์ฑ(Technical Debt)์ ํํ๋ก ๋ํ๋๊ธฐ๋ ํ๋ฉฐ, ํ๋ก์ ํธ ์ด๊ธฐ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๋ฉด์ ์ ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋๋ค. ๋์ค์๋ ์ ๋ฆฌํ๋ ค๋ ์ฝ๋๋ฅผ ๋ ์ด์ ์์ ๋์ง ๋ชปํ๋ ์ํ์์ ๊ณ์ ๊ฐ๋ฐ์ ์งํํด์ผ ํ๋ ์ํ๊ฐ ๋ ์๋ ์์ฃ . ํด๋ฆฐ ์ฝ๋ ์์ฑ์ ํตํด ๊ธฐ์ ๋ถ์ฑ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค.
2) ํ์ ๊ฐ ์ผ๊ด์ฑ ๋ถ์กฑ
ํ์ ๊ฐ์ ์ฝ๋ ์์ฑ ์คํ์ผ์ด๋ ํด๋ฆฐ ์ฝ๋์ ๊ดํ ์ดํด ์ฐจ์ด๊ฐ ์์ ์ ์์ต๋๋ค. ํนํ ์ด๊ฒ์ ์ฃผ๋์ด ๊ฐ๋ฐ์ ๊ทธ๋ฃน๊ณผ ์๋์ด ๊ฐ๋ฐ์ ๊ทธ๋ฃน์์ ๋๋๋ฌ์ง๊ฒ ๋ํ๋๋๋ฐ์. ํ ๋ด์์ ์ผ๊ด๋ ์ฝ๋ ์คํ์ผ๊ณผ ํด๋ฆฐ ์ฝ๋ ์์น์ ์ ์ฉํ๊ธฐ ์ํด ๊พธ์คํ ๋ ผ์์ ๊ต์ก์ด ํ์ํฉ๋๋ค.
3) ๋ ๊ฑฐ์ ์ฝ๋์์ ๊ฒฐํฉ
์ด๋ฏธ ์กด์ฌํ๋ ๋ ๊ฑฐ์ ์ฝ๋์ ์๋ก์ด ์ฝ๋๋ฅผ ํตํฉํ๋ ๊ฒ์ ์ฒ์๋ถํฐ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ง๋๋ ๊ฒ๋ณด๋ค ๋ ๋ฐฐ ์ด์ ์ด๋ ต์ต๋๋ค. ํนํ ๋ ๊ฑฐ์ ์ฝ๋์ ํ์ง์ด ๋ฎ๊ฑฐ๋, ํด๋ฆฐ ์ฝ๋ ์์น๊ณผ ๋ง์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๊ทธ๋ฌํ๋ฐ ์ด๋ ์ถฉ๋ถํ ๋ฆฌํฉํ ๋ง์ด ํ์ํฉ๋๋ค.
4) ๋น์ฆ๋์ค ์๊ตฌ ๋ณ๊ฒฝ
๋น์ฆ๋์ค ์๊ตฌ ์ฌํญ์ ๋ณํ๋ ์ฝ๋ ์์ ์ ํ์๋ก ํฉ๋๋ค. ์ด๋ฌํ ๋ณํ ๋์์ ์ํด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๋, ํด๋ฆฐ ์ฝ๋๋ฅผ ์ ์งํ๋ฉด์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ๋ ํฐ ๋ ธ๋ ฅ์ ๋ค์ฌ์ผ ํฉ๋๋ค.
ํด๋ฆฐ ์ฝ๋๋ฅผ ์ํ ๊ณ ๊ตฐ๋ถํฌ
์ด๋ ๋ฏ ํด๋ฆฐ ์ฝ๋๋ฅผ ํ์ค์ ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ ์ด๋ ค์ด ์ผ์ด์ง๋ง, ํ์ ์ญ๋ ํฅ์๊ณผ ์ํํธ์จ์ด์ ์ฅ๊ธฐ์ ์ธ ์ ์ง ๋ณด์์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ผญ ํ์ํ ์ผ์ ๋๋ค.
์ ์ ๊ฒฝ์ฐ, S์ฌ์ ์๋ฃจ์ ๊ฐ๋ฐ ์ผํฐ์์ ๋ค์ํ ์น๊ณผ ์๋ ๊ธฐ๋ฐ ์๋ฃจ์ ๊ฐ๋ฐํ์ ๋ด๋นํ์ ๋, ์ ์ผ ๋จผ์ ํด๋ฆฐ ์ฝ๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ ์ฉํ ํ๋ก์ ํธ๋ฅผ ์ ๋ณํ์ต๋๋ค. ์ด๋ ๋ชจ๋ ํ๋ก์ ํธ์ ๋ชจ๋ ์ฝ๋๊ฐ ๊นจ๋ํ๊ณ ์๋ฆ๋ค์ธ ํ์๋ ์๋ค๋ ์ธ์์์ ์์ํ ๊ฒ์ด์ฃ .
๊ทธ๋ค์ ๊ฐ ๊ฐ๋ฐ ํํธ ๋ฆฌ๋์ ๊ฐ๋ฐ์๋ค์๊ฒ ์ ํด๋ฆฐ ์ฝ๋๋ฅผ ์ํํด์ผ ํ๋์ง, ์ดํด์ ์ฐธ์ฌ๋ฅผ ๊ตฌํ๋ ๋ฐ ์ค๋ ์๊ฐ์ ํ ์ ํ์ต๋๋ค. ๋ฐ์ ํ๋ก์ ํธ ์ผ์ ์ค์์๋ ํ์์ ์ ํ ํด๋ฆฐ ์ฝ๋ ๊ท์น๋๋ก ๊ฐ๋ฐํ๊ณ , ๋๋ฃ ๋ฆฌ๋ทฐ์์ ์ด ์ง์นจ์ ์์ง ์๋๋ก ํ์ ํ๋ก์ธ์ค๋ฅผ ๋ช ๋ฌธํํ๊ณ ์ค์ฒํ์ต๋๋ค.
์๊ฐ์ด ํ๋ฌ ์คํ๊ฒํฐ ์ฝ๋(์์ค ์ฝ๋๊ฐ ๋ณต์กํ๊ฒ ์ฝํ ๋ชจ์ต์ ๋น์ )๊ฐ ์ ์ ์ฌ๋ผ์ง๊ณ , ๋น ๋ฅธ ์ดํด์ ์ ์ง ๋ณด์๊ฐ ์ฉ์ดํ ์ฝ๋๋ง ๋จ์์ ๋, ๋น๋ก์ ํด๋ฆฐ ์ฝ๋ ๋ด์ฌํ์ ๋ํ ์ถฉ๋ถํ ํจ๊ณผ์ ๋ณด์์ ๋๋ ์ ์์์ต๋๋ค.
์์ง ํด๋ฆฐ ์ฝ๋๊ฐ ์ต์ํ์ง ์๋ค๋ฉด, ์ด๊ธฐ ์ค์ฒ์ ์ด๋ ต๊ฒ ์ง๋ง ๊ฐ๋ฐํ์ ํด๋ฆฐ ์ฝ๋ ์์น์ ์์ง ์์์ผ ํฉ๋๋ค. ํ์ค์ ์ธ ์ ์ฝ์ ๊ณ ๋ คํด ์ด๋ฅผ ์ ์ฉํ๋ฉฐ, ๊พธ์คํ ๋ ธ๋ ฅ์ ํตํด ์ฝ๋ ํ์ง์ ํฅ์์ํค๋ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ ์ ์๊ธธ ๋ฐ๋๋๋ค.