๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ/์ž๋ฐ” ์ฝ”๋”ฉ์˜ ๊ธฐ์ˆ 

[์ž๋ฐ” ์ฝ”๋”ฉ์˜ ๊ธฐ์ˆ ] 5์žฅ : ๋ฌธ์ œ ๋ฐœ์ƒ์— ๋Œ€๋น„ํ•˜๊ธฐ

5.1 ๋น ๋ฅธ ์‹คํŒจ

๋ฌธ์ œ ์ฝ”๋“œ

class CruiseControl {
    static final double SPEED_OF_LIGHT_KMH = 1079252850;
    static final double SPEED_LIMIT = SPEED_OF_LIGHT_KMH;

    private double targetSpeedKmh;

    void setTargetSpeedKmh(double speedKmh) {
        if (speedKmh < 0) {
            throw new IllegalArgumentException();
        } else if (speedKmh <= SPEED_LIMIT) {
            targetSpeedKmh = speedKmh;
        } else {
            throw new IllegalArgumentException();
        }
    }

 

 

์œ„ ์ฝ”๋“œ๋Š” else if์˜ ์ •์ƒ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์— ์•ž ๋’ค๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์กฐ๊ฑด์ด ๋“ค์–ด๊ฐ€์žˆ์–ด ์ •์ƒ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์ด ๋ˆˆ์— ๋„์ง€ ์•Š๋Š”๋‹ค.

 

๋˜ํ•œ, ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์€ !(speedKmh <= 0) && speedKmh <= SPEED_LIMIT ์œผ๋กœ ํ•ด์„๋˜์–ด์•ผ ํ•˜๊ณ 

์„ธ ๋ฒˆ์งธ ์กฐ๊ฑด์€ !(๋‘๋ฒˆ์งธ์กฐ๊ฑด)์œผ๋กœ ํ•ด์„๋˜์–ด์•ผ ํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ณผ์ •์€ JVM์—๊ฒŒ๋Š” ๋ฌด์ฒ™ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ธ๊ฐ„์—๊ฒŒ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

 

์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

๊ฐœ์„  ์ฝ”๋“œ

class CruiseControl {
    static final double SPEED_OF_LIGHT_KMH = 1079252850;
    static final double SPEED_LIMIT = SPEED_OF_LIGHT_KMH;

    private double targetSpeedKmh;

