๐ญ Chapter 3: ํจ์
๐ ์๊ฒ ๋ง๋ค์ด๋ผ!โ
ํจ์๋ฅผ ๋ง๋๋ ์ฒซ์งธ ๊ท์น์ "์๊ฒ!" ๋ค. ํจ์๋ฅผ ๋ง๋๋ ๋์งธ ๊ท์น์ "๋ ์๊ฒ!" ๋ค.
์ง๊ธ๊น์ง ๊ฒฝํ์ ๋ฐํ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ค๋ ์ํ์ฐฉ์ค๋ฅผ ๋ฐํ์ผ๋ก ๋๋ ์์ ํจ์๊ฐ ์ข ๋ค๊ณ ํ์ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ผ๋ง๋ ์งง์์ผ ์ข์๊น?
๐ ๋ธ๋ก๊ณผ ๋ค์ฌ์ฐ๊ธฐโ
๋ค์ ๋งํด, if
๋ฌธ / else
๋ฌธ / while
๋ฌธ ๋ฑ์ ๋ค์ด๊ฐ๋ ๋ธ๋ก์ ํ ์ค์ด์ด์ผ ํ๋ค๋ ์๋ฏธ๋ค. ๋๊ฒ ๊ฑฐ๊ธฐ์ ํจ์๋ฅผ ํธ์ถํ๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐ๊นฅ์ ๊ฐ์ธ๋ ํจ์๊ฐ ์์์ง ๋ฟ ์๋๋ผ, ๋ธ๋ก ์์์ ํธ์ถํ๋ ํจ์ ์ด๋ฆ์ ์ ์ ํ ์ง๋๋ค๋ฉด, ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ๋ ์ฌ์์ง๋ค.
์ด ๋ง์ ์ค์ฒฉ ๊ตฌ์กฐ๊ฐ ์๊ธธ๋งํผ ํจ์๊ฐ ์ปค์ ธ์๋ ์ ๋๋ค๋ ๋ป์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํจ์์์ ๋ค์ฌ์ฐ๊ธฐ ์์ค์ 1๋จ์ด๋ 2๋จ์ ๋์ด์๋ฉด ์ ๋๋ค. ๋น์ฐํ ๋ง์ด์ง๋ง, ๊ทธ๋์ผ ํจ์๋ฅผ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง๋ค.
๐ ํ ๊ฐ์ง๋ง ํด๋ผ!โ
๋ค์์ ์ง๋ 30์ฌ๋ ๋์ ์ฌ๋ฌ ๊ฐ์ง ๋ค์ํ ํฌํ์ผ๋ก ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ ์ฃผ์ด์ง ์ถฉ๊ณ ๋ค.
ํจ์๋ ํ ๊ฐ์ง๋ฅผ ํด์ผ ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ฅผ ์ ํด์ผ ํ๋ค. ๊ทธ ํ ๊ฐ์ง๋ง์ ํด์ผ ํ๋ค.
์ด ์ถฉ๊ณ ์์ ๋ฌธ์ ๋ผ๋ฉด ๊ทธ ํ ๊ฐ์ง๊ฐ ๋ฌด์์ธ์ง ์๊ธฐ๊ฐ ์ด๋ ต๋ค๋ ์ ์ด๋ค.
public static String renderPageWithSetupsAndTeardowns(
PageData pageData, boolean isSuite) throws Exception {
if (isTestPage(pageData))
includeSetupAndTeardownPages(pageData, isSuite);
return pageData.getHtml();
}
์ ์ฝ๋์์ ์ธ ๊ฐ์ง๋ฅผ ํ๋ค๊ณ ์ฃผ์ฅํ ์๋ ์๋ค.
- ํ์ด์ง๊ฐ ํ ์คํธ ํ์ด์ง์ธ์ง ํ๋จํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ค์ ํ์ด์ง์ ํด์ฒด ํ์ด์ง๋ฅผ ๋ฃ๋๋ค.
- ํ์ด์ง๋ฅผ HTML๋ก ๋ ๋๋งํ๋ค.
์์์ ์ธ๊ธํ๋ ์ธ ๋จ๊ณ๋ ์ง์ ๋ ํจ์ ์ด๋ฆ ์๋์ ์ถ์ํ ์์ค์ด ํ๋๋ค. ํจ์๋ ๊ฐ๋จํ TO๋ฌธ๋จ์ผ๋ก ๊ธฐ์ ํ ์ ์๋ค.
TO RenderPageWithSetupsAndTeardowns, ํ์ด์ง๊ฐ ํ ์คํธ ํ์ด์ง์ธ์ง ํ์ธํ ํ ํ ์คํธ ํ์ด์ง๋ผ๋ฉด ์ค์ ํ์ด์ง์ ํด์ฒด ํ์ด์ง๋ฅผ ๋ฃ๋๋ค. ํ ์คํธ ํ์ด์ง๋ ์๋๋ ํ์ด์ง๋ฅผ HTML๋ก ๋ ๋๋งํ๋ค.
์ง์ ๋ ํจ์ ์ด๋ฆ ์๋์์ ์ถ์ํ ์์ค์ด ํ๋์ธ ๋จ๊ณ๋ง ์ํํ๋ค๋ฉด ๊ทธ ํจ์๋ ํ ๊ฐ์ง ์์ ๋ง ํ๋ค. ์ด์จ๊ฑฐ๋ ์ฐ๋ฆฌ๊ฐ ํจ์๋ฅผ ๋ง๋๋ ์ด์ ๋ ํฐ ๊ฐ๋ ์ (๋ค์ ๋งํด, ํจ์ ์ด๋ฆ์) ๋ค์ ์ถ์ํ ์์ค์์ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋ ์ํํ๊ธฐ ์ํด์๊ฐ ์๋๋๊ฐ.
์๋ฏธ๋ฅผ ์ ์งํ๋ฉด์ ์ ์ฝ๋๋ฅผ ๋ ์ด์ ์ค์ด๊ธฐ๋ ๋ถ๊ฐ๋ฅํ๋ค. if
๋ฌธ์ includeSetupsTeardownsIfTestPate
๋ผ๋ ํจ์๋ก ๋ง๋ ๋ค๋ฉด ๋๊ฐ์ ๋ด์ฉ์ ๋ค๋ฅด๊ฒ ํํํ ๋ฟ ์ถ์ํ ์์ค์ ๋ฐ๋์ง ์๋๋ค.
๋ฐ๋ผ์, ํจ์๊ฐ ํ ๊ฐ์ง๋ง ํ๋์ง ํ๋จํ๋ ๋ฐฉ๋ฒ์ด ํ๋ ๋ ์๋ค. ๋จ์ํ ๋ค๋ฅธ ํํ์ด ์๋๋ผ ์๋ฏธ ์๋ ์ด๋ฆ์ผ๋ก ๋ค๋ฅธ ํจ์๋ฅผ ์ถ์ถํ ์ ์๋ค๋ฉด ๊ทธ ํจ์๋ ์ฌ๋ฌ ์์ ์ ํ๋ ์ ์ด๋ค.
๐ ํจ์ ๋น ์ถ์ํ ์์ค์ ํ๋๋ก!โ
ํจ์๊ฐ ํ์คํ ํ ๊ฐ์ง ์์ ๋ง ํ๋ ค๋ฉด ํจ์ ๋ด ๋ชจ๋ ๋ฌธ์ฅ์ ์ถ์ํ ์์ค์ด ๋์ผํด์ผ ํ๋ค.
ํ ํจ์ ๋ด์ ์ถ์ํ ์์ค์ ์์ผ๋ฉด ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ด ํท๊ฐ๋ฆฐ๋ค. ํน์ ํํ์ด ๊ทผ๋ณธ ๊ฐ๋ ์ธ์ง ์๋๋ฉด ์ธ๋ถ์ฌํญ์ธ์ง ๊ตฌ๋ถํ๊ธฐ ์ด๋ ค์ด ํ์ด๋ค. ํ์ง๋ง ๋ฌธ์ ๋ ์ด ์ ๋๋ก ๊ทธ์น์ง ์๋๋ค. ๊ทผ๋ณธ ๊ฐ๋ ๊ณผ ์ธ๋ถ์ฌํญ์ด ๋ค์๊ธฐ ์์ํ๋ฉด, ๊นจ์ด์ง ์ฐฝ๋ฌธ์ฒ๋ผ ์ฌ๋๋ค์ด ํจ์์ ์ธ๋ถ์ฌํญ์ ์ ์ ๋ ์ถ๊ฐํ๋ค.
๐ ์์์ ์๋๋ก ์ฝ๋ ์ฝ๊ธฐ: ๋ด๋ ค๊ฐ๊ธฐ ๊ท์นโ
์ฝ๋๋ ์์์ ์๋๋ก ์ด์ผ๊ธฐ์ฒ๋ผ ์ฝํ์ผ ์ข๋ค. ํ ํจ์ ๋ค์์๋ ์ถ์ํ ์์ค์ด ํ ๋จ๊ณ ๋ฎ์ ํจ์๊ฐ ์จ๋ค. ์ฆ, ์์์ ์๋๋ก ํ๋ก๊ทธ๋จ์ ์ฝ์ผ๋ฉด ํจ์ ์ถ์ํ ์์ค์ด ํ ๋ฒ์ ํ ๋จ๊ณ์ฉ ๋ฎ์์ง๋ค. ๋๋ ์ด๊ฒ์ ๋ด๋ ค๊ฐ๊ธฐ ๊ท์น์ด๋ผ ๋ถ๋ฅธ๋ค.
๋ค๋ฅด๊ฒ ํํํ๋ฉด ์ผ๋ จ์ TO ๋ฌธ๋จ์ ์ฝ๋ฏ์ด ํ๋ก๊ทธ๋จ์ด ์ฝํ์ผ ํ๋ค๋ ์๋ฏธ๋ค. ์ฌ๊ธฐ์ ๊ฐ TO ๋ฌธ๋จ์ ํ์ฌ ์ถ์ํ ์์ค์ ์ค๋ช ํ๋ฉฐ ์ด์ด์ง๋ ์๋ ๋จ๊ณ TO ๋ฌธ๋จ์ ์ฐธ๊ณ ํ๋ค.
- TO ์ค์ ํ์ด์ง์ ํด์ฒด ํ์ด์ง๋ฅผ ํฌํจํ๋ ค๋ฉด, ์ค์ ํ์ด์ง๋ฅผ ํฌํจํ๊ณ , ํ ์คํธ ํ์ด์ง ๋ด์ฉ์ ํฌํจํ๊ณ , ํด์ฒด ํ์ด์ง๋ฅผ ํฌํจํ๋ค.
- TO ์ค์ ํ์ด์ง๋ฅผ ํฌํจํ๋ ค๋ฉด, ์ํธ์ด๋ฉด ์ํธ ์ค์ ํ์ด์ง๋ฅผ ํฌํจํ ํ ์ผ๋ฐ ์ค์ ํ์ด์ง๋ฅผ ํฌํจํ๋ค.
- TO ์ํธ ์ค์ ํ์ด์ง๋ฅผ ํฌํจํ๋ ค๋ฉด, ๋ถ๋ชจ ๊ณ์ธต์์ "SuiteSetUp" ํ์ด์ง๋ฅผ ์ฐพ์
include
๋ฌธ๊ณผ ํ์ด์ง ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ๋ค.- TO ๋ถ๋ชจ ๊ณ์ธต์ ๊ฒ์ํ๋ ค๋ฉด, ...
ํ์ง๋ง ์ถ์ํ ์์ค์ด ํ๋์ธ ํจ์๋ฅผ ๊ตฌํํ๊ธฐ๋ ์ฝ์ง ์๋ค. ๋ง์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ณค๋์ ๊ฒช๋๋ค. ๊ทธ๋ ์ง๋ง ๋งค์ฐ ์ค์ํ ๊ท์น์ด๋ค. ํต์ฌ์ ์งง์ผ๋ฉด์๋ "ํ ๊ฐ์ง"๋ง ํ๋ ํจ์๋ค. ์์์ ์๋๋ก TO ๋ฌธ๋จ์ ์ฝ์ด๋ด๋ ค ๊ฐ๋ฏ์ด ์ฝ๋๋ฅผ ๊ตฌํํ๋ฉด ์ถ์ํ ์์ค์ ์ผ๊ด๋๊ฒ ์ ์งํ๊ธฐ๊ฐ ์ฌ์์ง๋ค.
๐ Switch ๋ฌธโ
switch
๋ฌธ์ ์๊ฒ ๋ง๋ค๊ธฐ ์ด๋ ต๋ค. case
๋ถ๊ธฐ๊ฐ ๋จ ๋ ๊ฐ์ธ switch
๋ฌธ๋ ๋ด ์ทจ์์๋ ๋๋ฌด ๊ธธ๋ฉฐ, ๋จ์ผ ๋ธ๋ก์ด๋ ํจ์๋ฅผ ์ ํธํ๋ค. ๋ํ "ํ ๊ฐ์ง" ์์
๋ง ํ๋ switch
๋ฌธ๋ ๋ง๋ค๊ธฐ ์ด๋ ต๋ค. ๋ณธ์ง์ ์ผ๋ก switch
๋ฌธ์ N๊ฐ์ง๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ถํํ๊ฒ๋ switch
๋ฌธ์ ์์ ํ ํผํ ๋ฐฉ๋ฒ์ ์๋ค. ๋ฌผ๋ก ๋คํ์ฑ(polymorphism)์ ์ด์ฉํ๋ค.
public Money calculatePay(Employee e) throws InvalidEmployeeType {
switch (e.type) {
case COMMISSIONED:
return calculateCommissionedPay(e);
case HOURLY:
return calculateHourlyPay(e);
case SALARIED:
return calculateSalariedPay(e);
default:
throw new InvalidEmployeeType(e.type);
}
}
์ ํจ์์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค. ์ฒซ์งธ, ํจ์๊ฐ ๊ธธ๋ค. ์ ์ง์ ์ ํ์ ์ถ๊ฐํ๋ฉด ๋ ๊ธธ์ด์ง๋ค. ๋์งธ, "ํ ๊ฐ์ง" ์์ ๋ง ์ํํ์ง ์๋๋ค. ์ธ์งธ, SRP(Single Responsibility Principle, ๋จ์ผ ์ฑ ์ ์์น)๋ฅผ ์๋ฐํ๋ค. ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ด์ ๊ฐ ์ฌ๋ฟ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์งธ, OCP(Open Closed Principle, ๊ฐ๋ฐฉ-ํ์ ์์น)๋ฅผ ์๋ฐํ๋ค. ์ ์ง์ ์ ํ์ ์ถ๊ฐํ ๋๋ง๋ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์๋ง ๊ฐ์ฅ ์ฌ๊ฐํ ๋ฌธ์ ๋ผ๋ฉด ์ ํจ์๊ฐ ๊ตฌ์กฐ๊ฐ ๋์ผํ ํจ์๊ฐ ๋ฌดํ์ ์กด์ฌํ๋ค๋ ์ฌ์ค์ด๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ํจ์๊ฐ ๊ฐ๋ฅํ๋ค.
isPayDay(Employee e, Date date);
ํน์
deliverPay(Employee e, Money pay);
๊ฐ๋ฅ์ฑ์ ๋ฌดํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋๊ฐ ๋๊ฐ์ด ์ ํดํ ๊ตฌ์กฐ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ฝ๋๊ฐ ๋ค์ ์ฝ๋๋ค. ๋ฌธ์ ์ถ์ ํฉํ ๋ฆฌ(ABSTRACT FACTORY)์ ๊ฝ๊ฝ ์จ๊ธด๋ค. ์๋ฌด์๊ฒ๋ ๋ณด์ฌ์ฃผ์ง ์๋๋ค. ํฉํ ๋ฆฌ๋ switch
๋ฌธ์ ์ฌ์นํด ์ ์ ํ Employee
ํ์ ํด๋์ค๋ฅผ ์ธ์คํด์ค๋ก ์์ฑํ๋ค. calculatePay
, isPayDay
, deliverPay
๋ฑ๊ณผ ๊ฐ์ ํจ์๋ Employee
์ธํฐํ์ด์ค๋ฅผ ๊ฑฐ์ณ ํธ์ถ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋คํ์ฑ์ผ๋ก ์ธํด ์ค์ ํ์ ํด๋์ค์ ํจ์๊ฐ ์คํ๋๋ค.
public abstract class Employee {
public abstract boolean isPayDay();
public abstract Money calculatePay();
public abstract void deliverPay(Money pay);
}
public interface EmployeeFactory {
public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType;
}
public class EmployeeFactoryImpl implements EmployeeFactory {
public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType {
switch (r.type) {
case COMMISSIONED:
return new CommissionedEmployee(r);
case HOURLY:
return new HourlyEmployee(r);
case SALARIED:
return new SalariedEmployee(r);
default:
throw new InvalidEmployeeType(r.type);
}
}
}
์ผ๋ฐ์ ์ผ๋ก ๋๋ switch
๋ฌธ์ ๋จ ํ ๋ฒ๋ง ์ฐธ์์ค๋ค. ๋คํ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฝ๋ ์์์๋ค. ์ด๋ ๊ฒ ์์ ๊ด๊ณ๋ก ์จ๊ธด ํ์๋ ์ ๋๋ก ๋ค๋ฅธ ์ฝ๋์ ๋
ธ์ถํ์ง ์๋๋ค. ๋ฌผ๋ก ๋ถ๊ฐํผํ ์ํฉ๋ ์๊ธด๋ค. ๋ ์์ ๋ ์ด ๊ท์น์ ์๋ฐํ ๊ฒฝํ์ด ์ฌ๋ฌ ๋ฒ ์๋ค.
๐ ์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ!โ
์ข์ ์ด๋ฆ์ด ์ฃผ๋ ๊ฐ์น๋ ์๋ฌด๋ฆฌ ๊ฐ์กฐํด๋ ์ง๋์น์ง ์๋ค. ํ ๊ฐ์ง๋ง ํ๋ ์์ ํจ์์ ์ข์ ์ด๋ฆ์ ๋ถ์ธ๋ค๋ฉด ์ด๋ฐ ์์น์ ๋ฌ์ฑํจ์ ์์ด ์ด๋ฏธ ์ ๋ฐ์ ์ฑ๊ณตํ๋ค. ํจ์๊ฐ ์๊ณ ๋จ์ํ ์๋ก ์์ ์ ์ธ ์ด๋ฆ์ ๊ณ ๋ฅด๊ธฐ๋ ์ฌ์์ง๋ค.
์ด๋ฆ์ด ๊ธธ์ด๋ ๊ด์ฐฎ๋ค. ๊ฒ๋จน์ ํ์์๋ค. ๊ธธ๊ณ ์์ ์ ์ธ ์ด๋ฆ์ด ์งง๊ณ ์ด๋ ค์ด ์ด๋ฆ๋ณด๋ค ์ข๋ค. ๊ธธ๊ณ ์์ ์ ์ธ ์ด๋ฆ์ด ๊ธธ๊ณ ์์ ์ ์ธ ์ฃผ์๋ณด๋ค ์ข๋ค. ํจ์ ์ด๋ฆ์ ์ ํ ๋๋ ์ฌ๋ฌ ๋จ์ด๊ฐ ์ฝ๊ฒ ์ฝํ๋ ๋ช ๋ช ๋ฒ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ ๋ค์, ์ฌ๋ฌ ๋จ์ด๋ฅผ ์ฌ์ฉํด ํจ์ ๊ธฐ๋ฅ์ ์ ํํํ๋ ์ด๋ฆ์ ์ ํํ๋ค.
์ด๋ฆ์ ์ ํ๋๋ผ ์๊ฐ์ ๋ค์ฌ๋ ๊ด์ฐฎ๋ค. ์ด๋ฐ์ ๋ฐ ์ด๋ฆ์ ๋ฃ์ด ์ฝ๋๋ฅผ ์ฝ์ด๋ณด๋ฉด ๋ ์ข๋ค. ์ด๋ฐ์ ๋ฐ ์ด๋ฆ์ ์๋ํ ํ ์ต๋ํ ์์ ์ ์ธ ์ด๋ฆ์ ๊ณจ๋ผ๋ ์ข๊ฒ ๋ค.
์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์ ๋จธ๋ฆฟ์์์๋ ์ค๊ณ๊ฐ ๋๋ ทํด์ง๋ฏ๋ก ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ฌ์์ง๋ค. ์ข์ ์ด๋ฆ์ ๊ณ ๋ฅธ ํ ์ฝ๋๋ฅผ ๋ ์ข๊ฒ ์ฌ๊ตฌ์ฑํ๋ ์ฌ๋ก๋ ์์ง ์๋ค.
์ด๋ฆ์ ๋ถ์ผ ๋๋ ์ผ๊ด์ฑ์ด ์์ด์ผ ํ๋ค. ๋ชจ๋ ๋ด์์ ํจ์ ์ด๋ฆ์ ๊ฐ์ ๋ฌธ๊ตฌ, ๋ช
์ฌ, ๋์ฌ๋ฅผ ์ฌ์ฉํ๋ค. includeSetupAndTeardownPages
, includeSetupPages
, includeSuiteSetupPage
, includeSetupPage
๋ฑ์ด ์ข์ ์๋ค. ๋ฌธ์ฒด๊ฐ ๋น์ทํ๋ฉด ์ด์ผ๊ธฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ด๊ฐ๊ธฐ๋ ์ฌ์์ง๋ค.
๐ ํจ์ ์ธ์โ
ํจ์์์ ์ด์์ ์ธ ์ธ์ ๊ฐ์๋ 0๊ฐ(๋ฌดํญ)๋ค. ๋ค์์ 1๊ฐ(๋จํญ)๊ณ , ๋ค์์ 2๊ฐ(์ดํญ)๋ค. 3๊ฐ(์ผํญ)๋ ๊ฐ๋ฅํ ํผํ๋ ํธ์ด ์ข๋ค. 4๊ฐ ์ด์(๋คํญ)์ ํน๋ณํ ์ด์ ๊ฐ ํ์ํ๋ค. ํน๋ณํ ์ด์ ๊ฐ ์์ด๋ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
์ธ์๋ ๊ฐ๋
์ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ ๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ์ฐ๋ฆฌ ์์ ์์ ์ธ์๋ฅผ ๊ฑฐ์ ์์ค ์ด์ ๋ค. ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์๊ฒ๋ includeSetupPageInfo(newPageContent)
๋ณด๋ค includeSetupPage()
๊ฐ ์ดํดํ๊ธฐ ๋ ์ฝ๋ค. includeSetupPageInto(newPageContent)
๋ ํจ์ ์ด๋ฆ๊ณผ ์ธ์ ์ฌ์ด์ ์ถ์ํ ์์ค์ด ๋ค๋ฅด๋ค. ๊ฒ๋ค๊ฐ ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ด ํ ์์ ์์ ๋ณ๋ก ์ค์ํ์ง ์์ ์ธ๋ถ์ฌํญ, ์ฆ StringBuffer
๋ฅผ ์์์ผ ํ๋ค.
ํ ์คํธ ๊ด์ ์์ ๋ณด๋ฉด ์ธ์๋ ๋ ์ด๋ ต๋ค. ๊ฐ๊ฐ์ง ์ธ์ ์กฐํฉ์ผ๋ก ํจ์๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ค๊ณ ์์ํด๋ณด๋ผ! ์ธ์๊ฐ ์๋ค๋ฉด ๊ฐ๋จํ๋ค. ์ธ์๊ฐ ํ๋๋ผ๋ ๊ด์ฐฎ๋ค. ์ธ์๊ฐ 2๊ฐ๋ฉด ์กฐ๊ธ ๋ณต์กํด์ง๋ค. ์ธ์๊ฐ 3๊ฐ๋ฅผ ๋์ด๊ฐ๋ฉด ์ธ์๋ง๋ค ์ ํจํ ๊ฐ์ผ๋ก ๋ชจ๋ ์กฐํฉ์ ๊ตฌ์ฑํด ํ ์คํธํ๊ธฐ๊ฐ ์๋นํ ๋ถ๋ด์ค๋ฌ์์ง๋ค.
์ถ๋ ฅ ์ธ์๋ ์ ๋ ฅ ์ธ์๋ณด๋ค ์ดํดํ๊ธฐ ์ด๋ ต๋ค. ํํ ์ฐ๋ฆฌ๋ ํจ์์๋ค ์ธ์๋ก ์ ๋ ฅ์ ๋๊ธฐ๊ณ ๋ฐํ๊ฐ์ผ๋ก ์ถ๋ ฅ์ ๋ฐ๋๋ค๋ ๊ฐ๋ ์ ์ต์ํ๋ค. ๋๊ฒ ํจ์์์ ์ธ์๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ผ๋ฆฌ๋ผ ๊ธฐ๋ํ์ง ์๋๋ค. ๊ทธ๋์ ์ถ๋ ฅ ์ธ์๋ ๋ ์๊ฐ ํ๋ฅ์ง๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฐจ ํ์ธํ๊ฒ ๋ง๋ ๋ค.
์ต์ ์ ์
๋ ฅ ์ธ์๊ฐ ์๋ ๊ฒฝ์ฐ์ด๋ฉฐ, ์ฐจ์ ์ ์
๋ ฅ ์ธ์๊ฐ 1๊ฐ๋ฟ์ธ ๊ฒฝ์ฐ๋ค. SetupTeardownIncluder.render(pageData)
๋ ์ดํดํ๊ธฐ ์์ฃผ ์ฝ๋ค. pageData
๊ฐ์ฒด ๋ด์ฉ์ ๋ ๋๋งํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
๐ ๋ง์ด ์ฐ๋ ๋จํญ ํ์โ
ํจ์์ ์ธ์ 1๊ฐ๋ฅผ ๋๊ธฐ๋ ์ด์ ๋ก ๊ฐ์ฅ ํํ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ง๋ค. ํ๋๋ ์ธ์์ ์ง๋ฌธ์ ๋์ง๋ ๊ฒฝ์ฐ๋ค. ๋ค๋ฅธ ํ๋๋ ์ธ์๋ฅผ ๋ญ๊ฐ๋ก ๋ณํํด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ๋ค. ์ด๋ค ๋ ๊ฒฝ์ฐ๋ ๋ ์๊ฐ ๋น์ฐํ๊ฒ ๋ฐ์๋ค์ด๋ค. ํจ์ ์ด๋ฆ์ ์ง์ ๋๋ ๋ ๊ฒฝ์ฐ ๋ถ๋ช ํ ๊ตฌ๋ถํ๋ค. ๋ํ ์ธ์ ๋ ์ผ๊ด์ ์ธ ๋ฐฉ์์ผ๋ก ๋ ํ์์ ์ฌ์ฉํ๋ค.
๋ค์ ๋๋ฌผ๊ฒ ์ฌ์ฉํ์ง๋ง ๊ทธ๋๋ ์์ฃผ ์ ์ฉํ ๋จํญ ํจ์ ํ์์ด ์ด๋ฒคํธ๋ค. ์ด๋ฒคํธ ํจ์๋ ์ ๋ ฅ ์ธ์๋ง ์๋ค. ์ถ๋ ฅ ์ธ์๋ ์๋ค. ํ๋ก๊ทธ๋จ์ ํจ์ ํธ์ถ์ ์ด๋ฒคํธ๋ก ํด์ํด ์ ๋ ฅ ์ธ์๋ก ์์คํ ์ํ๋ฅผ ๋ฐ๊พผ๋ค. ์ด๋ฒคํธ ํจ์๋ ์กฐ์ฌํด์ ์ฌ์ฉํ๋ค. ์ด๋ฒคํธ๋ผ๋ ์ฌ์ค์ด ์ฝ๋์ ๋ช ํํ ๋๋ฌ๋์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด๋ฆ๊ณผ ๋ฌธ๋งฅ์ ์ฃผ์ํด์ ์ ํํ๋ค.
์ง๊ธ๊น์ง ์ค๋ช ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋จํญ ํจ์๋ ๊ฐ๊ธ์ ํผํ๋ค.
๐ ํ๋๊ทธ ์ธ์โ
ํ๋๊ทธ ์ธ์๋ ์ถํ๋ค. ํจ์๋ก ๋ถ์ธ ๊ฐ์ ๋๊ธฐ๋ ๊ด๋ก๋ ์ ๋ง๋ก ๋์งํ๋ค. ์๋๊ณ ? ํจ์๊ฐ ํ๊บผ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง ์ผ์ ์ฒ๋ฆฌํ๋ค๊ณ ๋๋๊ณ ๊ณตํํ๋ ์ ์ด๋๊น! ํ๋๊ทธ๊ฐ ์ฐธ์ด๋ฉด ์ด๊ฑธ ํด๊ฒฐํ๊ณ ๊ฑฐ์ง์ด๋ฉด ์ ๊ฑธ ํ๋ค๋ ๋ง์ด๋๊น!
๐ ์ดํญ ํจ์โ
์ธ์๊ฐ 2๊ฐ์ธ ํจ์๋ ์ธ์๊ฐ 1๊ฐ์ธ ํจ์๋ณด๋ค ์ดํดํ๊ธฐ ์ด๋ ต๋ค. ์๋ฅผ ๋ค์ด, writeField(name)
๋ writeField(outputStream, name)
๋ณด๋ค ์ด์ ํ๊ธฐ ์ฝ๋ค. ๋ ๋ค ์๋ฏธ๋ ๋ช
๋ฐฑํ์ง๋ง ์ ์๊ฐ ๋ ์ฝ๊ฒ ์ฝํ๊ณ ๋ ๋นจ๋ฆฌ ์ดํด ๋๋ค. ํ์๋ ์ ์ ์ฃผ์ถคํ๋ฉฐ ์ฒซ ์ธ์๋ฅผ ๋ฌด์ํด์ผ ํ๋ค๋ ์ฌ์ค์ ๊นจ๋ซ๋ ์๊ฐ์ด ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก ๊ทธ ์ฌ์ค์ด ๊ฒฐ๊ตญ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. ์๋๊ณ ? ์ด๋ค ์ฝ๋๋ ์ ๋๋ก ๋ฌด์ํ๋ฉด ์๋๋๊น. ๋ฌด์ํ ์ฝ๋์ ์ค๋ฅ๊ฐ ์จ์ด๋๋๊น.
์ดํญ ํจ์๊ฐ ๋ฌด์กฐ๊ฑด ๋์๋ค๋ ์๋ฆฌ๋ ์๋๋ค. ํ๋ก๊ทธ๋จ์ ์ง๋ค๋ณด๋ฉด ๋ถ๊ฐํผํ ๊ฒฝ์ฐ๋ ์๊ธด๋ค. ํ์ง๋ง ๊ทธ๋งํผ ์ํ์ด ๋ฐ๋ฅธ๋ค๋ ์ฌ์ค์ ์ดํดํ๊ณ ๊ฐ๋ฅํ๋ฉด ๋จํญ ํจ์๋ก ๋ฐ๊พธ๋๋ก ์ ์จ์ผ ํ๋ค.
๐ ์ผํญ ํจ์โ
์ธ์๊ฐ 3๊ฐ์ธ ํจ์๋ ์ธ์๊ฐ 2๊ฐ์ธ ํจ์๋ณด๋ค ํจ์ฌ ๋ ์ดํดํ๊ธฐ ์ด๋ ต๋ค. ์์, ์ฃผ์ถค, ๋ฌด์๋ก ์ผ๊ธฐ๋๋ ๋ฌธ์ ๊ฐ ๋ ๋ฐฐ ์ด์ ๋์ด๋๋ค. ๊ทธ๋์ ์ผํญ ํจ์๋ฅผ ๋ง๋ค ๋๋ ์ ์คํ ๊ณ ๋ คํ๋ผ ๊ถ๊ณ ํ๋ค.
๐ ์ธ์ ๊ฐ์ฒดโ
์ธ์๊ฐ 2-3๊ฐ ํ์ํ๋ค๋ฉด ์ผ๋ถ ๋ ์์ ์ธ ํด๋์ค ๋ณ์๋ก ์ ์ธํ ๊ฐ๋ฅ์ฑ์ ์ง์ด๋ณธ๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ๋ ํจ์๋ฅผ ์ดํด๋ณด์.
Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);
๊ฐ์ฒด๋ฅผ ์์ฑํด ์ธ์๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ด ๋์์์ด๋ผ ์ฌ๊ฒจ์ง์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ๊ทธ๋ ์ง ์๋ค. ์ ์์ ์์ x์ y๋ฅผ ๋ฌถ์๋ฏ์ด ๋ณ์๋ฅผ ๋ฌถ์ด ๋๊ธฐ๋ ค๋ฉด ์ด๋ฆ์ด ๋ถ์ฌ์ผ ํ๋ฏ๋ก ๊ฒฐ๊ตญ์ ๊ฐ๋ ์ ํํํ๊ฒ ๋๋ค.
๐ ์ธ์ ๋ชฉ๋กโ
๋๋ก๋ ์ธ์ ๊ฐ์๊ฐ ๊ฐ๋ณ์ ์ธ ํจ์๋ ํ์ํ๋ค. String.format
๋ฉ์๋๊ฐ ์ข์ ์๋ค.
String.format("%s worked %.2f hours.", name, hours);
์ ์์ ์ฒ๋ผ ๊ฐ๋ณ ์ธ์ ์ ๋ถ๋ฅผ ๋๋ฑํ๊ฒ ์ทจ๊ธํ๋ฉด List
ํ ์ธ์ ํ๋๋ก ์ทจ๊ธํ ์ ์๋ค. ์ด๋ฐ ๋
ผ๋ฆฌ๋ก ๋ฐ์ ธ๋ณด์๋ฉด String.format
์ ์ฌ์ค์ ์ดํญ ํจ์๋ค. ์ค์ ๋ก String.format
์ ์ธ๋ถ๋ฅผ ์ดํด๋ณด๋ฉด ์ดํญ ํจ์๋ผ๋ ์ฌ์ค์ด ๋ถ๋ช
ํ ๋๋ฌ๋๋ค.
public String format(String format, Object ... args)
๊ฐ๋ณ ์ธ์๋ฅผ ์ทจํ๋ ๋ชจ๋ ํจ์์ ๊ฐ์ ์๋ฆฌ๊ฐ ์ ์ฉ๋๋ค. ๊ฐ๋ณ ์ธ์๋ฅผ ์ทจํ๋ ํจ์๋ ๋จํญ, ์ดํญ, ์ผํญ ํจ์๋ก ์ทจ๊ธํ ์ ์๋ค. ํ์ง๋ง ์ด๋ฅผ ๋์ด์๋ ์ธ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ์๋ค.
๐ ๋์ฌ์ ํค์๋โ
ํจ์์ ์๋๋ ์ธ์์ ์์์ ์๋๋ฅผ ์ ๋๋ก ํํํ๋ ค๋ฉด ์ข์ ํจ์ ์ด๋ฆ์ด ํ์๋ค. ๋จํญ ํจ์๋ ํจ์์ ์ธ์๊ฐ ๋์ฌ/๋ช
์ฌ ์์ ์ด๋ค์ผ ํ๋ค. ์๋ฅผ ๋ค์ด write(name)
์ ๋๊ตฌ๋ ๊ณง๋ฐ๋ก ์ดํดํ๋ค. ์ข ๋ ๋์ ์ด๋ฆ์ writeField(name)
์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ด๋ฆ, ํ๋๋ผ๋ ์ฌ์ค์ด ๋ถ๋ช
ํ ๋๋ฌ๋๋ค.
๋ง์ง๋ง ์์ ๋ ํจ์ ์ด๋ฆ์ ํค์๋๋ฅผ ์ถ๊ฐํ๋ ํ์์ด๋ค. ์ฆ, ํจ์ ์ด๋ฆ์ ์ธ์ ์ด๋ฆ์ ๋ฃ๋๋ค. ์๋ฅผ ๋ค์ด, assertExpectedEqualsActual(expected, actual)
์ด ๋ ์ข๋ค. ๊ทธ๋ฌ๋ฉด ์ธ์ ์์๋ฅผ ๊ธฐ์ตํ ํ์๊ฐ ์์ด์ง๋ค.
๐ ๋ถ์ ํจ๊ณผ๋ฅผ ์ผ์ผํค์ง ๋ง๋ผ!โ
๋ถ์ ํจ๊ณผ๋ ๊ฑฐ์ง๋ง์ด๋ค. ํจ์์์ ํ ๊ฐ์ง๋ฅผ ํ๊ฒ ๋ค๊ณ ์ฝ์ํ๊ณ ์ ๋จ๋ชฐ๋ผ ๋ค๋ฅธ ์ง๋ ํ๋๊น. ๋๋ก๋ ์์์น ๋ชปํ ํด๋์ค ๋ณ์๋ฅผ ์์ ํ๋ค. ๋๋ก๋ ํจ์๋ก ๋์ด์จ ์ธ์๋ ์์คํ ์ ์ญ ๋ณ์๋ฅผ ์์ ํ๋ค. ์ด๋ ์ชฝ์ด๋ ๊ตํํ๊ณ ํด๋ก์ด ๊ฑฐ์ง๋ง์ด๋ค. ๋ง์ ๊ฒฝ์ฐ ์๊ฐ์ ์ธ ๊ฒฐํฉ์ด๋ ์์ ์ข ์์ฑ์ ์ด๋ํ๋ค.
๋ง์ฝ ์๊ฐ์ ์ธ ๊ฒฐํฉ์ด ํ์ํ๋ค๋ฉด ํจ์ ์ด๋ฆ์ ๋ถ๋ช ํ ๋ช ์ํ๋ค.
๐ ์ถ๋ ฅ ์ธ์โ
์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ธ์๋ฅผ ํจ์ ์ ๋ ฅ์ผ๋ก ํด์ํ๋ค.
appendFooter(s);
์ด ํจ์๋ ๋ฌด์ธ๊ฐ์ s
๋ฅผ ๋ฐ๋ฅ๊ธ๋ก ์ฒจ๋ถํ ๊น? ์๋๋ฉด s
์ ๋ฐ๋ฅ๊ธ์ ์ฒจ๋ถํ ๊น? ์ธ์ s
๋ ์
๋ ฅ์ผ๊น ์ถ๋ ฅ์ผ๊น? ํจ์ ์ ์ธ๋ถ๋ฅผ ์ฐพ์๋ณด๋ฉด ๋ถ๋ช
ํด์ง๋ค.
public void appendFooter(StringBuffer report)
์ธ์ s
๊ฐ ์ถ๋ ฅ ์ธ์๋ผ๋ ์ฌ์ค์ ๋ถ๋ช
ํ์ง๋ง ํจ์ ์ ์ธ๋ถ๋ฅผ ์ฐพ์๋ณด๊ณ ๋์์ผ ์์๋ค. ํจ์ ์ ์ธ๋ถ๋ฅผ ์ฐพ์๋ณด๋ ํ์๋ ์ฝ๋๋ฅผ ๋ณด๋ค๊ฐ ์ฃผ์ถคํ๋ ํ์์ ๋๊ธ์ด๋ค. ์ธ์ง์ ์ผ๋ก ๊ฑฐ์ฌ๋ฆฐ๋ค๋ ๋ป์ผ๋ก ํผํด์ผ ํ๋ค.
๊ฐ์ฒด ์งํฅ ์ธ์ด์์๋ ์ถ๋ ฅ ์ธ์๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ๊ฑฐ์ ์๋ค. ์ถ๋ ฅ ์ธ ์๋ก ์ฌ์ฉํ๋ผ๊ณ ์ค๊ณํ ๋ณ์๊ฐ ๋ฐ๋ก this
์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์ ๋งํด, appendFooter
๋ ๋ค์๊ณผ ๊ฐ์ด ํธ์ถํ๋ ๋ฐฉ์์ด ์ข๋ค.
report.appendFooter()
์ผ๋ฐ์ ์ผ๋ก ์ถ๋ ฅ ์ธ์๋ ํผํด์ผ ํ๋ค. ํจ์์์ ์ํ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด ํจ์๊ฐ ์ํ ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ ํํ๋ค.
๐ ๋ช ๋ น๊ณผ ์กฐํ๋ฅผ ๋ถ๋ฆฌํ๋ผ!โ
ํจ์๋ ๋ญ๊ฐ๋ฅผ ์ํํ๊ฑฐ๋ ๋ญ๊ฐ์ ๋ตํ๊ฑฐ๋ ๋ ์ค ํ๋๋ง ํด์ผ ํ๋ค. ๋ ๋ค ํ๋ฉด ์ ๋๋ค. ๊ฐ์ฒด ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์๋๋ฉด ๊ฐ์ฒด ์ ๋ณด๋ฅผ ๋ฐํํ๊ฑฐ๋ ๋ ์ค ํ๋๋ค. ๋ ๋ค ํ๋ฉด ํผ๋์ ์ด๋ํ๋ค.
๐ ์ค๋ฅ ์ฝ๋๋ณด๋ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ผ!โ
๋ช
๋ น ํจ์์์ ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํ๋ ๋ฐฉ์์ ๋ช
๋ น/์กฐํ ๋ถ๋ฆฌ ๊ท์น์ ๋ฏธ๋ฌํ๊ฒ ์๋ฐํ๋ค. ์์นซํ๋ฉด if
๋ฌธ์์ ๋ช
๋ น์ ํํ์์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ฌ์ด ํ์ด๋ค.
if (deletePage(page) == E_OK)
์ ์ฝ๋๋ ๋์ฌ/ํ์ฉ์ฌ ํผ๋์ ์ผ์ผํค์ง ์๋ ๋์ ์ฌ๋ฌ ๋จ๊ณ๋ก ์ค์ฒฉ๋๋ ์ฝ๋๋ฅผ ์ผ๊ธฐํ๋ค. ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํ๋ฉด ํธ์ถ์๋ ์ค๋ฅ ์ฝ๋๋ฅผ ๊ณง๋ฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค๋ ๋ฌธ์ ์ ๋ถ๋ชํ๋ค.
์ค๋ฅ ์ฝ๋ ๋์ ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋๊ฐ ์๋ ์ฝ๋์์ ๋ถ๋ฆฌ๋๋ฏ๋ก ์ฝ๋๊ฐ ๊น๋ํด์ง๋ค.
try {
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
} catch (Exception e) {
logger.log(e.getMessage());
}
๐ Try/Catch ๋ธ๋ก ๋ฝ์๋ด๊ธฐโ
try/catch
๋ธ๋ก์ ์๋ ์ถํ๋ค. ์ฝ๋ ๊ตฌ์กฐ์ ํผ๋์ ์ผ์ผํค๋ฉฐ, ์ ์ ๋์๊ณผ ์ค๋ฅ ์ฒ๋ฆฌ ๋์์ ๋ค์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก try/catch
๋ธ๋ก์ ๋ณ๋ ํจ์๋ก ๋ฝ์๋ด๋ ํธ์ด ์ข๋ค.
public void delete(Page page) {
try {
deletePageAndAllReferences(page);
} catch (Exception e) {
logError(e);
}
}
private void deletePageAndAllReferences(Page page) throws Exception {
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
}
private void logError(Exception e) {
logger.log(e.getMessage());
}
์์์ delete
ํจ์๋ ๋ชจ๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๊ทธ๋์ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๋ค. ํ ๋ฒ ํ์ด๋ณด๊ณ ๋์ด๊ฐ๋ฉด ์ถฉ๋ถํ๋ค. ์ด๋ ๊ฒ ์ ์ ๋์๊ณผ ์ค๋ฅ ์ฒ๋ฆฌ ๋์์ ๋ถ๋ฆฌํ๋ฉด ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์์ ํ๊ธฐ ์ฌ์์ง๋ค.
๐ ์ค๋ฅ ์ฒ๋ฆฌ๋ ํ ๊ฐ์ง ์์ ์ด๋ค.โ
ํจ์๋ "ํ ๊ฐ์ง" ์์
๋ง ํด์ผ ํ๋ค. ์ค๋ฅ ์ฒ๋ฆฌ๋ "ํ ๊ฐ์ง" ์์
์ ์ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์๋ ์ค๋ฅ๋ง ์ฒ๋ฆฌํด์ผ ๋ง๋
ํ๋ค. ํจ์์ ํค์๋ try
๊ฐ ์๋ค๋ฉด try
๋ฌธ์ผ๋ก ์์ํด catch/finally
๋ฌธ์ผ๋ก ๋๋์ผ ํ๋ค๋ ๋ง์ด๋ค.
๐ Error.java ์์กด์ฑ ์์โ
์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํ๋ค๋ ์ด์ผ๊ธฐ๋, ํด๋์ค๋ ์ด๊ฑฐํ ๋ณ์๋ , ์ด๋์ ๊ฐ ์ค๋ฅ ์ฝ๋๋ฅผ ์ ์ํ๋ค๋ ๋ป์ด๋ค.
public enum Error {
OK,
INVALID,
NO_SUCH,
LOCKED,
OUT_OF_RESOURCES,
WAITING_FOR_EVENT;
}
์์ ๊ฐ์ ํด๋์ค๋ ์์กด์ ์์(magnet)์ด๋ค. ๋ค๋ฅธ ํด๋์ค์์ Error enum
์ import
ํด ์ฌ์ฉํด์ผ ํ๋ฏ๋ก, ์ฆ Error enum
์ด ๋ณํ๋ค๋ฉด Error enum
์ ์ฌ์ฉํ๋ ํด๋์ค ์ ๋ถ๋ฅผ ๋ค์ ์ปดํ์ผํ๊ณ ๋ค์ ๋ฐฐ์นํด์ผ ํ๋ค. ๊ทธ๋์ Error
ํด๋์ค ๋ณ๊ฒฝ์ด ์ด๋ ค์์ง๋ค. ํ๋ก๊ทธ๋๋จธ๋ ์ฌ์ปดํ์ผ/์ฌ๋ฐฐ์น๊ฐ ๋ฒ๊ฑฐ๋กญ๊ธฐ์ ์ ์ค๋ฅ ์ฝ๋๋ฅผ ์ ์ํ๊ณ ์ถ์ง ์๋ค. ๊ทธ๋์ ์ ์ค๋ฅ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋์ ๊ธฐ์กด ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ค.
์ค๋ฅ ์ฝ๋ ๋์ ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์์ธ๋ Exception
ํด๋์ค์์ ํ์๋๋ค. ๋ฐ๋ผ์ ์ฌ์ปดํ์ผ/์ฌ๋ฐฐ์น ์์ด๋ ์ ์์ธ ํด๋์ค๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
๐ ๋ฐ๋ณตํ์ง ๋ง๋ผ!โ
์ค๋ณต์ ์ํ๋ฅด์จ์ด์์ ๋ชจ๋ ์ ์ ๊ทผ์์ด๋ค. ๋ง์ ์์น๊ณผ ๊ธฐ๋ฒ์ด ์ค๋ณต์ ์์ ๊ฑฐ๋ ์ ์ดํ ๋ชฉ์ ์ผ๋ก ๋์๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋๋ฅผ ๋ถ๋ชจ ํด๋์ค๋ก ๋ชฐ์ ์ค๋ณต์ ์์ค๋ค. ํ์ ๋ฃจํด์ ๋ฐ๋ช ํ ์ด๋๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ง๊ธ๊น์ง ์ผ์ด๋ ํ์ ์ ์์ค ์ฝ๋์์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ค๋ ์ง์์ ์ธ ๋ ธ๋ ฅ์ผ๋ก ๋ณด์ธ๋ค.
๐ ๊ตฌ์กฐ์ ํ ๋ก๊ทธ๋๋ฐโ
์ด๋ค ํ๋ก๊ทธ๋๋จธ๋ ์์ธ ํ๋ฅด ๋ฐ์ดํฌ์คํธ๋ผ์ ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ ์์น์ ๋ฐ๋ฅธ๋ค ๋ฐ์ดํฌ์คํธ๋ผ๋ ๋ชจ๋ ํจ์์ ํจ์ ๋ด ๋ชจ๋ ๋ธ๋ก์ ์
๊ตฌ์ ์ถ๊ตฌ๊ฐ ํ๋๋ง ์กด์ฌํด์ผ ํ๋ค๊ณ ๋งํ๋ค. ์ฆ, ํจ์๋ return
๋ฌธ์ด ํ๋์ฌ์ผ ํ๋ค๊ณ ๋ง์ด๋ค. ๋ฃจํ ์์์ break
๋ continue
๋ฅผ ์ฌ์ฉํด์ ์ ๋๋ฉด goto
๋ ์ ๋๋ก, ์ ๋๋ก ์ ๋๋ค.
๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ชฉํ์ ๊ท์จ์ ๊ณต๊ฐํ์ง๋ง ํจ์๊ฐ ์๋ค๋ฉด ์ ๊ท์น์ ๋ณ ์ด์ต์ ์ ๊ณตํ์ง ๋ชปํ๋ค. ํจ์๊ฐ ์์ฃผ ํด ๋๋ง ์๋นํ ์ด์ต์ ์ ๊ณตํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํจ์๋ฅผ ์๊ฒ ๋ง๋๋ค๋ฉด ๊ฐํน return
, break
, continue
๋ฅผ ์ฌ๋ฌ ์ฐจ๋ก ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค. ์คํ๋ ค ๋๋ก๋ ๋จ์ผ ์
/์ถ๊ตฌ ๊ท์น๋ณด๋ค ์๋๋ฅผ ํํํ๊ธฐ ์ฌ์์ง๋ค.
๐ ํจ์๋ฅผ ์ด๋ป๊ฒ ์ง์ฃ ?โ
์ฒ์์๋ ๊ธธ๊ณ ๋ณต์กํ๋ค. ๋ค์ฌ์ฐ๊ธฐ ๋จ๊ณ๋ ๋ง๊ณ ์ค๋ณต๋ ๋ฃจํ๋ ๋ง๋ค. ์ธ์ ๋ชฉ๋ก๋ ์์ฃผ ๊ธธ๋ค. ์ด๋ฆ์ ์ฆํฅ์ ์ด๊ณ ์ฝ๋๋ ์ค๋ณต๋๋ค. ํ์ง๋ง ๋๋ ๊ทธ ์ํฌ๋ฅผ ์ฝ๋๋ฅผ ๋น ์ง์์ด ํ ์คํธํ๋ ๋จ์ ํ ์คํธ ์ผ์ด์ค๋ ๋ง๋ ๋ค.
๊ทธ๋ฐ ๋ค์ ๋๋ ์ฝ๋๋ฅผ ๋ค๋ฌ๊ณ , ํจ์๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฆ์ ๋ฐ๊พธ๊ณ , ์ค๋ณต์ ์ ๊ฑฐํ๋ค. ๋ฉ์๋๋ฅผ ์ค์ด๊ณ ์์๋ฅผ ๋ฐ๊พผ๋ค. ๋๋ก๋ ์ ์ฒด ํด๋์ค๋ฅผ ์ชผ๊ฐ๊ธฐ๋ ํ๋ค. ์ด ์์ค์๋ ์ฝ๋๋ ํญ์ ๋จ์ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ค.
๐ ๊ฒฐ๋ก โ
๋ชจ๋ ์์คํ ์ ํน์ ์์ฉ ๋ถ์ผ ์์คํ ์ ๊ธฐ์ ํ ๋ชฉ์ ์ผ๋ก ํ๋ก๊ทธ๋๋จธ๊ฐ ์ค๊ณํ ๋๋ฉ์ธ ํนํ ์ธ์ด(DSL)๋ก ๋ง๋ค์ด์ง๋ค. ํจ์๋ ๊ทธ ์ธ์ด์์ ๋์ฌ๋ฉฐ, ํด๋์ค๋ ๋ช ์ฌ๋ค.
๋๊ฐ ํ๋ก๊ทธ๋๋จธ๋ ์์คํ ์ (๊ตฌํํ ) ํ๋ก๊ทธ๋จ์ด ์๋๋ผ (ํ์ด๊ฐ) ์ด์ผ๊ธฐ๋ก ์ฌ๊ธด๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ผ๋ ์๋จ์ ์ฌ์ฉํด ์ข ๋ ํ๋ถํ๊ณ ์ข ๋ ํํ๋ ฅ์ด ๊ฐํ ์ธ์ด๋ฅผ ๋ง๋ค์ด ์ด์ผ๊ธฐ๋ฅผ ํ์ด๊ฐ๋ค. ์์คํ ์์ ๋ฐ์ํ๋ ๋ชจ๋ ๋์์ ์ค๋ช ํ๋ ํจ์ ๊ณ์ธต์ด ๋ฐ๋ก ๊ทธ ์ธ์ด์ ์ํ๋ค.
์ฌ๊ธฐ์ ์ค๋ช ํ ๊ท์น์ ๋ฐ๋ฅธ๋ค๋ฉด ๊ธธ์ด๊ฐ ์งง๊ณ , ์ด๋ฆ์ด ์ข๊ณ , ์ฒด๊ณ๊ฐ ์กํ ํจ์๊ฐ ๋์ค๋ฆฌ๋ผ. ํ์ง๋ง ์ง์ง ๋ชฉํ๋ ์์คํ ์ด๋ผ๋ ์ด์ผ๊ธฐ๋ฅผ ํ์ด๊ฐ๋ ๋ฐ ์๋ค๋ ์ฌ์ค์ ๋ช ์ฌํ๊ธฐ ๋ฐ๋๋ค. ์ฌ๋ฌ๋ถ์ด ์์ฑํ๋ ํจ์๊ฐ ๋ถ๋ช ํ๊ณ ์ ํํ ์ธ์ด๋ก ๊น๋ํ๊ฒ ๊ฐ์ด ๋ง์๋จ์ด์ ธ์ผ ์ด์ผ๊ธฐ๋ฅผ ํ์ด๊ฐ๊ธฐ๊ฐ ์ฌ์์ง๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ๊ธฐ ๋ฐ๋๋ค.