๐ญ Chapter 5: ํ์ ๋ง์ถ๊ธฐ
ํ๋ก๊ทธ๋๋จธ๋ผ๋ฉด ํ์์ ๊น๋ํ๊ฒ ๋ง์ถฐ ์ฝ๋๋ฅผ ์ง์ผ ํ๋ค. ์ฝ๋ ํ์์ ๋ง์ถ๊ธฐ ์ํ ๊ฐ๋จํ ๊ท์น์ ์ ํ๊ณ ๊ทธ ๊ท์น์ ์ฐฉ์คํ ๋ฐ๋ผ์ผ ํ๋ค. ํ์ผ๋ก ์ผํ๋ค๋ฉด ํ์ด ํฉ์ํด ๊ท์น์ ์ ํ๊ณ ๋ชจ๋๊ฐ ๊ทธ ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค. ํ์ํ๋ค๋ฉด ๊ท์น์ ์๋์ผ๋ก ์ ์ฉํ๋ ๋๊ตฌ๋ฅผ ํ์ฉํ๋ค.
๐ ํ์์ ๋ง์ถ๋ ๋ชฉ์ โ
์ฝ๋ ํ์์ ์ค์ํ๋ค. ๋๋ฌด๋๋ ์ค์ํ๋ฏ๋ก ์ตํต์ฑ ์์ด ๋งน๋ชฉ์ ์ผ๋ก ๋ฐ๋ฅด๋ฉด ์ ๋๋ค. ์ฝ๋ ํ์์ ์์ฌ์ํต์ ์ผํ์ด๋ค. ์์ฌ์ํต ์ ๋ฌธ ๊ฐ๋ฐ์์ ์ผ์ฐจ์ ์ธ ์๋ฌด๋ค.
์ค๋ ๊ตฌํํ ๊ธฐ๋ฅ์ด ๋ค์ ๋ฒ์ ์์ ๋ฐ๋ ํ๋ฅ ์ ์์ฃผ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ค๋ ๊ตฌํํ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ์์ผ๋ก ๋ฐ๋ ์ฝ๋์ ํ์ง์ ์ง๋ํ ์ํฅ์ ๋ฏธ์น๋ค. ์ค๋ ์๊ฐ์ด ์ง๋ ์๋ ์ฝ๋์ ํ์ ์ ๋ ์ด์ ์ฐพ์๋ณด๊ธฐ ์ด๋ ค์ธ ์ ๋๋ก ์ฝ๋๊ฐ ๋ฐ๋์ด๋ ๋งจ ์ฒ์ ์ก์๋์ ๊ตฌํ ์คํ์ผ๊ณผ ๊ฐ๋ ์ฑ ์์ค์ ์ ์ง๋ณด์ ์ฉ์ด์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ณ์ ์ํฅ์ ๋ฏธ์น๋ค. ์๋ ์ฝ๋๋ ์ฌ๋ผ์ง์ง๋ผ๋ ๊ฐ๋ฐ์์ ์คํ์ผ๊ณผ ๊ท์จ์ ์ฌ๋ผ์ง์ง ์๋๋ค.
๐ ์ ์ ํ ํ ๊ธธ์ด๋ฅผ ์ ์งํ๋ผโ
์ธ๋ก ๊ธธ์ด๋ถํฐ ์ดํด๋ณด์. ์์ค ์ฝ๋๋ ์ผ๋ง๋ ๊ธธ์ด์ผ ์ ๋นํ ๊น? ์๋ฐ์์ ํ์ผ ํฌ๊ธฐ๋ ํด๋์ค ํฌ๊ธฐ์ ๋ฐ์ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํฐ ํ์ผ๋ณด๋ค ์์ ํ์ผ์ด ์ดํดํ๊ธฐ ์ฝ๋ค.
๐ ์ ๋ฌธ ๊ธฐ์ฌ์ฒ๋ผ ์์ฑํ๋ผโ
์ด๋ฆ์ด ๊ฐ๋จํ๋ฉด์๋ ์ค๋ช ์ด ๊ฐ๋ฅํ๊ฒ ์ง๋๋ค. ์ด๋ฆ๋ง ๋ณด๊ณ ๋ ์ฌ๋ฐ๋ฅธ ๋ชจ๋์ ์ดํด๋ณด๊ณ ์๋์ง ์๋์ง๋ฅผ ํ๋จํ ์ ๋๋ก ์ ๊ฒฝ ์จ์ ์ง๋ ๋ค. ์์ค ํ์ผ ์ฒซ ๋ถ๋ถ์ ๊ณ ์ฐจ์ ๊ฐ๋ ๊ณผ ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช ํ๋ค. ์๋๋ก ๋ด๋ ค๊ฐ์๋ก ์๋๋ฅผ ์ธ์ธํ๊ฒ ๋ฌ์ฌํ๋ค. ๋ง์ง๋ง์๋ ๊ฐ์ฅ ์ ์ฐจ์ ํจ์์ ์ธ๋ถ ๋ด์ญ์ด ๋์จ๋ค.
์ ๋ฌธ์ ๋ค์ํ ๊ธฐ์ฌ๋ก ์ด๋ค์ง๋ค. ๋๋ค์ ๊ธฐ์ฌ๊ฐ ์์ฃผ ์งง๋ค. ์ด๋ค ๊ธฐ์ฌ๋ ์กฐ๊ธ ๊ธธ๋ค. ํ ๋ฉด์ ์ฑ์ฐ๋ ๊ธฐ์ฌ๋ ๊ฑฐ์ ์๋ค.
๐ ๊ฐ๋ ์ ๋น ํ์ผ๋ก ๋ถ๋ฆฌํ๋ผโ
๊ฑฐ์ ๋ชจ๋ ์ฝ๋๋ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์์์ ์๋๋ก ์ฝํ๋ค. ๊ฐ ํ์ ์์์ด๋ ์ ์ ๋ํ๋ด๊ณ , ์ผ๋ จ์ ํ ๋ฌถ์์ ์๊ฒฐ๋ ์๊ฐ ํ๋๋ฅผ ํํํ๋ค. ์๊ฐ ์ฌ์ด์๋ ๋น ํ์ ๋ฃ์ด ๋ถ๋ฆฌํด์ผ ๋ง๋ ํ๋ค.
๋น ํ์ ์๋ก์ด ๊ฐ๋ ์ ์์ํ๋ค๋ ์๊ฐ์ ๋จ์๋ค. ์ฝ๋๋ฅผ ์ฝ์ด ๋ด๋ ค๊ฐ๋ค ๋ณด๋ฉด ๋น ํ ๋ฐ๋ก ๋ค์ ์ค์ ๋๊ธธ์ด ๋ฉ์ถ๋ค. ๋น ํ์ ๋นผ๋ฒ๋ฆฌ๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ์ด ํ์ ํ๊ฒ ๋จ์ด์ ธ ์ํธ์ฒ๋ผ ๋ณด์ธ๋ค. ๋์ ์ด์ ์ ํ๋ฆฌ๊ฒ ํ๊ณ ์ฝ๋๋ฅผ ๋ฐ๋ผ๋ณด๋ฉด ํจ๊ณผ๋ ๋์ฑ ๋ถ๋ช ํ๊ฒ ๋๋ฌ๋๋ค.
๐ ์ธ๋ก ๋ฐ์ง๋โ
์ค๋ฐ๊ฟ์ด ๊ฐ๋ ์ ๋ถ๋ฆฌํ๋ค๋ฉด ์ธ๋ก ๋ฐ์ง๋๋ ์ฐ๊ด์ฑ์ ์๋ฏธํ๋ค. ์ฆ, ์๋ก ๋ฐ์งํ ์ฝ๋ ํ์ ์ธ๋ก๋ก ๊ฐ๊น์ด ๋์ฌ์ผ ํ๋ค๋ ๋ป์ด๋ค. ๋ค์ ์์ ๋ฅผ ์ดํด๋ณด์. ์๋ฏธ ์๋ ์ฃผ์์ผ๋ก ๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ๋จ์ด๋จ๋ ค ๋์๋ค.
public class ReporterConfig {
/**
* ๋ฆฌํฌํฐ ๋ฆฌ์ค๋์ ํด๋์ค ์ด๋ฆ
*/
private String m_className;
/**
* ๋ฆฌํฌํฐ ๋ฆฌ์ค๋์ ์์ฑ
*/
private List<Property> m_properties = new ArrayList<Property>();
public void addProperty(Property property) {
m_properties.add(property);
}
}
๋ค์ ์์ ๊ฐ ํจ์ฌ ๋ ์ฝ๊ธฐ ์ฝ๋ค. ์ฝ๋๊ฐ 'ํ๋'์ ๋ค์ด์จ๋ค. ์ ์ด๋ ๋ด๊ฒ๋ ๊ทธ๋ ๋ค. ์ฒ ๋ณด๋ฉด ๋ณ์ 2๊ฐ์ ๋ฉ์๋๊ฐ 1๊ฐ์ธ ํด๋์ค๋ผ๋ ์ฌ์ค์ด ๋๋ฌ๋๋ค. ๋จธ๋ฆฌ๋ ๋์ ์์ง์ผ ํ์๊ฐ ๊ฑฐ์ ์๋ค.
public class ReporterConfig {
private String m_className;
private List<Property> m_properties = new ArrayList<Property>();
public void addProperty(Property property) {
m_properties.add(property);
}
}
๐ ์์ง ๊ฑฐ๋ฆฌโ
์์คํ ์ด ๋ฌด์์ ํ๋์ง ์ดํดํ๊ณ ์ถ์๋ฐ, ์ด ์กฐ๊ฐ ์ ์กฐ๊ฐ์ด ์ด๋์ ์ด๋์ง ์ฐพ๊ณ ๊ธฐ์ตํ๋๋ผ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์๋ชจํ๋ค.
์๋ก ๋ฐ์ ํ ๊ฐ๋
์ ์ธ๋ก๋ก ๊ฐ๊น์ด ๋ฌ์ผ ํ๋ค. ๋ฌผ๋ก ๋ ๊ฐ๋
์ด ์๋ก ๋ค๋ฅธ ํ์ผ์ ์ํ๋ค๋ฉด ๊ท์น์ด ํตํ์ง ์๋๋ค. ํ์ง๋ง ํ๋นํ ๊ทผ๊ฑฐ๊ฐ ์๋ค๋ฉด ์๋ก ๋ฐ์ ํ ๊ฐ๋
์ ํ ํ์ผ์ ์ํด์ผ ๋ง๋
ํ๋ค. ์ด๊ฒ ๋ฐ๋ก protected
๋ณ์๋ฅผ ํผํด์ผ ํ๋ ์ด์ ์ค ํ๋๋ค.
๊ฐ์ ํ์ผ์ ์ํ ์ ๋๋ก ๋ฐ์ ํ ๋ ๊ฐ๋ ์ ์ธ๋ก ๊ฑฐ๋ฆฌ๋ก ์ฐ๊ด์ฑ์ ํํํ๋ค. ์ฌ๊ธฐ์ ์ฐ๊ด์ฑ์ด๋ ํ ๊ฐ๋ ์ ์ดํดํ๋ ๋ฐ ๋ค๋ฅธ ๊ฐ๋ ์ด ์ค์ํ ์ ๋๋ค. ์ฐ๊ด์ฑ์ด ๊น์ ๋ ๊ฐ๋ ์ด ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ผ๋ฉด ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ด ์์ค ํ์ผ๊ณผ ํด๋์ค ์ฌ๊ธฐ์ ๊ธฐ ๋ค์ง๊ฒ ๋๋ค.
๋ณ์ ์ ์ธ. ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์์น์ ์ต๋ํ ๊ฐ๊น์ด ์ ์ธํ๋ค. ์ฐ๋ฆฌ๊ฐ ๋ง๋ ํจ์๋ ๋งค์ฐ ์งง์ผ๋ฏ๋ก ์ง๊ฒฝ ๋ณ์๋ ๊ฐ ํจ์ ๋งจ ์ฒ์์ ์ ์ธํ๋ค. ๋ค์์ JUnit 4.3.1์์ ๊ฐ์ ธ์จ ๋ค์ ๊ธด ํจ์๋ค.
private static void readPreferences() {
InputStream is = null;
try {
is = new FileInputStream(getPreferencesFile());
setPreferences(new Properties(getPreferences()));
getPreferences().load(is);
} catch (IOException e) {
try {
if (is != null)
is.close();
} catch (IOException e1) {
// ...
}
}
}
๋ฃจํ๋ฅผ ์ ์ดํ๋ ๋ณ์๋ ํํ ๋ฃจํ ๋ฌธ ๋ด๋ถ์ ์ ์ธํ๋ค. ๋ค์ ์์ ์ญ์ JUnit 4.3.1์์ ๊ฐ์ ธ์จ ์๊ณ ๊ท์ฌ์ด ํจ์๋ค.
public int countTestCases() {
int count = 0;
for (Test each: tests)
count += each.countTestCases();
return count;
}
์ธ์คํด์ค ๋ณ์. ๋ฐ๋ฉด, ์ธ์คํด์ค ๋ณ์๋ ํด๋์ค ๋งจ ์ฒ์์ ์ ์ธํ๋ค. ๋ณ์ ๊ฐ์ ์ธ๋ก๋ก ๊ฑฐ๋ฆฌ๋ฅผ ๋์ง ์๋๋ค. ์ ์ค๊ณํ ํด๋์ค๋ ๋ง์ (ํน์ ๋๋ค์) ํด๋์ค ๋ฉ์๋๊ฐ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์๋ ค์ง ์์น์ ์ธ์คํด์ค ๋ณ์๋ฅผ ๋ชจ์๋ค. ๋ณ์ ์ ์ธ์ ์ด๋์ ์ฐพ์์ง ๋ชจ๋๊ฐ ์๊ณ ์์ด์ผ ํ๋ค.
์ข ์ ํจ์. ํ ํจ์๊ฐ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ๋ค๋ฉด ๋ ํจ์๋ ์ธ๋ก๋ก ๊ฐ๊น์ด ๋ฐฐ์นํ๋ค. ๋ํ ๊ฐ๋ฅํ๋ค๋ฉด ํธ์ถํ๋ ํจ์๋ฅผ ํธ์ถ๋๋ ํจ์๋ณด๋ค ๋จผ์ ๋ฐฐ์นํ๋ค. ๊ทธ๋ฌ๋ฉด ํ๋ก๊ทธ๋จ์ด ์์ฐ์ค๋ฝ๊ฒ ์ฝํ๋ค. ๊ท์น์ ์ผ๊ด์ ์ผ๋ก ์ ์ฉํ๋ค๋ฉด ๋ ์๋ ๋ฐฉ๊ธ ํธ์ถํ ํจ์๊ฐ ์ ์ ํ์ ์ ์๋๋ฆฌ๋ผ๋ ์ฌ์ค์ ์์ธกํ๋ค. ํธ์ถ๋๋ ํจ์๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ฌ์์ง๋ฉฐ, ๊ทธ๋งํผ ๋ชจ๋ ์ ์ฒด์ ๊ฐ๋ ์ฑ๋ ๋์์ง๋ค.
๊ฐ๋ ์ ์ ์ฌ์ฑ. ์ด๋ค ์ฝ๋๋ ์๋ก ๋์ด๋น๊ธด๋ค. ๊ฐ๋ ์ ์ธ ์นํ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์นํ๋๊ฐ ๋์์๋ก ์ฝ๋๋ฅผ ๊ฐ๊น์ด ๋ฐฐ์นํ๋ค. ์นํ๋๊ฐ ๋์ ์์ธ์ ์ฌ๋ฌ ๊ฐ์ง๋ค. ์์ ๋ณด์๋ฏ์ด, ํ ํจ์๊ฐ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํด ์๊ธฐ๋ ์ง์ ์ ์ธ ์ข ์์ฑ์ด ํ ์๋ค. ๋ณ์์ ๊ทธ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ํจ์๋ ํ ์๋ค. ํ์ง๋ง ๊ทธ ์ธ์๋ ์นํ๋๋ฅผ ๋์ด๋ ์์ธ์ด ์๋ค. ๋น์ทํ ๋์์ ์ํํ๋ ์ผ๊ตฐ์ ํจ์๊ฐ ์ข์ ์๋ค.
public class Assert {
static public void assertTrue(String message, boolean condition) {
if (!condition)
fail(message);
}
static public void assertTrue(boolean condition) {
assertTrue(null, condition);
}
static public void assertFalse(String message, boolean condition) {
assertTrue(message, !condition);
}
static public void assertFalse(boolean condition) {
assertFalse(null, condition);
}
// ...
}
์ ํจ์๋ค์ ๊ฐ๋ ์ ์ธ ์นํ๋๊ฐ ๋งค์ฐ ๋๋ค. ๋ช ๋ช ๋ฒ์ด ๋๊ฐ๊ณ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด ์ ์ฌํ๊ณ ๊ฐ๋จํ๋ค. ์๋ก๊ฐ ์๋ก๋ฅผ ํธ์ถํ๋ ๊ด๊ณ๋ ๋ถ์ฐจ์ ์ธ ์์ธ์ด๋ค. ์ข ์์ ์ธ ๊ด๊ณ๊ฐ ์๋๋ผ๋ ๊ฐ๊น์ด ๋ฐฐ์นํ ํจ์๋ค์ด๋ค.
๐ ์ธ๋ก ์์โ
์ผ๋ฐ์ ์ผ๋ก ํจ์ ํธ์ถ ์ข ์์ฑ์ ์๋ ๋ฐฉํฅ์ผ๋ก ์ ์งํ๋ค. ๋ค์ ๋งํด, ํธ์ถ๋๋ ํจ์๋ฅผ ํธ์ถํ๋ ํจ์๋ณด๋ค ๋์ค์ ๋ฐฐ์นํ๋ค. ๊ทธ๋ฌ๋ฉด ์์ค ์ฝ๋ ๋ชจ๋์ด ๊ณ ์ฐจ์์์ ์ ์ฐจ์์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ด๋ ค๊ฐ๋ค.
์ ๋ฌธ ๊ธฐ์ฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ ๊ฐ์ฅ ๋จผ์ ํํํ๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ ํํํ ๋๋ ์ธ์ธํ ์ฌํญ์ ์ต๋ํ ๋ฐฐ์ ํ๋ค. ์ธ์ธํ ์ฌํญ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ํํ ํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ ์๊ฐ ์์ค ํ์ผ์์ ์ฒซ ํจ์ ๋ช ๊ฐ๋ง ์ฝ์ด๋ ๊ฐ๋ ์ ํ์ ํ๊ธฐ ์ฌ์์ง๋ค. ์ธ์ธํ ์ฌํญ๊น์ง ํ๊ณ ๋ค ํ์๊ฐ ์๋ค.
๐ ๊ฐ๋ก ํ์ ๋ง์ถ๊ธฐโ
์งง์ ํ์ด ๋ฐ๋์งํ๋ค. 100์๋ 120์์ ๋ฌํด๋ ๋์์ง ์๋ค. ํ์ง๋ง ๊ทธ ์ด์์ ์์งํ ์ฃผ์๋ถ์กฑ์ด๋ค.
์์ ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์คํฌ๋กคํ ํ์๊ฐ ์ ๋๋ก ์๊ฒ ์ฝ๋๋ฅผ ์งฐ๋ค. ํ์ง๋ง ์์ฆ ๋ชจ๋ํฐ๊ฐ ์์ฃผ ํฌ๋ค. ๊ฒ๋ค๊ฐ ์ ์ ํ๋ก๊ทธ๋๋จธ๋ค์ ๊ธ๊ผด ํฌ๊ธฐ๋ฅผ ์์ฐฐ ์ค์ฌ, 200์๊น์ง๋ ํ ํ๋ฉด์ ๋ค์ด๊ฐ๋ค. ๊ฐ๊ธ์ ์ด๋ฉด ๊ทธ๋ ๊ฒ ํ์ง ๋ง๊ธฐ๋ฅผ ๊ถํ๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ 120์ ์ ๋๊ฐ ํ ๊ธธ์ด๋ฅผ ์ ํํ๋ค.
๐ ๊ฐ๋ก ๊ณต๋ฐฑ๊ณผ ๋ฐ์ง๋โ
๊ฐ๋ก๋ก๋ ๊ณต๋ฐฑ์ ์ฌ์ฉํด ๋ฐ์ ํ ๊ฐ๋ ๊ณผ ๋์จํ ๊ฐ๋ ์ ํํํ๋ค. ๋ค์ ํจ์๋ฅผ ์ดํด๋ณด์.
private void measureLine(String line) {
lineCount++;
int lineSize = line.length();
totalChars += lineSize;
lineWidthHistogram.addLine(lineSize, lineCount);
recordWidestLine(lineSize);
}
ํ ๋น ์ฐ์ฐ์๋ฅผ ๊ฐ์กฐํ๋ ค๊ณ ์๋ค์ ๊ณต๋ฐฑ์ ์คฌ๋ค. ํ ๋น๋ฌธ์ ์ผ์ชฝ ์์์ ์ค๋ฅธ์ชฝ ์์๊ฐ ๋ถ๋ช ํ ๋๋๋ค. ๊ณต๋ฐฑ์ ๋ฃ์ผ๋ฉด ๋ ๊ฐ์ง ์ฃผ์ ์์๊ฐ ํ์คํ ๋๋๋ค๋ ์ฌ์ค์ด ๋์ฑ ๋ถ๋ช ํด์ง๋ค.
๋ฐ๋ฉด, ํจ์ ์ด๋ฆ๊ณผ ์ด์ด์ง๋ ๊ดํธ ์ฌ์ด์๋ ๊ณต๋ฐฑ์ ๋ฃ์ง ์์๋ค. ํจ์์ ์ธ์๋ ์๋ก ๋ฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ณต๋ฐฑ์ ๋ฃ์ผ๋ฉด ํ ๊ฐ๋ ์ด ์๋๋ผ ๋ณ๊ฐ๋ก ๋ณด์ธ๋ค. ํจ์๋ฅผ ํธ์ถํ๋ ์ฝ๋์์ ๊ดํธ ์ ์ธ์๋ ๊ณต๋ฐฑ์ผ๋ก ๋ถ๋ฆฌํ๋ค. ์ผํ๋ฅผ ๊ฐ์กฐํด ์ธ์๊ฐ ๋ณ๊ฐ๋ผ๋ ์ฌ์ค์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์๋ค.
์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ๊ฐ์กฐํ๊ธฐ ์ํด์๋ ๊ณต๋ฐฑ์ ์ฌ์ฉํ๋ค.
public class Quadratic {
public static double root1(double a, double b, double c) {
double determinant = determinant(a, b, c);
return (-b + Math.sqrt(determinant)) / (2*a);
}
}
์์์ ์ฝ๊ธฐ๊ฐ ์์ฃผ ํธํ๋ค. ์น์ ์ฌ์ด์๋ ๊ณต๋ฐฑ์ด ์๋ค. ๊ณฑ์ ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํญ ์ฌ์ด์๋ ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ๋ค. ๋ง์ ๊ณผ ๋บ์ ์ ์ฐ์ ์์๊ฐ ๊ณฑ์ ๋ณด๋ค ๋ฎ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ๊ฐ๋ก ์ ๋ ฌโ
public class FitNesseExpediter implements ResponseSender {
private Socket socket;
private InputStream input;
private OutputStream output;
private Request request;
private Response response;
private FitNesseContext context;
// ...
}
์์ ๊ฐ์ ์ ๋ ฌ์ ๋ณ๋ก ์ ์ฉํ์ง ๋ชปํ๋ค. ์ฝ๋๊ฐ ์๋ฑํ ๋ถ๋ถ์ ๊ฐ์กฐํด ์ง์ง ์๋๊ฐ ๊ฐ๋ ค์ง๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ์ธ๋ถ๋ฅผ ์ฝ๋ค ๋ณด๋ฉด ๋ณ์ ์ ํ์ ๋ฌด์ํ๊ณ ๋ณ์ ์ด๋ฆ๋ถํฐ ์ฝ๊ฒ ๋๋ค.
๊ทธ๋์ ๋๋ ๋ ์ด์ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ฅ๋ คํ์ง ์๋๋ค. ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ด, ์ ์ธ๋ฌธ๊ณผ ํ ๋น๋ฌธ์ ๋ณ๋๋ก ์ ๋ ฌํ์ง ์๋๋ค. ์ ๋ ฌํ์ง ์์ผ๋ฉด ์คํ๋ ค ์ค๋ํ ๊ฒฐํจ์ ์ฐพ๊ธฐ ์ฝ๋ค. ์ ๋ ฌ์ด ํ์ํ ์ ๋๋ก ๋ชฉ๋ก์ด ๊ธธ ๋ค๋ฉด ๋ฌธ์ ๋ ๋ชฉ๋ก ๊ธธ์ด์ง ์ ๋ ฌ ๋ถ์กฑ์ด ์๋๋ค. ์ ์ธ๋ถ๊ฐ ๊ธธ๋ค๋ฉด ํด๋์ค๋ฅผ ์ชผ๊ฐ์ผ ํ๋ค๋ ์๋ฏธ๋ค.
public class FitNesseExpediter implements ResponseSender {
private Socket socket;
private InputStream input;
private OutputStream output;
private Request request;
private Response response;
private FitNesseContext context;
// ...
}
๐ ๋ค์ฌ์ฐ๊ธฐโ
๋ฒ์(scope)๋ก ์ด๋ค์ง ๊ณ์ธต์ ํํํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ค์ฌ์ด๋ค. ๋ค์ฌ์ฐ๋ ์ ๋๋ ๊ณ์ธต์์ ์ฝ๋๊ฐ ์๋ฆฌ์ก์ ์์ค์ ๋น๋กํ๋ค. ํด๋์ค ์ ์์ฒ๋ผ ํ์ผ ์์ค์ธ ๋ฌธ์ฅ์ ๋ค์ฌ์ฐ์ง ์๋๋ค. ํด๋์ค ๋ด ๋ฉ์๋๋ ํด๋์ค๋ณด๋ค ํ ์์ค ๋ค์ฌ์ด๋ค. ๋ฉ์๋ ์ฝ๋๋ ๋ฉ์๋ ์ ์ธ๋ณด๋ค ํ ์์ค ๋ค์ฌ์ด๋ค. ๋ธ๋ก ์ฝ๋๋ ๋ธ๋ก์ ํฌํจํ๋ ์ฝ๋๋ณด๋ค ํ ์์ค ๋ค์ฌ์ด๋ค.
ํ๋ก๊ทธ๋๋จธ๋ ์ด๋ฐ ๋ค์ฌ์ฐ๊ธฐ ์ฒด๊ณ์ ํฌ๊ฒ ์์กดํ๋ค. ์ผ์ชฝ์ผ๋ก ์ฝ๋๋ฅผ ๋ง์ถฐ ์ฝ๋๊ฐ ์ํ๋ ๋ฒ์๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด ๋ฒ์์์ ์ ๋ฒ์๋ก ์ฌ๋นจ๋ฆฌ ์ด๋ํ๊ธฐ ์ฌ์์ง๋ค.
๋ค์ฌ์ฐ๊ธฐํ ํ์ผ์ ๊ตฌ์กฐ๊ฐ ํ๋์ ๋ค์ด์จ๋ค. ๋ณ์, ์์ฑ์ ํจ์, ์ ๊ทผ์ ํจ์, ๋ฉ์๋๊ฐ ๊ธ๋ฐฉ ๋ณด์ธ๋ค. ๋ฐ๋ฉด, ๋ค์ฌ์ฐ๊ธฐ ํ์ง ์์ ์ฝ๋๋ ์ด์ฌํ ๋ถ์ํ์ง ์๋ํ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค.
๋ค์ฌ์ฐ๊ธฐ ๋ฌด์ํ๊ธฐ. ๋๋ก๋ ๊ฐ๋จํ if
๋ฌธ, ์งง์ while
๋ฌธ, ์งง์ ํจ์์์ ๋ค์ฌ์ฐ๊ธฐ ๊ท์น์ ๋ฌด์ํ๊ณ ํ ์ ํน์ด ์๊ธด๋ค. ์ด๋ฐ ์ ํน์ ๋น ์ง ๋๋ง๋ค ๋๋ ํญ์ ์์ ์ผ๋ก ๋์๊ฐ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ๋ฃ๋๋ค. ์ฆ, ๋๋ ๋ค์๊ณผ ๊ฐ์ด ํ ํ์ ๋ฒ์๋ฅผ ๋ญ๋ฑ๊ทธ๋ฆฐ ์ฝ๋๋ฅผ ํผํ๋ค.
public class CommentWidget extends TextWidget {
public static final String REGEXP = "^#[^\r\n]*(?:(?:\r\n)|\n|\r)?";
public CommentWidget(ParentWidget parent, String text) {super(parent, text);}
public String render() throws Exception {return "";}
}
๋์ , ๋ค์๊ณผ ๊ฐ์ด ๋ค์ฌ์ฐ๊ธฐ๋ก ๋ฒ์๋ฅผ ์ ๋๋ก ํํํ ์ฝ๋๋ฅผ ์ ํธํ๋ค.
public class CommentWidget extends TextWidget {
public static final String REGEXP = "^#[^\r\n]*(?:(?:\r\n)|\n|\r)?";
public CommentWidget(ParentWidget parent, String text) {
super(parent, text);
}
public String render() throws Exception {
return "";
}
}
๐ ๊ฐ์ง ๋ฒ์โ
๋๋ก๋ ๋น while
๋ฌธ์ด๋ for
๋ฌธ์ ์ ํ๋ค. ๋๋ ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ์ข์ํ์ง ์๊ธฐ์ ๊ฐ๋ฅํ ํ ํผํ๋ ค ์ ์ด๋ค. ํผํ์ง ๋ชปํ ๋๋ ๋น ๋ธ๋ก์ ์ฌ๋ฐ๋ก ๋ค์ฌ์ฐ๊ณ ๊ดํธ๋ก ๊ฐ์ผ๋ค. ์ง๊ธ๊น์ง ๋๋ while
๋ฌธ ๋์ ์ธ๋ฏธ์ฝ๋ก ํ๋๋ฅผ ์ด์ง ๋ง๋ถ์ธ ์ฝ๋๋ก ์์์ด ๊ณจํ์ ๋จน์๋ค. ์ธ๋ฏธ์ฝ๋ก ์ ์ ํ์๋ค ์ ๋๋ก ๋ค์ฌ์จ์ ๋ฃ์ด์ค๋ค. ๊ทธ๋ ๊ฒ ํ์ง ์์ผ๋ฉด ๋์ ๋์ง ์๋๋ค.
while (dis.read(buf, 0, readBufferSize) != -1)
;
๐ ํ ๊ท์นโ
ํ๋ก๊ทธ๋๋จธ๋ผ๋ฉด ๊ฐ์ ์ ํธํ๋ ๊ท์น์ด ์๋ค. ํ์ง๋ง ํ์ ์ํ๋ค๋ฉด ์์ ์ด ์ ํธํด์ผ ํ ๊ท์น์ ๋ฐ๋ก ํ ๊ท์น์ด๋ค. ํ์ ํ ๊ฐ์ง ๊ท์น์ ํฉ์ํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ํ์์ ๊ทธ ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค. ๊ทธ๋์ผ ์ํํธ์จ์ด๊ฐ ์ผ๊ด์ ์ธ ์คํ์ผ์ ๋ณด์ธ๋ค. ๊ฐ๊ฐ์ธ์ด ๋ฐ๋ก๊ตญ๋ฐฅ์ฒ๋ผ ๋ง๋๋ก ์ง๋๋ ์ฝ๋๋ ํผํด์ผ ํ๋ค.
์ข์ ์ํํธ์จ์ด ์์คํ ์ ์ฝ๊ธฐ ์ฌ์ด ๋ฌธ์๋ก ์ด๋ค์ง๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ๊ธฐ ๋ฐ๋๋ค. ์คํ์ผ์ ์ผ๊ด์ ์ด๊ณ ๋งค๋๋ฌ์์ผ ํ๋ค. ํ ์์ค ํ์ผ์์ ๋ดค๋ ํ์์ด ๋ค๋ฅธ ์์ค ํ์ผ์๋ ์ฐ์ด๋ฆฌ๋ผ๋ ์ ๋ขฐ๊ฐ์ ๋ ์์๊ฒ ์ค์ผ ํ๋ค. ์จ๊ฐ ์คํ์ผ์ ๋ค์์ด ์์ค ์ฝ๋๋ฅผ ํ์ ์ด์์ผ๋ก ๋ณต์กํ๊ฒ ๋ง๋๋ ์ค์๋ ๋ฐ๋์ ํผํ๋ค.