๐ก ํ ํ๋ฆฟ ์ฝ๋ฐฑ ํจํด์ด๋?
์ ๋ต ํจํด์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ง ์๊ณ ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ํ์ฉํ๋ ๋ฐฉ์
์ด๋ฐ ๋ฐฉ์์ ์คํ๋ง์์๋ ํ ํ๋ฆฟ ์ฝ๋ฐฑ ํจํด์ด๋ผ๊ณ ํ๋ค.
์ ๋ต ํจํด์ ์ปจํ ์คํธ๋ฅผ ํ ํ๋ฆฟ์ด๋ผ ๋ถ๋ฅด๊ณ , ์ต๋ช ๋ด๋ถ ํด๋์ค๋ก ๋ง๋ค์ด์ง๋ ์ค๋ธ์ ํธ๋ฅผ ์ฝ๋ฐฑ์ด๋ผ ํ๋ค.
์ ๋ต ํจํด๊ณผ 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 (์ด์ผ๋ฏผ)
'Back-end > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] JdbcTemplate ์ฌ์ฉ๋ฒ - update(), queryForInt(), queryForObject(), query() (2) | 2020.08.19 |
---|---|
[Spring] JdbcTemplate์ด๋? (0) | 2020.08.19 |
[Spring] ์์ธ์ฒ๋ฆฌ ๊ธฐ๋ฅ ๊ฐ์ถ๊ธฐ (0) | 2020.08.17 |
[Spring] ํ์ต ํ ์คํธ, ๋ฒ๊ทธ ํ ์คํธ (0) | 2020.08.13 |
[Spring] ํ ์คํธ๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ๊ด๋ฆฌ (0) | 2020.08.12 |