    void setTargetSpeedKmh(double speedKmh) {
    	// ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฒ€์ฆ
        if (speedKmh < 0 || speedKmh > SPEED_LIMIT) {
            throw new IllegalArgumentException();
        }

	// ์ผ๋ฐ˜์ ์ธ ๊ฒฝ๋กœ
        targetSpeedKmh = speedKmh;
    }
}

'๊ฒ€์ฆ' ๊ณผ '์ •์ƒ์ ์ธ ๊ฒฝ๋กœ'๋ฅผ ๋ถ„๋ฆฌํ•จ.

 

'๊ฒ€์ฆ'์ด ๋จผ์ € ์‹คํ–‰๋˜์–ด ์˜ˆ์™ธ ์ƒํ™ฉ์ด๋ผ๋ฉด ๋น ๋ฅด๊ฒŒ ์‹คํŒจํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด ํ›„์— ์ด์–ด์ง€๋Š” ํ๋ฆ„์€ '์ •์ƒ์ ์ธ ํ๋ฆ„'์ด ๋œ๋‹ค.

5.2 ํ•ญ์ƒ ๊ฐ€์žฅ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์™ธ ์žก๊ธฐ

๋ฌธ์ œ ์ฝ”๋“œ

class TransmissionParser {
    static Transmission parse(String rawMessage) {
        if (rawMessage != null
                && rawMessage.length() != Transmission.MESSAGE_LENGTH) {
            throw new IllegalArgumentException("Bad message received!");
        }

        String rawId = rawMessage.substring(0, Transmission.ID_LENGTH);
        String rawContent = rawMessage.substring(Transmission.ID_LENGTH);
        try {
        	// rawId ๋ฌธ์ž์—ด ์•ˆ์— intํ˜•์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ!!
            int id = Integer.parseInt(rawId);
            String content = rawContent.trim();
            return new Transmission(id, content);
        } catch (Exception e) {
            throw new IllegalArgumentException("Bad message received!");
        }
    }
}

์œ„ ์ฝ”๋“œ๋Š” ์˜ˆ์™ธ๋ฅผ 'Exception'์œผ๋กœ ๋ฐ›๊ณ  ์žˆ๋‹ค. 'Exception'์€ ์ž๋ฐ”์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ ์œ ํ˜•์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์žก๊ธธ ์›ํ•˜๋Š” ์˜ˆ์™ธ ์ด์™ธ์— NullPointerException๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ์ข€ ๋” ๊ตฌ์ฒด์ ์ธ ์˜ˆ์™ธ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

 

๊ฐœ์„  ์ฝ”๋“œ

class TransmissionParser {
    static Transmission parse(String rawMessage) {
        if (rawMessage != null &&
                rawMessage.length() != Transmission.MESSAGE_LENGTH) {
            throw new IllegalArgumentException("Bad message received!");
        }

        String rawId = rawMessage.substring(0, Transmission.ID_LENGTH);
        String rawContent = rawMessage.substring(Transmission.ID_LENGTH);
        try {
        	// ์˜ˆ์™ธ ๋ฐœ์ƒ!!
            int id = Integer.parseInt(rawId);
            //
            
            String content = rawContent.trim();
            return new Transmission(id, content);
        } catch (NumberFormatException e) { // ์˜ˆ์™ธ ๊ตฌ์ฒดํ™”
            throw new IllegalArgumentException("Bad message received!");
        }
    }
}

์œ„ ์ฝ”๋“œ์—์„œ๋Š”  parseInt์—์„œ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ์žˆ์„ ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ 'NumberFormatException'์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ catch ์กฐ๊ฑด์— ์ด๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ---> ๊ฐ€์žฅ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์™ธ๋ฅผ ์žก์ž!!

 

๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜ˆ์™ธ๋ฅผ ๋˜‘๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ๋‹ค์ค‘ ์บ์น˜ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ž.

ex) catch(NumberFormatException | IOException)

5.3 ๋ฉ”์‹œ์ง€๋กœ ์›์ธ ์„ค๋ช…

์˜ˆ์™ธ๋ฅผ ๊ตฌ์ฒดํ™”ํ•˜๋ฉด ๋ฐœ์ƒ ํƒ€์ž…๋งŒ ๋ด๋„ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜๋Š”์ง€ ์•Œ์•„์ฑŒ ์ˆ˜ ์žˆ๋‹ค. 

    - ๋ฉ”์„œ๋“œ์— ์ž˜๋ชป๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž…๋ ฅ => IlleagalArgumentException ๋ฐœ์ƒ

 

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ํ•˜๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ ์ „ํ›„ ๋งฅ๋ฝ์„ ์•Œ ์ˆ˜๊ฐ€ ์—†๋‹ค.

 

์˜ˆ์™ธ message๋ฅผ ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•ด ์˜ˆ์™ธ ์ž์ฒด๋กœ ๋งฅ๋ฝ์„ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋ณด์ž.

 

๊ฐœ์„  ์ฝ”๋“œ

class TransmissionParser {
    static Transmission parse(String rawMessage) {
        if (rawMessage != null
                && rawMessage.length() != Transmission.MESSAGE_LENGTH) {
            throw new IllegalArgumentException(
            	// ๋ฉ”์‹œ์ง€ ๊ตฌ์ฒดํ™”
                String.format("Expected %d, but got %d characters in '%s'",
                    Transmission.MESSAGE_LENGTH, rawMessage.length(),
                    rawMessage));
        }

        String rawId = rawMessage.substring(0, Transmission.ID_LENGTH);
        String rawContent = rawMessage.substring(Transmission.ID_LENGTH);
        try {
            int id = Integer.parseInt(rawId);
            String content = rawContent.trim();
            return new Transmission(id, content);
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException(
            	// ๋ฉ”์‹œ์ง€ ๊ตฌ์ฒดํ™”
                String.format("Expected number, but got '%s' in '%s'",
                        rawId, rawMessage));
        }
    }
}

