[Spring] ν νλ¦Ώ μ½λ°± ν¨ν΄
π‘ ν νλ¦Ώ μ½λ°± ν¨ν΄μ΄λ?
μ λ΅ ν¨ν΄μ κΈ°λ³Έ ꡬ쑰μ μΈν°νμ΄μ€λ₯Ό μμνλ ν΄λμ€λ₯Ό λ§λ€μ§ μκ³ μ΅λͺ λ΄λΆ ν΄λμ€λ₯Ό νμ©νλ λ°©μ
μ΄λ° λ°©μμ μ€νλ§μμλ ν νλ¦Ώ μ½λ°± ν¨ν΄μ΄λΌκ³ νλ€.
μ λ΅ ν¨ν΄μ 컨ν μ€νΈλ₯Ό ν νλ¦Ώμ΄λΌ λΆλ₯΄κ³ , μ΅λͺ λ΄λΆ ν΄λμ€λ‘ λ§λ€μ΄μ§λ μ€λΈμ νΈλ₯Ό μ½λ°±μ΄λΌ νλ€.
μ λ΅ ν¨ν΄κ³Ό DIμ μ₯μ μ μ΅λͺ λ΄λΆ ν΄λμ€ μ¬μ© μ λ΅κ³Ό κ²°ν©ν΄ λ νΉνκ² νμ©
μ£Όλ‘ try/catch/finally λΈλ‘μ μ¬μ©νλ μ½λμ μ¬μ©λλ€.
π‘ ν νλ¦Ώ μ½λ°±μ λμμ리
μ½λ°±μ λ³΄ν΅ λ¨μΌ λ©μλ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ€.
λν νλμ ν νλ¦Ώμμ μ¬λ¬ κ°μ§ μ’ λ₯μ μ λ΅μ μ¬μ©ν΄μΌ νλ€λ©΄ νλ μ΄μμ μ½λ°± μ€λΈμ νΈλ₯Ό μ¬μ© ν μ μλ€.
μ½λ°±μ μΌλ°μ μΌλ‘ νλμ λ©μλλ₯Ό κ°μ§ μΈν°νμ΄μ€λ₯Ό ꡬνν μ΅λͺ λ΄λΆ ν΄λμ€λ‘ λ§λ€μ΄μ§λ€.
μ½λ°± μΈν°νμ΄μ€μ λ©μλμλ λ³΄ν΅ νλΌλ―Έν°κ° μλ€.
π‘ μμ νλ¦
- ν΄λΌμ΄μΈνΈμ μν μ μ½λ°± μ€λΈμ νΈλ₯Ό λ§λ€κ³ , μ½λ°±μ΄ μ°Έμ‘°ν μ 보λ₯Ό μ 곡
- λ§λ€μ΄μ§ μ½λ°±μ ν΄λΌμ΄μΈνΈκ° ν νλ¦Ώμ λ©μλλ₯Ό νΈμΆν λ νλΌλ―Έν°λ‘ μ λ¬
- ν νλ¦Ώμ μ ν΄μ§ νλ¦μ λ°λΌ μμ , λ΄λΆμμ μμ±ν μ°Έμ‘°μ 보λ₯Ό κ°κ³ μ½λ°± μ€λΈμ νΈμ λ©μλ νΈμΆ
- μ½λ°±μ ν΄λΌμ΄μΈνΈ λ©μλμ μλ μ 보μ ν νλ¦Ώμ΄ μ 곡ν μ°Έμ‘°μ 보λ₯Ό μ΄μ©ν΄ μμ μν
- μμ μνν ν λ€μ ν νλ¦Ώμ λ°ν
- ν νλ¦Ώμ μ½λ°±μ΄ λλ €μ€ μ 보λ₯Ό μ¬μ©ν΄μ μμ μ λ§μ μν
- μ΅μ’ κ²°κ³Όμ λ°λΌ ν΄λΌμ΄μΈνΈμ λ€μ λ°ν
βοΈ κ³μ°κΈ° μμ
π JUnit ν μ€νΈ μ½λ
public class CalcSumTest {
Calculator calculator;
String numFilepath;
@Before public void setUp() {
this.calculator = new Calculator();
this.numFilepath = getClass().getResource("/numbers.txt").getPath();
}
@Test
public void sumOfNumbers() throws IOException {
assertThat(calculator.calcSum(this.numFilepath), is(10));
}
@Test
public void multiplyOfNumbers() throws IOException {
assertThat(calculator.calcMultiply(this.numFilepath), is(24));
}
}
π μ½λ°± μΈν°νμ΄μ€
import java.io.BufferedReader;
import java.io.IOException;
public interface BufferedReaderCallback {
Integer doSomethingWithReader(BufferedReader br) throws IOException;
}
π ν νλ¦Ώ λ©μλ
public Integer fileReadTemplate(String filepath, BufferedReaderCallback callback) throws IOException {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(filepath));
int ret = callback.doSomethingWithReader(br);
return ret;
}catch(IOException e) {
System.out.println(e.getMessage());
throw e;
}
finally {
if(br != null) {
try { br. close();}
catch(IOException e) {System.out.println(e.getMessage());}
}
}
}
π ν νλ¦Ώ/μ½λ°±μ μ μ©ν calcSum, calcMultiply λ©μλ
public Integer calcSum(String filepath) throws IOException {
BufferedReaderCallback sumCallback = new BufferedReaderCallback() {
public Integer doSomethingWithReader(BufferedReader br) throws IOException {
Integer sum = 0;
String line = null;
while((line = br.readLine()) != null) {
sum += Integer.valueOf(line);
}
return sum;
}
};
return fileReadTemplate(filepath, sumCallback);
}
public Integer calcMultiply(String filepath) throws IOException {
BufferedReaderCallback sumCallback = new BufferedReaderCallback() {
public Integer doSomethingWithReader(BufferedReader br) throws IOException {
Integer multiply = 1;
String line = null;
while((line = br.readLine()) != null) {
multiply *= Integer.valueOf(line);
}
return multiply;
}
};
return fileReadTemplate(filepath, sumCallback);
}
π μμ κ°μ΄ ν νλ¦Ώ μ½λ°± ν¨ν΄μ μ μ©ν΄ λ§λ Calculatorλ μ€λ³΅λλ μ½λ μμ΄, μμΈ κΈ°λ₯μ κ°μΆ
μ¬μΉ μ°μ° λ©μλλ₯Ό λ§λ€μ΄ μ€ μ μλ€.
βοΈ μ₯μ
- μ λ΅ν¨ν΄μ μ¬μ©νλ ν©ν 리 κ°μ²΄κ° νμνλ€.
- νμ§λ§ ν νλ¦Ώ μ½λ°± ν¨ν΄μ ν©ν 리 κ°μ²΄ μμ΄ ν΄λΉ κ°μ²΄λ₯Ό μ¬μ©νλ λ©μλμμ μΈν°νμ΄μ€μ μ λ΅μ μ ν ν μ μλ€.
βοΈ λ¨μ
- μ€νλ§ νλ μμν¬μμ DIλ₯Ό μ¬μ©νμ§ μκ² λλ©΄ μ±κΈν€ κ°μ²΄κ° λμ§ μλλ€.
- μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ§λ§, μ€μ μ¬μ©ν ν΄λμ€λ₯Ό μ§μ μ μΈνλ―λ‘ κ²°ν©λκ° μ¦κ°νλ€.
μ°Έκ³ λ¬Έμ :
ν λΉμ μ€νλ§3 (μ΄μΌλ―Ό)