๐ญ Chapter 7: ์ค๋ฅ ์ฒ๋ฆฌ
์ค๋ฅ ์ฒ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ ๋ฐ๋์ ํ์ํ ์์ ์ค ํ๋์ผ ๋ฟ์ด๋ค. ์ ๋ ฅ์ด ์ด์ํ๊ฑฐ๋ ๋๋ฐ์ด์ค๊ฐ ์คํจํ ์ง๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ๋จํ ๋งํด, ๋ญ๊ฐ ์๋ชป๋ ๊ฐ๋ฅ์ฑ์ ๋ ์กด์ฌํ๋ค. ๋ญ๊ฐ ์๋ชป๋๋ฉด ๋ฐ๋ก ์ก์ ์ฑ ์์ ๋ฐ๋ก ์ฐ๋ฆฌ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์๋ค.
๊นจ๊ฟํ ์ฝ๋์ ์ค๋ฅ ์ฒ๋ฆฌ๋ ํ์คํ ์ฐ๊ด์ฑ์ด ์๋ค. ์๋น์ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ์ ์ผ๋ก ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋์ ์ข์ฐํ๋ค. ์ฌ๊ธฐ์ ์ข์ฐ๋๋ค๋ ํํ์ ์ฝ๋ ๊ธฐ๋ฐ์ด ์ค๋ฅ๋ง ์ฒ๋ฆฌํ๋ค๋ ์๋ฏธ๊ฐ ์๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ ํฉ์ด์ง ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋ ๋๋ฌธ์ ์ค์ ๋ก ์ฝ๋๊ฐ ํ๋ ์ผ์ ํ์ ํ๊ธฐ๊ฐ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ๋ค. ์ค๋ฅ ์ฒ๋ฆฌ๋ ์ค์ํ๋ค. ํ์ง๋ง ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋๋ก ์ธํด ํ๋ก๊ทธ๋จ ๋ ผ๋ฆฌ๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์์ง๋ค๋ฉด ๊นจ๋ํ ์ฝ๋๋ผ ๋ถ๋ฅด๊ธฐ ์ด๋ ต๋ค.
๐ ์ค๋ฅ ์ฝ๋๋ณด๋ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ผโ
์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ๋ฅผ ๋์ง๋ ํธ์ด ๋ซ๋ค. ๊ทธ๋ฌ๋ฉด ํธ์ถ์ ์ฝ๋๊ฐ ๋ ๊น๋ํด์ง๋ค. ๋ ผ๋ฆฌ๊ฐ ์ค๋ฅ ์ฒ๋ฆฌ ์ฝ๋์ ๋ค์์ด์ง ์์ผ๋๊น.
public class DeviceController {
// ...
public void sendShutDown() {
try {
tryToShutDown();
} catch (DeviceShutDownError e) {
logger.log(e);
}
}
private void tryToShutDown() throws DeviceShutDownError {
DeviceHandle handle = getHandle(DEV1);
DeviceRecord record = retrieveDeviceRecord(handle);
pauseDevice(handle);
clearDeviceWorkQueue(handle);
closeDevice(handle);
}
private DeviceHandle getHandle(DeviceID id) {
// ...
throw new DeviceShutDownError("Invalid handle for: " + id.toString());
// ...
}
// ...
}