1. ์ •๋ณด๋ฅผ ๋ˆ„๋ฝํ•˜๊ฑฐ๋‚˜ ์“ธ๋ชจ์—†๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹  ๋ฐ”๋ผ๋Š” ์ •๋ณด

2. ๋ฐ›์€ ๊ฒƒ

3. ์ „์ฒด ๋งฅ๋ฝ

 

์ด ์„ธ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๋ฉ”์‹œ์ง€๋กœ ์ „๋‹ฌํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์˜ˆ์™ธ์˜ ๊ทผ๋ณธ์ ์ด ์›์ธ์„ ๋” ๋นจ๋ฆฌ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค.

5.4 ์›์ธ ์‚ฌ์Šฌ ๊นจ์ง€ ์•Š๊ธฐ

์˜ˆ์™ธ๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋‹ค์‹œ ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ์•ผํ•œ๋‹ค.

์ด๋Ÿฐ ๊ณผ์ •์„ ํ†ตํ•ด ๊ฐ ์˜ˆ์™ธ๊ฐ€ ๊ทธ ์˜ˆ์™ธ๋ฅผ ์ผ์œผํ‚จ ์˜ˆ์™ธ์™€ ์—ฐ๊ฒฐ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์Šคํƒ ์ถ”์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์›์ธ ์‚ฌ์Šฌ์„ ๊นจ์ง€ ์•Š๊ณ  ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

class TransmissionParser {
    static Transmission parse(String rawMessage) {
        if (rawMessage != null
                && rawMessage.length() != Transmission.MESSAGE_LENGTH) {
            throw new IllegalArgumentException(
                String.format("Expected %d, but got %d characters in '%s'",
                    Transmission.MESSAGE_LENGTH, rawMessage.length(),
                    rawMessage));
        }

        String rawId = rawMessage.substring(0, Transmission.ID_LENGTH);
        String rawContent = rawMessage.substring(Transmission.ID_LENGTH);
        try {
            int id = Integer.parseInt(rawId);
            String content = rawContent.trim();
            return new Transmission(id, content);
        } catch (NumberFormatException e) {
            throw new IllegalArgumentException(
                String.format("Expected number, but got '%s' in '%s'",
                        rawId, rawMessage));
        }
    }
}

catch ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ๋•Œ message์™€ ์žก์•˜๋˜ ์˜ˆ์™ธ๋ฅผ ์ฆ‰์‹œ ์›์ธ์œผ๋กœ ์ „๋‹ฌํ•˜๋„๋ก ํ•œ๋‹ค.

 

<EXAMPLE>

 throw new IllegalArgumentException("Message", e);

5.5 ๋ณ€์ˆ˜๋กœ ์›์ธ ๋…ธ์ถœ

**์–ด๋ ต๊ณ  ์ดํ•ด ์ž˜ ์•ˆ๋จ**

 

๋งž์ถคํ˜• ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค์–ด ๊ทธ ์˜ˆ์™ธ๋งŒ์˜ ๋ฉ”์‹œ์ง€ ํ•„๋“œ๊ฐ€ ๋“ค์–ด๊ฐ„ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

ํ–ฅํ›„ ์ด ํด๋ž˜์Šค์˜ ํ•„๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

5.6 ํƒ€์ž… ๋ณ€ํ™˜ ์ „์— ํ•ญ์ƒ ํƒ€์ž… ๊ฒ€์ฆํ•˜๊ธฐ

