๐ง ๋ค์ด๊ฐ๊ธฐ ์ ...
์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ค ๋ณด๋ฉด, ์ ์ ๋ฉ์๋์ ์ ์ ํ๋์ ๋ฌถ์์ผ๋ก ํด๋์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ์ถ์ ๋๊ฐ ์ฐพ์์จ๋ค.
// ๋น์ธ์คํด์คํ ๊ฐ๋ฅํ ์ ํธ๋ฆฌํฐ ํด๋์ค
public class MathUtility {
// ์์ ํ๋
public static final double PI = 3.14159;
public static final double E = 2.71828;
// ์ ์ ๋ฉ์๋: ๋ ์์ ์ต๋๊ฐ ๊ณ์ฐ
public static int max(int a, int b) {
return (a > b) ? a : b;
}
// ์ ์ ๋ฉ์๋: ๋ ์์ ์ต์๊ฐ ๊ณ์ฐ
public static int min(int a, int b) {
return (a < b) ? a : b;
}
// ์ ์ ๋ฉ์๋: ์ ๊ณฑ ๊ณ์ฐ
public static double square(double x) {
return x * x;
}
// ์ ์ ๋ฉ์๋: ํฉํ ๋ฆฌ์ผ ๊ณ์ฐ
public static long factorial(int n) {
if (n < 0) throw new IllegalArgumentException("n must be non-negative");
long result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
}
์์ ๊ฐ์ ์ฝ๋์ฒ๋ผ ์ํ์ ์ธ ์ฐ์ฐ์ ํ๋์ ํด๋์ค์ ๋ชจ์๋ ํ,
ํ์ํ ์ฐ์ฐ๋ง ์ํฉ์ ๋ฐ๋ผ ๊บผ๋ด์ด์ ์ฐ๊ณ ์ ํ๋ ํด๋์ค๋ฅผ ๊ตฌ์ฑํด์ผ ํ ๋๊ฐ ์๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฌํ ํด๋์ค๋ฅผ ๋ณดํธ์ ์ผ๋ก Utility Class๋ก ๋ถ๋ฅํ๋ค.
Utility Class : ์ ์ ๋ฉ์๋์ ์ ์ ํ๋๋ง์ผ๋ก ๊ตฌ์ฑ๋ ํด๋์ค
์ด๋ฌํ ํด๋์ค๋ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์บก์ํ๋ ๊ฐ์ฒด๋ค์ ๋์์ผ๋ก ์ฝ๋๊ฐ ์งํ๋๋ ๊ฒ์ด ์๋,
์ ์ญ์ ์ผ๋ก ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ์ ์ฐจ์ ์ผ๋ก ๋์ํ๊ธฐ์, ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฌ๊ณ ์๋ ๊ฑฐ๋ฆฌ๊ฐ ์ข ๋ฉ๋ค.
๊ทธ๋ฌ๋ Utility Class๊ฐ ์ ์ฉํ ๊ฒฝ์ฐ๋ ์๋ค.
๋ค์์ ๋ํ์ ์ธ ์์์ด๋ค.
- java.util.Math
- java.util.Arrays
- java.util.Collections
๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ Utility Class๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํด์ผํ ์ ์ ๋ฌด์์ผ๊น?
โ Utility Class์ ๋ฌธ์ ์
1๏ธโฃ Utility Class์ ํน์ฑ
์ฐ์ Utility Class์ ๋ฌธ์ ์ ์ ํ์ ํ๊ธฐ ์ ์, Utility Class์ ํน์ง์ ๋ค์ ํ๋ฒ ์ดํด๋ด์ผ ํ๋ค.
1. ์ ์ ๋ฉ์๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
2. ์ ์ ํ๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
3. ํน์ ๋ฐ์ดํฐ๋ ๋์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ์ค๊ณ๋ ํด๋์ค์ด๋ค.
Utility Class๋ static์ผ๋ก ์ด๋ฃจ์ด์ง ํด๋์ค์ด๋ค.
๋ค์ ๋งํด, ์ฝ๋ ๋ด์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋์ผํ ์ ์ ํ๋์ ์ ์ ๋ฉ์๋๋ฅผ ๊ณต์ ํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ClassName.methodName() ๋๋ ClassName.fieldName ํํ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ฏ๋ก, ๊ฐ์ฒด ์์ฑ ์์ด ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ ๊ธฐ์ Utility Class์์๋ ์ธ์คํด์ค ์์ฑ์ด ์๋ฏธ ์๋ค.
์คํ๋ ค ์ธ์คํด์ค ์์ฑ์ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ ๋ฐํ๋ค.
๋ํ, Utility Class๋ ์ํ ๋ํ ๊ฐ์ง์ง ์๊ธฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ค๊ณ ์๋ํ๋ ๊ฒ์ ํด๋์ค์ ์ฌ์ฉ ๋ชฉ์ ๊ณผ ์ด๊ธ๋๋ค.
2๏ธโฃ ๋ฌธ์ ์
๋ง์ฝ ์ด๋ฌํ Utility Class์ ์์ฑ์๋ฅผ ์ ์ํ์ง ์๊ฒ ๋๋ค๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น?
public class UtilityClass {
// ์ ์ ๋ฉ์๋
public static void printHello() {
System.out.println("Hello, Utility Class!");
}
}
Java์์ ํด๋์ค์ ์์ฑ์๊ฐ ํ๋๋ ์ ์๋์ง ์์ ๊ฒฝ์ฐ, ์ปดํ์ผ๋ฌ๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค.
public utilityClass() {
super();
}
๋ฐ๋ผ์ ์์ ๊ฐ์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ฑ๋๋ฏ๋ก, ์์ฑ์๋ฅผ ์ ์ํ์ง ์๊ฒ ๋๋ฉด ์ธ์คํด์คํ๋ฅผ ๋ง์ ์ ์๋ค.
3๏ธโฃ ํด๊ฒฐ์ฑ : abstract Class?
class๋ฅผ ์ถ์ํด๋์ค๋ก ์ง์ ํ๊ฒ ๋๋ฉด ์ธ์คํด์ค๋ฅผ ๋ง์ ์ ์์๊น?
abstract class UtilityClass{
// ์ ์ ๋ฉ์๋
public static void printHello() {
System.out.println("Hello, Utility Class!");
}
}
abstract ํด๋์ค๋ ์ธ์คํด์คํ๊ฐ ๋ถ๊ฐ๋ฅํ์ฌ ํ๋ฉด์ ์ผ๋ก๋ ์ธ์คํด์คํ๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์๋ค.
ํ์ง๋ง, ์์ ๊ฐ์ด ์ ์ํ๋ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ์๋ค.
โ๏ธ 1. abstract์ ์๋ฏธ์ ์ญํ ์ ๋ถ์ ํฉ
abstract ํค์๋ :
์ถ์ ๋ฉ์๋๋ ์ถ์ ํด๋์ค๋ฅผ ์ ์ํ๊ธฐ ์ํ ํค์๋๋ก, ํด๋์ค๊ฐ ์ค๊ณ ์ ์์๋์ด์ผ ํจ์ ์์ํ๋ค.
๋จ์ํ ์ธ์คํด์ค๋ฅผ ๋ฐฉ์งํ๊ณ ์ ํ๋ ๋ชฉ์ ์ผ๋ก abstract๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํด๋์ค์ ์ค๊ณ ์๋๋ฅผ ์๊ณก์ํค๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ค.
๋ํ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์์์ ๋ชฉ์ ์ผ๋ก ํ์ง ์๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก, abstract๋ก ์ธ์คํด์ค๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ ์ ํฉํ์ง ์๋ค.
โ๏ธ 2. ์ธ์คํด์คํ ์ฐํ ๊ฐ๋ฅ
class SubUtility extends UtilityClass {
public SubUtility() {
System.out.println("SubUtility instance created.");
}
}
๋ ๋ฒ์งธ ๋ฌธ์ ์ ์ ์์ ์ฝ๋์ฒ๋ผ, UtilityClass์ ์์์ ๋ฐ์ ์ฐํํ ์ ์๋ค๋ ์ ์ด๋ค.
๋ฐ๋ผ์ abstract ํค์๋๋ง์ผ๋ก๋ ์๋ฒฝํ๊ฒ ์ธ์คํด์คํ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
โ private๋ก ์์ฑ์๋ฅผ ์ ์ธํ๋ผ.
public class UtilityClass {
// private ์์ฑ์
private UtilityClass(){
throw new AssertionError();
}
public static void printHello() {
System.out.println("Hello, Utility Class!");
}
}
private๋ก ์์ฑ์๋ฅผ ์ ์ธํ์ฌ ์ธ์คํด์ค๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ์์ ์์ ๋ฌธ์ ์ ๋ค์ ๋ชจ๋ ํด๊ฒฐํ๋ค.
โ๏ธ ์ธ์คํด์คํ ๋ฐฉ์ง
์ธ๋ถ ๋ฐ ๋ด๋ถ์์ ํด๋์ค ์ธ์คํด์คํ ๋ถ๊ฐ๋ฅํ๋ค.
AssertionError()๋ฅผ ์์ฑ์ ๋ด์์ ๋์ง์ผ๋ก์จ, ๋ด๋ถ์์ ์ค์๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋๋ผ๋
์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
โ๏ธ ์์์ด ๋ถ๊ฐ๋ฅํ๋ค.
Java์์ ์์๋ ํด๋์ค์ ์์ฑ์๋ ํญ์ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํ๋ค.
๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๊ฐ private๋ก ์ ์ธ๋ ๊ฒฝ์ฐ,
์์ ํด๋์ค๋ ์ด๋ฅผ ํธ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ ์์์ ํตํ ์ธ์คํด์คํ๋ ์ฐจ๋จ๋๋ค.
๐ฉ ๊ฒฐ๋ก
private ์์ฑ์๋ฅผ ์ ์ํ๋ฉด,
์ง์ ์ ์ธ ์ธ์คํด์คํ๋ฟ ์๋๋ผ ์์์ ํตํ ์ธ์คํด์คํ ์ฐํ๋ ๋ฐฉ์งํ ์ ์๋ค.
์ด๋ ์ ํธ๋ฆฌํฐ ํด๋์ค์ฒ๋ผ ์ธ์คํด์คํ๊ฐ ํ์ ์๋ ํด๋์ค์ ์ ํฉํ ์ค๊ณ ๋ฐฉ์์ด๋ค.
๐ข REF
์ดํฉํฐ๋ธ ์๋ฐ 3/E