ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

7์žฅ ์˜ค๋ฅ˜์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค

๊นจ๋—ํ•˜๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ณด๋‹ค ์˜ˆ์™ธ์ฒ˜๋ฆฌ

 

BAD ์˜ˆ์‹œ

if (handle != DeviceHandle.INVALID):
    ํ•จ์ˆ˜1()
    
    if ():
        ํ•จ์ˆ˜2()
    else:
        log("์˜ค๋ฅ˜2")
        
    log("์˜ค๋ฅ˜1")
}

 

์ด๋Ÿฐ ์ฝ”๋“œ ๋ณด๋‹ค๋Š”

try catch ๋ฌธ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ์ข‹์Œ

 

 

 

2. ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€

 

์˜ˆ์™ธ๋ฅผ ๋˜์งˆ๋•Œ ์–ด๋–ค ์˜ค๋ฅ˜์ธ์ง€ ์ถ”๊ฐ€๋กœ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฉด ์ข‹์Œ.

ex. log("Device response exception")

 

 

3. ํ˜ธ์ถœ์ž๋ฅผ ๊ณ ๋ ค

 

์˜ˆ์™ธ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ์—๋Ÿฌ์ฒ˜๋ฆฌ

 

BAD ์˜ˆ์‹œ

try {
    port.open();
} catch (e1) {
    reportPortError(e);
    log("Device ~ e");
} catch (e2){
    report~Error(e);
    log("~");
}
...

 

์ด๋ ‡๊ฒŒ ๊ฐ๊ฐ ์—๋Ÿฌ๋งˆ๋‹ค ์—๋Ÿฌ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•ด์ฃผ๊ธฐ ๋ณด๋‹ค๋Š”

 

์•„๋ž˜์ฒ˜๋Ÿผ

LocalPort port = new LocalPort(12);
try {
    port.open();
} catch (PortDeviceFailure e) {
    reportError(e);
    logger.log(e.getMessage() , 3);
} finally {
     ..
}

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ API๋ฅผ ๊ฐ์‹ธ๋ฉด์„œ ํ•˜๋‚˜์˜ ์˜ˆ์™ธ ์œ ํ˜•๊ณผ log๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” class๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

-> ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด ์—๋Ÿฌ๋งˆ๋‹ค log ์ž‘์„ฑ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋จ.

 

 

 

 

4. catch์—์„œ ๋…ผ๋ฆฌ ์ œ์–ด x (์ •์ƒ ํ๋ฆ„์„ ์ •์˜ํ•˜๋ผ)

 

BAD ์˜ˆ์‹œ

 

์‹๋น„ ๋น„์šฉ ์ฒญ๊ตฌํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

try {

    MealExpenses expense = expenseReportDAO.getMeals(employee.getID()); 

    m_total += expenses.getTotal();

} catch (MealExpensesNotFound e) { 

    m_total += getMealPerDiem();

}

 

try {

    // ์‹๋น„ ๋ƒˆ๋Š”์ง€ ์ •๋ณด ๊ฐ€์ ธ์˜ด

    //์ง์›์ด ์ฒญ๊ตฌํ•œ ์‹๋น„๋ฅผ ์ด๊ณ„์— ๋”ํ•จ()

} catch () { // ์‹๋น„ ๋น„์šฉ ์ฒญ๊ตฌ ํ•˜์ง€ ์•Š์Œ

    // ์ผ์ผ ๊ธฐ๋ณธ ์‹๋น„๋ฅผ ์ด๊ณ„์— ๋”ํ•จ()

}

 

 

์ด๊ฑฐ ๋ณด๋‹ค๋Š”

 

MealExpenses expense = expenseReportDAO.getMeals(employee.getID());

m_total += expenses.getTotal();

 

expenseReportDAO๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํ•ญ์ƒ MealExpenses ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•จ.

์ฒญ๊ตฌํ•œ ์‹๋น„๊ฐ€ ์—†๋‹ค๋ฉด MealExpenses ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์ผ์ผ ๊ธฐ๋ณธ ์‹๋น„๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•จ.

 

์ด๋Ÿฐ์‹์œผ๋กœ catch์—์„œ ํ๋ฆ„์„ ์ •์˜ํ•˜๊ธฐ๋ณด๋‹จ ์ •์ƒ ํ๋ฆ„์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•˜๋ฉด ์ข‹๋‹ค๊ณ  ํ•จ.

 

 

 

5. null ๋ฐ˜ํ™˜ x

 

if something != null { }

์ด๋Ÿฐ์‹์œผ๋กœ ์ฒดํฌํ•ด์•ผํ•˜๋Š”๋ฐ

ํ˜น์—ฌ๋ผ๋„ ๋น ๋œจ๋ฆฌ๋ฉด ํฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ง€์–‘ํ•˜๋ฉด ์ข‹๋‹ค๊ณ  ํ•จ.

 

 

 

 

6. null ์ „๋‹ฌ x 

 

null ์ „๋‹ฌ์‹œ NullPointerException ๋ฐœ์ƒ ์ฃผ์˜

 

assert ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ข‹์Œ

 

public class MetricsCalculator {
	public double xProjection(Point p1, Point p2) {
    	assert p1 != null : "p1 is null";
        assert p2 != null : "p2 is null";
        return (p2.x - p1.x) * 1.5;
    }
}

 

 

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๋Œ“๊ธ€