Object signal = inputStream.readObject();
CrewMessage crewMessage = (CrewMessage) signal;

์œ„ ์ฝ”๋“œ๋Š” ์ŠคํŠธ๋ฆผ์ด ํ•ญ์ƒ CrewMessage ๊ฐ์ฒด๋กœ ๋“ค์–ด์˜ฌ ๋•Œ๋งŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

๋งŒ์•ฝ, ๊ทธ ์™ธ์˜ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค๋ฉด ์ŠคํŠธ๋ฆผ์—์„  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ cast ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค.

Object signal = inputStream.readObject();
if (signal instanceof CrewMessage) {
    CrewMessage crewMessage = (CrewMessage) signal;
}

'instanceof' ์—ฐ์‚ฐ์ž๋กœ ํƒ€์ž…์„ ๊ฒ€์ฆํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ singnal์˜ ํƒ€์ž…์ด CrewMessage๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ ์™ธ๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ฒฐ๊ตญ, ์ฐธ์ผ๋•Œ๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ClassCastException์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

5.7 ํ•ญ์ƒ ์ž์› ๋‹ซ๊ธฐ

class Logbook {

    static final Path LOG_FOLDER = Paths.get("/var/log");
    static final String FILE_FILTER = "*.log";

    List<Path> getLogs() throws IOException {
        List<Path> result = new ArrayList<>();

        DirectoryStream<Path> directoryStream =
                Files.newDirectoryStream(LOG_FOLDER, FILE_FILTER);
        for (Path logFile : directoryStream) {
            result.add(logFile);
        }
        directoryStream.close();

        return result;
    }
}

DirectoryStream์„ ์—ด๊ณ  close()๋กœ ๋‹ซ๋Š” ํ–‰๋™์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

 

๋ฌธ์ œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ž์›์„ ์—ฐ ํ›„ close()๋กœ ์ž์›์„ ํ•ด์ œํ•˜๊ธฐ ์ „์— ์ž์›์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋‹ค. ์ด ๊ฒฝ์šฐ ์˜ˆ์™ธ๋กœ ์ธํ•ด close()๊ฐ€ ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

--> '์ž์› ๋ˆ„์ถœ'์ด๋ผ ๋ถ€๋ฆ„

 

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ–ˆ๋˜ ์ž์›์„ ํ•ญ์ƒ ๋‹ซ์„ ์ˆ˜ ์žˆ์„๊นŒ?

class Logbook {

    static final Path LOG_FOLDER = Paths.get("/var/log");
    static final String FILE_FILTER = "*.log";

    List<Path> getLogs() throws IOException {
        List<Path> result = new ArrayList<>();

        try (DirectoryStream<Path> directoryStream =
                     Files.newDirectoryStream(LOG_FOLDER, FILE_FILTER)) {
            for (Path logFile : directoryStream) {
                result.add(logFile);
            }
        }

        return result;
    }
}

๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค.  try ๋ฌธ ์•ˆ์— ์ž์› ์—ด๋ฉด๋œ๋‹ค.

์ด ๊ฒฝ์šฐ try ๋ฌธ์ด ์ข…๋ฃŒ๋˜๋ฉด ์ž๋ฐ”๊ฐ€ ์•Œ์•„์„œ close()ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•œ๋‹ค.

 

์‚ฌ์‹ค try, finally์—์„œ finally ๋ถ€๋ถ„์—์„œ close()๊ฐ€ ์‹คํ–‰๋˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•ด์ฃผ๋ฏ€๋กœ ๊ทธ๋ƒฅ try๋ฌธ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.

5.8 ํ•ญ์ƒ ๋‹ค์ˆ˜ ์ž์› ๋‹ซ๊ธฐ

์—ฌ๋Ÿฌ ์ž์›์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋ฉด ์ž์› ๋‹ซ๊ธฐ๊ฐ€ ๋”์šฑ ์–ด๋ ต๋‹ค.

 

