4μ₯. μ£Όμ πΏ
λμ μ½λμ μ£Όμμ λ¬μ§ λ§λΌ. μλ‘ μ§λΌ.
- μ£Όμμ μ€λλ μλ‘ μ½λμμ λ©μ΄μ§λ€.
μ£Όμμ μ€λλ μλ‘ μμ ν κ·Έλ¦λ κ°λ₯μ±λ 컀μ§λ€. μ΄μ λ λ¨μνλ€. νλ‘κ·Έλλ¨Έλ€μ΄ μ£Όμμ μ μ§νκ³ λ³΄μνκΈ°λ νμ€μ μΌλ‘ λΆκ°λ₯νλκΉ. - λΆμ νν μ£Όμμ μμ μλ μ£Όμλ³΄λ€ ν¨μ¬ λ λμλ€.
λΆμ νν μ£Όμμ λ μλ₯Ό ννΉνκ³ μ€λνλ€. λΆμ νν μ£Όμμ κ²°μ½ μ΄λ€μ§μ§ μμ κΈ°λλ₯Ό μ¬μ΄μ€λ€. λ μ΄μ μ§ν¬ νμκ° μλ κ·μΉμ΄λ μ§μΌμλ μ λλ κ·μΉμ λͺ μνλ€. - μ£Όμμ μλ―Έλ₯Ό λͺ
λ£νκ² λ°νμΌ νλ€.
κ·Έλ¦λ μ£Όμμ λ¬μλμ μνλ μλΉν λλ€. κ·Έλ¦¬κ³ μ£Όμμ΄ μ¬λ°λ₯Έμ§ κ²μ¦νκΈ°λ μ½μ§ μλ€. μ΄κ²μ΄ μλ―Έλ₯Ό λͺ λ£ν λ°νλ μ£Όμμ΄ νμν μ΄μ μΈ λμμ μ£Όμμ΄ μνν μ΄μ μ΄κΈ°λ νλ€. κ·Έλ¬λ―λ‘ μ£Όμμ λ¬ λλ λ λμ λ°©λ²μ΄ μλμ§ κ³ λ―Όνκ³ μ νν λ¬λλ‘ κ°λ³ν μ£Όμνλ€.
5μ₯. νμ λ§μΆκΈ° π
- κ°λ
μ λΉ νμΌλ‘ λΆλ¦¬νλΌ
μκ° μ¬μ΄λ λΉ νμ λ£μ΄ λΆλ¦¬ν΄μΌ λ§λ νλ€. λΉ νμ μλ‘μ΄ κ°λ μ μμνλ€λ μκ°μ λ¨μλ€. μ½λλ₯Ό μ½μ΄ λ΄λ €κ°λ€ 보면 λΉ ν λ°λ‘ λ€μ μ€μ λκΈΈμ΄ λ©μΆκΈ° λλ¬Έμ΄λ€. - μΈλ‘ λ°μ§λ
μ€λ°κΏμ΄ κ°λ μ λΆλ¦¬νλ€λ©΄ μΈλ‘ λ°μ§λλ μ°κ΄μ±μ μλ―Ένλ€. (μ¬κΈ°μ μ°κ΄μ±μ΄λ ν κ°λ μ μ΄ν΄νλ λ° λ€λ₯Έ κ°λ μ΄ μ€μν μ λλ€.) μ¦, μλ‘ λ°μ§ν μ½λ νμ μΈλ‘λ‘ κ°κΉμ΄ λμ¬μΌ νλ€λ λ»μ΄λ€. μ°κ΄μ±μ΄ κΉμ λ κ°λ μ΄ λ©λ¦¬ λ¨μ΄μ Έ μμΌλ©΄ μ½λλ₯Ό μ½λ μ¬λμ΄ μμ€ νμΌκ³Ό ν΄λμ€λ₯Ό μ¬κΈ°μ κΈ° λ€μ§κ² λλ€. - κ°μ§ λ²μ
λλ‘λ λΉ while λ¬Έμ΄λ for λ¬Έμ μ νλ€. μΈλ―Έμ½λ‘ (;)μ μ νμλ€ μ λλ‘ λ€μ¬ μ¨μ λ£μ΄μ€λ€. κ·Έλ κ² νμ§ μμΌλ©΄ λμ λμ§ μλλ€.
while(dis.read(buf, 0, readBufferSize) != -1)
;
6μ₯. κ°μ²΄μ μλ£κ΅¬μ‘° π΅
λ³μλ₯Ό λΉκ³΅κ°(private)λ‘ μ μνλ μ΄μ κ° μλ€. λ¨λ€μ΄ λ³μμ μμ‘΄νμ§ μκ² λ§λ€κ³ μΆμ΄μλ€. μΆ©λμ΄λ λ³λμ΄λ , λ³μ νμ μ΄λ ꡬνμ λ§λλ‘ λ°κΎΈκ³ μΆμ΄μλ€.
λ³μ μ¬μ΄μ ν¨μλΌλ κ³μΈ΅μ λ£λλ€κ³ ꡬνμ΄ μ μ λ‘ κ°μΆ°μ§μ§λ μλλ€. ꡬνμ κ°μΆλ €λ©΄ μΆμνκ° νμνλ€! κ·Έμ (νμ λ Όλ¦¬μ μΉμ°μ³) μ‘°ν ν¨μμ μ€μ ν¨μλ‘ λ³μλ₯Ό λ€λ£¬λ€κ³ ν΄λμ€κ° λμ§λ μλλ€. 그보λ€λ μΆμ μΈν°νμ΄μ€λ₯Ό μ κ³΅ν΄ μ¬μ©μκ° κ΅¬νμ λͺ¨λ₯Έ μ± μλ£μ ν΅μ¬μ μ‘°μν μ μμ΄μΌ μ§μ ν μλ―Έμ ν΄λμ€λ€.
// ꡬ체μ μΈ Point ν΄λμ€
public class Point {
public double x;
public double y;
}
// μΆμμ μΈ Point ν΄λμ€
public interface Point {
double getX();
double getY();
void setCartesian(double x, double y);
double getR();
double getTheta();
void setPolar(double r, doiuble theta);
}
// ꡬ체μ μΈ Vehicle ν΄λμ€
public interface Vehicle {
double getFuelTankCapacityInGallons();
double getGallonsOfGasoline();
}
// μΆμμ μΈ Vehicle ν΄λμ€
public interface Vehicle {
double getPercentFuelRemaining();
}
(μλ£ κ΅¬μ‘°λ₯Ό μ¬μ©νλ) μ μ°¨μ μΈ μ½λλ κΈ°μ‘΄ μλ£ κ΅¬μ‘°λ₯Ό λ³κ²½νμ§ μμΌλ©΄μ μ ν¨μλ₯Ό μΆκ°νκΈ° μ½λ€. λ°λ©΄, κ°μ²΄ μ§ν₯ μ½λλ κΈ°μ‘΄ ν¨μλ₯Ό λ³κ²½νμ§ μμΌλ©΄μ μ ν΄λμ€λ₯Ό μΆκ°νκΈ° μ½λ€.
λ°λμͺ½λ μ°Έμ΄λ€. μ μ°¨μ μΈ μ½λλ μλ‘μ΄ μλ£ κ΅¬μ‘°λ₯Ό μΆκ°νκΈ° μ΄λ ΅λ€. κ·Έλ¬λ €λ©΄ λͺ¨λ ν¨μλ₯Ό κ³ μ³μΌ νλ€. κ°μ²΄ μ§ν₯ μ½λλ μλ‘μ΄ ν¨μλ₯Ό μΆκ°νκΈ° μ΄λ ΅λ€. κ·Έλ¬λ €λ©΄ λͺ¨λ ν΄λμ€λ₯Ό κ³ μ³μΌ νλ€.
// μ μ°¨μ μΈ λν
public class Square {
public Point topLeft;
public double side;
}
public class Rectangle {
public Point topLeft;
public double height;
public double width;
}
public class Circle {
public Point center;
public double radius;
}
public class Geometry {
public final double PI = 3.141592653589793;
public double area(Object shape) throws NoSuchShapeException {
if (shape instanceof Square) {
Square s = (Square)shape;
return s.side * s.side;
}
else if (shape instanceof Rectangle) {
Rectangle r = (Rectangle)shape;
return r.height * r.width;
}
else if (shape instanceof Circle) {
Circle = (Circle)shape;
return PI * c.radius * c.radius;
}
throw new NoSuchShapeException();
}
}
λ§μ½ Geometry ν΄λμ€μ λλ κΈΈμ΄λ₯Ό ꡬνλ perimeter() ν¨μλ₯Ό μΆκ°νκ³ μΆλ€λ©΄ λν ν΄λμ€λ μ무 μν₯λ λ°μ§ μλλ€. λ°λλ‘ μ λνμ μΆκ°νκ³ μΆλ€λ©΄ Geometry ν΄λμ€μ μν ν¨μλ₯Ό κ³ μ³μΌ νλ€.
// λ€νμ μΈ λν
public class Square implements Shape {
private Point topLeft;
private double side;
public double area() {
return side * side;
}
}
public class Rectangle implements Shape {
private Point topLeft;
private double height;
private double width;
public double area() {
return height * width;
}
}
public class Circle implements Shape {
private Point center;
private double radius;
public final double PI = 3.141592653589793;
public double area() {
return PI * radius * radius;
}
}
μ¬κΈ°μ area()λ λ€ν(polymorphic) λ©μλλ€. Geometry ν΄λμ€λ νμ μλ€. κ·Έλ¬λ―λ‘ μ λνμ μΆκ°ν΄λ κΈ°μ‘΄ ν¨μμ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μλλ€. λ°λ©΄ μ ν¨μλ₯Ό μΆκ°νκ³ μΆλ€λ©΄ λν ν΄λμ€ μ λΆλ₯Ό κ³ μ³μΌ νλ€.
μ΄λ° νΌλμΌλ‘ λ§λ―Έμμ λλλ‘ μ λ°μ κ°μ²΄, μ λ°μ μλ£ κ΅¬μ‘°μΈ μ‘μ’ κ΅¬μ‘°κ° λμ¨λ€. μ΄λ¬ν μ‘μ’ κ΅¬μ‘°λ μλ‘μ΄ ν¨μλ λ¬Όλ‘ μ΄κ³ μλ‘μ΄ μλ£ κ΅¬μ‘°λ μΆκ°νκΈ° μ΄λ ΅λ€. μμͺ½ μΈμμμ λ¨μ λ§ λͺ¨μλμ ꡬ쑰λ€. κ·Έλ¬λ―λ‘ μ‘μ’ κ΅¬μ‘°λ λλλ‘ νΌνλ νΈμ΄ μ’λ€.
6μ₯ κ²°λ‘
κ°μ²΄λ λμμ 곡κ°νκ³ μλ£λ₯Ό μ¨κΈ΄λ€. κ·Έλμ κΈ°μ‘΄ λμμ λ³κ²½νμ§ μμΌλ©΄μ μ κ°μ²΄ νμ μ μΆκ°νκΈ° μ¬μ΄ λ°λ©΄, κΈ°μ‘΄ κ°μ²΄μ μ λμμ μΆκ°νκΈ°λ μ΄λ ΅λ€. μλ£ κ΅¬μ‘°λ λ³λ€λ₯Έ λμ μμ΄ μλ£λ₯Ό λ ΈμΆνλ€. κ·Έλμ κΈ°μ‘΄ μλ£ κ΅¬μ‘°μ μ λμμ μΆκ°νκΈ°λ μ¬μ°λ, κΈ°μ‘΄ ν¨μμ μ μλ£ κ΅¬μ‘°λ₯Ό μΆκ°νκΈ°λ μ΄λ ΅λ€.
(μ΄λ€) μμ€ν μ ꡬνν λ, μλ‘μ΄ μλ£ νμ μ μΆκ°νλ μ μ°μ±μ΄ νμνλ©΄ κ°μ²΄κ° λ μ ν©νλ€. λ€λ₯Έ κ²½μ°λ‘ μλ‘μ΄ λμμ μΆκ°νλ μ μ°μ±μ΄ νμνλ©΄ μλ£ κ΅¬μ‘°μ μ μ°¨μ μΈ μ½λκ° λ μ ν©νλ€. μ°μν μννΈμ¨μ΄ κ°λ°μλ νΈκ²¬ μμ΄ μ΄ μ¬μ€μ μ΄ν΄ν΄ μ§λ©΄ν λ¬Έμ μ μ΅μ μΈ ν΄κ²°μ± μ μ ννλ€.
'π κ°λ° μμ > ν΄λ¦° μ½λ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν΄λ¦° μ½λ(Clean Code) - 11μ₯, 12μ₯ (0) | 2023.01.11 |
---|---|
ν΄λ¦° μ½λ(Clean Code) - 10μ₯ (0) | 2023.01.11 |
ν΄λ¦° μ½λ(Clean Code) - 8μ₯, 9μ₯ (0) | 2023.01.10 |
ν΄λ¦° μ½λ(Clean Code) - 7μ₯ (0) | 2023.01.10 |
ν΄λ¦° μ½λ(Clean Code) - 1μ₯, 2μ₯, 3μ₯ (0) | 2023.01.08 |