3.1 μ§λμΉκ² λ§μ μ£Όμ μμ κΈ°
μλ¬΄λ° μλ―Έμλ μ£Όμμ μμ€λ€.
λμ μ½λλ§ λ³΄μμλ λλ¬λμ§ μλ μ 보λ₯Ό "μ£Όμ"μΌλ‘ νμνμ.
3.2 μ£Όμ μ²λ¦¬λ μ½λ μ κ±°
μ£Όμ μ²λ¦¬λ μ½λλ μΌλ°μ μΈ μ£Όμκ³Ό λ¬λ¦¬ λͺ νν μ€λͺ ν μλ€.
μ΄λ μ½λμ νΌλλ§ κ°μ€μν€λ μ°λ κΈ°λ₯Ό λΌμΉλ κ²κ³Ό κ°λ€.
μ΄μ°¨νΌ μ£Όμ μ²λ¦¬λ μ½λλ₯Ό λ€μ μ°Ύμ μΌμ μλ€. μ κ±°νμ.
3.3 μ£Όμμ μμλ‘ λ체
2μ₯μμ 보μλ "맀μ§λλ²" μ¬μ© μ κ° λλ²μ μλ―Έμ λν μ£Όμμ λ¬μλλ κ²μ λμμ§ μμ λ°©λ²μ΄λ€.
νμ§λ§ μ°λ¦¬λ "μμ"λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ μ£Όμμμ΄ μ½λλ§μΌλ‘ μ£Όμμ λ체ν μ μλ€.
μ£Όμμ "μμ, λ³μ, νλ, λ©μλ μ΄λ¦"μΌλ‘ λ체ν μ μλ€λ©΄ λ°λ‘ μλνμ!
3.4 μ£Όμμ μ νΈλ¦¬ν° λ©μλλ‘ λ체
// round to integer percent
return Math.toIntExact(Math.round(averageFuel * 100));
μμ μ½λλ₯Ό μ΄ν΄νλ κ²μ κ°λ¨νμ§ μλ€. κ·Έλ κΈ°μ μ£Όμμ ν΅ν΄ μλ―Έλ₯Ό μ€λͺ νλ€.
μ£Όμμ μμ°κ³ μ½λλ§μΌλ‘ μλ―Έλ₯Ό λ΄ν¬μν¬ μ μμκΉ?
int roundedToPercent = Math.toIntExact(Math.round(averageFuel * 100));
μ°λ¦¬λ λ³μλͺ μ μλ―Έλ₯Ό λΆμ¬νκ³ μ£Όμμ μμ ν μ μλ€. νμ§λ§ νμμλ λ³μκ° μ¬μ©λλ€.
μ νΈλ¦¬ν° λ©μλ
int getAverageTankFillingPercent() {
double sum = 0;
for (double tankFilling : tanks) {
sum += tankFilling;
}
double averageFuel = sum / tanks.size();
return roundToIntegerPercent(averageFuel);
}
static int roundToIntegerPercent(double value) {
return Math.toIntExact(Math.round(value * 100));
}
μ μ½λμ²λΌ μ νΈλ¦¬ν° λ©μλλ₯Ό μ¬μ©νλ©΄ λͺκ°μ§ μ₯μ μ μ»μ μ μλ€.
- μ½λλͺ μΌλ‘ λμμ λν μ€λͺ μ΄ λλ―λ‘ μ£Όμ μμ κ°λ₯
- λ€λ₯Έ λ©μλ μμ λ§λ λ©μλλ₯Ό μ¬μ¬μ©ν μ μλ€.
- λ©μλμ κ³μΈ΅ κ΅¬μ‘°κ° μκΉμΌλ‘μ¨ μμ κ³μΈ΅ λ©μλμ λν μ΄ν΄λκ° κ°μ λ¨
κ²°λ‘ μ μΌλ‘ "μ νΈλ¦¬ν° λ©μλ"λ₯Ό μ¬μ©νλ©΄ μ£Όμλ§ μ κ±°λλ κ²μ΄ μλλΌ μ½λκ° λ λͺ¨λνλκ³ μΆμν μμ€λ κ· νμ μ΄λ£¨κ² λλ€.
3.5 ꡬν κ²°μ μ€λͺ νκΈ°
λ©μλ ꡬν μ μ¬μ©ν "μλ£κ΅¬μ‘°"μ "μκ³ λ¦¬μ¦"μ μ μ ννλμ§μ λν΄ μμΈνκ² μ€λͺ νκΈ°
ꡬν κ²°μ μ€λͺ ν νλ¦Ώ
λ©μλμ [μ¬μ©μ¬λ‘, μ°λ €μ¬ν, ν΄λ², νΈλ μ΄λμ€ν, λΉμ©]κΉμ§ λͺ¨λ μ€λͺ νλ€.
/* | |
In the context | μ¬μ©μ¬λ‘ |
facing | μ°λ €μ¬ν |
we decided | ν΄λ² |
to achieve | νμ§ |
accepting | λ¨μ |
*/ |
μ΄λ¬ν ν νλ¦Ώμ μ¬μ©νλ©΄ μ½λλ₯Ό μ΄ν΄νκΈ° μ¬μμ§κ³ 미리 μ μλ ꡬ쑰λ₯Ό λ°λ₯΄λ―λ‘ λλ£ κ°λ°μκ° μ£Όμμ μ΄ν΄νκΈ° μ½λ€.
λͺ¨λ μ½λμ μ΄μ²λΌ μ¬μ©νλ κ²μ λΉν¨μ¨μ μ΄λ€.
κ·Έλ¬λ―λ‘ μ€μν κ²°μ μ΄λ κΉλ€λ‘μ΄ μ½λλ₯Ό μ€λͺ ν λ μ ν νλ¦Ώμ μ¬μ©νμ.
3.6 μμ λ‘ μ€λͺ νκΈ°
class Supply {
/**
* The code universally identifies a supply.
*
* It follows a strict format, beginning with an S (for supply), followed
* by a five digit inventory number. Next comes a backslash that
* separates the country code from the preceding inventory number. This
* country code must be exactly two capital letters standing for one of
* the participating nations (US, EU, RU, CN). After that follows a dot
* and the actual name of the supply in lowercase letters.
*/
static final Pattern CODE =
Pattern.compile("^S\\d{5}\\\\(US|EU|RU|CN)\\.[a-z]+$");
}
μ μ½λμμ μ¬μ©νλ μ κ·μμ λμμ λν΄ μμΈνκ² μ€λͺ νμ§λ§ μ΄λκ° μμ½λ€. (μ΄ν΄νκΈ° μ΄λ ΅λ€)
class Supply {
/**
* μλ ννμμ μ΄λμλ μ¬κ³ μ½λλ₯Ό μλ³νλ€.
*
* Format: "S<inventory-number>\<COUNTRY-CODE>.<name>"
*
* Valid examples: "S12345\US.pasta", "S08342\CN.wrench",
* "S88888\EU.laptop", "S12233\RU.brush"
*
* Invalid examples:
* "R12345\RU.fuel" (Resource, not supply)
* "S1234\US.light" (Need five digits)
* "S01234\AI.coconut" (Wrong country code. Use US, EU, RU, or CN)
* " S88888\EU.laptop " (Trailing whitespaces)
*/
static final Pattern SUPPLY_CODE =
Pattern.compile("^S\\d{5}\\\\(US|EU|RU|CN)\\.[a-z]+$");
}
μ μΉλΌ λμμ λν΄μ ν μ€λ‘ κ°λ¨ν νννκ³ μ ν¨ν μμ μ μ ν¨νμ§ μμ μμ λ₯Ό μ£Όμμ μ€λͺ νλ©΄ μ½λλ₯Ό μ΄ν΄νκΈ° ν¨μ¬ μ¬μμ§λ€.
3.7 ν¨ν€μ§λ₯Ό JavaDocμΌλ‘ ꡬ쑰ννκΈ°
JavaDocμ΄λ μλ° APIκ° μ 곡νλ λ¬Έμν κΈ°λ₯μ΄λ€.
μμ½λ¬Έ, μ 체ν΄λμ€ λͺ©λ‘ λ± νμμλ νκΈ° μ μΈνκΈ°
JavaDocμ΄ ν¬ν¨ν΄μΌ νλ λ΄μ©
- μκ°λ¬Έ : ν¨ν€μ§ λ΄ ν΄λμ€λ‘ 무μμ ν μ μλμ§ μμ½ μ€λͺ
- ν¨ν€μ§ λ΄ μ£Όμ ν΄λμ€λ‘ 무μμ ν μ μλμ§ μ€λͺ νκ³ @linkλ₯Ό ν΅ν΄ ν΄λμ€λ‘ μ΄λ κ°λ₯νκ² λ§λ¬
- μ£Όμ μ¬μ© μ¬λ‘λ₯Ό μ΄λ»κ² ꡬννλ μ§ λ³΄μ¬ μ€ κ²
3.8 ν΄λμ€μ μΈν°νμ΄μ€λ₯Ό JavaDocμΌλ‘ ꡬ쑰ν
JavaDoc μμ± λ°©λ²
- μμ½λ¬Έκ³Ό λ³Έλ¬Έμ λΆλ¦¬ν΄μ μμ½λ¬Έμ΄ μ 보μ΄κ² νλ€.
- μΈν°νμ΄μ€κ° 보μ₯νλ λΆλ³κ³Ό μμ§μΌλ‘ λΆλ¦¬νλΌ
3.9 λ©μλλ₯Ό JavaDocμΌλ‘ ꡬ쑰ννκΈ°
/**
* Loads supplies onto the cargo ship.
*
* <p>
* Only lets you load as many supplies as there is remaining capacity.
*
* Example:
* <pre>
* int capacity = cargoShip.getRemainingCapacity(); // 1
* Queue<Supply> supplies = Arrays.asList(new Supply("Apple"));
* Queue<Supply> spareSupplies = cargoShip.load(supplies);
* spareSupplies.isEmpty(); // true;
* cargoShip.getRemainingCapacity() == 0; // true
* </pre>
*
* @param supplies to be loaded; must not be null
* @return supplies that could not be loaded because of too little
* capacity; is empty if everything has been loaded
* @throws NullPointerException if supplies is null
* @see CargoShip#getRemainingCapacity() check capacity
* @see CargoShip#unload() unload the supplies
*/
Queue<Supply> load(Queue<Supply> supplies);
int getRemainingCapacity();
ν΄λΉ λ©μλμ μ λ ₯κ³Ό λ΄λΆ μνκ° νΉμ μΆλ ₯κ³Ό μν λ³κ²½μ μ΄λ»κ² 보μ₯νλ μ§ λͺ μνλ€.
"μ€λͺ "κ³Ό "μ½λ μμ"κ° μ μ ν λ€μ΄κ°μΌλ©° @Param, @throws μμΈμ²λ¦¬κΉμ§ λͺ μνλ€.
@seeλ₯Ό ν΅ν΄ λ€λ₯Έ λ©μλλ μ°Έμ‘°ν μ μλ€.
3.10 μμ±μλ₯Ό JavaDocμΌλ‘ ꡬ쑰ννκΈ°
μμ±μλ μλ―Έμκ³ μλ§μ μ΄λ¦μ μμ±μλͺ μ ν λΉν μ μλ€.
κ·Έλμ JavaDoc μ£Όμμ μμ±μμ λν΄ μλ―Έ μ 보λ₯Ό μ μ ν μ€λͺ ν΄μΌ νλ€.
class Inventory {
List<Supply> supplies;
/**
* Creates an empty inventory.
*
* @see Inventory#Inventory(Collection) instantiate with initial supplies //μ΄κΈ° μ νμ μ΄κΈ°ν νλ ν¨μ
*/
Inventory() {
this(new ArrayList<>());
}
/**
* Creates an inventory with an initial shipment of supplies.
*
* @param initialSupplies Initial supplies.
* Must not be null, can be empty. //μμ±μ μ’
λ£νμ κ°μ²΄ μν μ 보λ₯Ό μλ €μ€ (μ¬ν μ 보) , λΉ μνκ° λκ±°λ μ΄κΈ°μ νμΌλ‘ μ±μμ§
* @throws NullPointerException if initialSupplies is null //null μ
λ ₯μμ NullPointerException λ°ν
* @see Inventory#Inventory() instantiate with no supplies //μ νμμ΄ μ΄κΈ°ν νλ ν¨μ //λ μμ±μμ κ΄κ³λ₯Ό μ€λͺ
νλ€.
*/
Inventory(Collection<Supply> initialSupplies) {
this.supplies = new ArrayList<>(initialSupplies);
}
}
@Paramλ 맀κ°λ³μλ₯Ό μ€λͺ νλ€.
@throws -> λ°μν μ μλ μμΈμ λν΄ μ€λͺ νλ€.
@see -> μ§κΈ μ¬μ©νλ κ² μ΄μΈμ λ€λ₯Έ λμμ μ μνλ€.
'πμ½μ μ± μ 리 > μλ° μ½λ©μ κΈ°μ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ° μ½λ©μ κΈ°μ ] 6μ₯ : μ¬λ°λ₯΄κ² λλ¬λ΄κΈ° (0) | 2021.04.15 |
---|---|
[μλ° μ½λ©μ κΈ°μ ] 5μ₯ : λ¬Έμ λ°μμ λλΉνκΈ° (0) | 2021.04.14 |
[μλ° μ½λ©μ κΈ°μ ] 4μ₯ : μ¬λ°λ₯΄κ² λͺ λͺ νκΈ° (0) | 2021.04.13 |
[μλ° μ½λ©μ κΈ°μ ] 2μ₯ : μ½λ μ€νμΌ λ 벨μ (0) | 2021.04.07 |
[μλ° μ½λ©μ κΈ°μ ] 1μ₯ : μ°μ μ 리λΆν° (0) | 2021.04.06 |