๊ฐ ์ž์›๋งˆ๋‹ค ๋ชจ์ข…์˜ ์ด์œ ๋กœ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ˆ˜ ์ž์›์„ ํ•ญ์ƒ ๋‹ซ๊ธฐ๊ฐ€ ์‰ฝ์ง€์•Š์€ ๊ฒƒ์ด๋‹ค.

 

์ด๋•Œ try-with-resources๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

์ž์›์„ try๋ฌธ ์•ˆ์—์„œ ์—ด๊ธฐ๋งŒ ํ•˜๋ฉด ์•Œ์•„์„œ ๊ฐ ์ž์›์„ ๋‹ซ์•„์ค€๋‹ค.

 

์ž์›์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ๋ง๊ณ  ๊ผญ try-with-resources ๋ธ”๋ก ์•ˆ์—์„œ ์ž์›์„ ์—ด์ž!

5.9 ๋นˆ catch ๋ธ”๋ก ์„ค๋ช…ํ•˜๊ธฐ

        try (DirectoryStream<Path> directoryStream =
                     Files.newDirectoryStream(LOG_FOLDER, FILE_FILTER)) {
            for (Path logFile : directoryStream) {
                result.add(logFile);
            }
        } catch (NotDirectoryException e) {

        }

๋นˆ catch ๋ธ”๋ก์—๋Š” ๋„๋Œ€์ฒด ์–ด๋–ค ์˜๋„๊ฐ€ ์ˆจ์–ด์žˆ์„๊นŒ??

 

    List<Path> getLogs() throws IOException {
        List<Path> result = new ArrayList<>();

        try (DirectoryStream<Path> directoryStream =
                     Files.newDirectoryStream(LOG_FOLDER, FILE_FILTER)) {
            for (Path logFile : directoryStream) {
                result.add(logFile);
            }
        } catch (NotDirectoryException ignored) {
            // No directory -> no logs!
        }

        return result;
    }

 

์ถ”๊ฐ€ํ•˜๋ฉด ์ข‹์€ ๊ฒƒ

-> ๋นˆ catch ์ธ ์ด์œ  ( ์ฃผ์„ ์„ค๋ช… ์ถ”๊ฐ€)

-> ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ด๊ธฐ (e -> ignored)

 

ignored๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜๊ฒ ๋‹ค๊ณ  ๋ช…์‹œํ•˜๊ธฐ.

์ฃผ์„์œผ๋กœ ์™œ ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๊ธฐ.

 

5.10 5์žฅ์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ

์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋“  ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” ํ•„์ˆ˜์ด๋‹ค.

 

์˜ˆ์™ธ๋ฅผ '์›์ธ ์‚ฌ์Šฌ'๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ '์ž์›์„ ๋‹ซ์ง€ ์•Š๋Š” ๊ฒƒ' ๋“ฑ์˜ ์„ธ๋ถ€์ ์ธ ์š”์†Œ์—์„œ ์˜ˆ์™ธ๊ฐ€ ์‰ฝ๊ฒŒ ๋ฐœ์ƒํ•˜๊ณ  ์˜ค๋™์ž‘ํ•  ์ˆ˜์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์‹ค์ˆ˜๋ฅผ ์ €์งˆ๋Ÿฌ๋„ ์ปดํŒŒ์ผ์€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ๋‚˜์ค‘์— ์•Œ๊ฒŒ ๋˜๊ณ  ์ถ”์ ํ•˜๊ธฐ๋„ ๋”์šฑ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

5์žฅ์—์„œ๋Š” ํŒŒ์ผ ์ฒ˜๋ฆฌ๋‚˜ ๋„คํŠธ์›Œํ‚น ์ฒ˜๋Ÿผ ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„๋“ค์˜ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค.

 

6์žฅ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋„๊ตฌ์ธ '๋‹จ์œ„ ํ…Œ์ŠคํŠธ'์— ๋Œ€ํ•ด ํ•™์Šตํ•œ๋‹ค.