[ν΄λ¦° μ½λ] 3μ₯ ν¨μ
TIL (Today I Learned)
22.02.22~22.02.23
μ€λ μ½μ λ²μ
3μ₯. ν¨μ
μ± μμ κΈ°μ΅νκ³ μΆμ λ΄μ©
- μ΄λ€ νλ‘κ·Έλ¨μ΄λ κ°μ₯ κΈ°λ³Έμ μΈ λ¨μκ° ν¨μλ€.
- ν¨μλ μκ² λ§λ€μ΄μΌ νλ€. λ€μ λ§ν΄, ifλ¬Έ/elseλ¬Έ/whileλ¬Έμ λ€μ΄κ°λ λΈλ‘μ ν μ€μ΄μ΄μΌ νλ€λ λ§μ΄λ€. μ΄ λ§μ μ€μ²© κ΅¬μ‘°κ° μκΈΈλ§νΌ ν¨μκ° μ»€μ Έμλ μ λλ€λ λ»μ΄λ€. κ·Έλ¬λ―λ‘ ν¨μμμ λ€μ¬μ°κΈ° μμ€μ 1λ¨μ΄λ 2λ¨μ λμ΄μλ©΄ μλλ€.
- λ¨μν λ€λ₯Έ ννμ΄ μλλΌ μλ―Έ μλ μ΄λ¦μΌλ‘ λ€λ₯Έ ν¨μλ₯Ό μΆμΆν μ μλ€λ©΄ κ·Έ ν¨μλ μ¬λ¬ μμ μ νλ μ μ΄λ€[G34] -> μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ κ²λ νλμ μμ μ΄λ€!
- κ° ν¨μλ λ€μ ν¨μλ₯Ό μκ°νκ³ , κ° ν¨μλ μΌμ ν μΆμν μμ€μ μ μ§νλ€.
switch문
switch λ¬Έμ κΌ μ¬μ©ν΄μΌ νλ€λ©΄ λ€νμ κ°μ²΄λ₯Ό μμ±νλ μ½λ μμμ + μ ν μ ν νλμ ν λ²λ§ μ¬μ©νλ€.
1) μΆμν©ν 리μ switch λ¬Έμ μ¨κΈ°κ³ ν©ν λ¦¬κ° λμ νμν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±.
2) μΈν°νμ΄μ€λ₯Ό ν΅ν΄ ν¨μκ° νΈμΆ
3) λ€νμ±μΌλ‘ μΈν΄ μ€μ νμ ν΄λμ€μ ν¨μκ° μ€ν
public abstract class Employee {
public abstract boolean isPayday();
public abstract Money calculatePay();
public abstract void deliverPay(Money pay);
}
-----------------------------------
public interface EmployeeFactory {
public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType;
}
-----------------------------------
public class EmployeeFactoryImpl implements EmployeeFactory {
public Employee makeEmployee(EmployeeRecord r) throws InvalidEmployeeType [
switch (r.type) {
case COMMISIONED:
return new CommisionedEmployee(r);
case HOURLY:
return new HourlyEmployee(r);
case SALARIED;
}
}
}
ν¨μ μΈμ
ν¨μμμ μ΄μμ μΈ μΈμ κ°μλ 0κ°μ΄λ€. 3κ°λ κ°λ₯ν νΌνλ νΈμ΄ μ’κ³ , 4κ° μ΄μμ νΉλ³ν μ΄μ κ° νμνλ€. νΉλ³ν μ΄μ κ° μμ΄λ μ¬μ©νλ©΄ μ λλ€.
1) λ¨ν νμ
- μΈμμ μ§λ¬Έμ λμ§λ κ²½μ°
boolean fileExists("MyFile")
- μΈμλ₯Ό 무μΈκ°λ‘ λ³νν΄ κ²°κ³Όλ₯Ό λ°ννλ κ²½μ°
InputStream fileOpen("MyFile")
2) νλκ·Έ μΈμ
- ν¨μλ‘ booleanκ°μ λκΈ°μ§ λ§κ³ boolean trueμΈ ν¨μμ boolean falseμΈ ν¨μλ₯Ό κ°κ° λ§λ€μ΄λΌ
3) μ΄ν ν¨μ
- λ¨ν ν¨μλ‘ λ§λ€μ.
writeField(outputStream, name)
-> writeField λ©μλλ₯Ό outputStream ꡬμ±μμΌλ‘ λ§λ€μ΄ outputStream.writeField(name)μΌλ‘ νΈμΆ
-> outputStreamμ νμ¬ ν΄λμ€ κ΅¬μ±μ λ³μλ‘ λ§λ€μ΄ μΈμλ‘ λκΈ°μ§ μλλ€.
-> FieldWriterλΌλ μ ν΄λμ€λ₯Ό λ§λ€μ΄μ ꡬμ±μμμ outputStreamμ λ°κ³ write λ©μλ ꡬν
4) μΈμ κ°μ²΄
- μΈμκ° 2~3κ° νμνλ€λ©΄ μΌλΆλ₯Ό λ μμ μΈ ν΄λμ€ λ³μλ‘ μ μΈνμ
Circle makeCircle(double x, double y, double radius);
Circle makeCircle(Point center, double radius);
5) λμ¬μ ν€μλ
λ¨ν ν¨μλ ν¨μμ μΈμκ° λμ¬/λͺ μ¬ μμ μ΄λ€μΌ νλ€. writeField(name)
ν¨μ μ΄λ¦μ ν€μλλ₯Ό μΆκ°νλ©΄ μΈμ μμλ₯Ό κΈ°μ΅ν νμκ° μμ΄μ§λ€.
λΆμ ν¨κ³Όλ₯Ό μΌμΌν€μ§ λ§λΌ
λΆμ ν¨κ³Όλ₯Ό 무μνλ©΄ μκ°μ μΈ κ²°ν©μ΄λ μμ μ’ μμ±μ μ΄λν μ μκΈ° λλ¬Έμ, κ°κΈμ μ΄λ©΄ ν¨μ μ΄λ¦μ λͺ μνλ κ²μ΄ μ’λ€. μλ‘μ΄ ν¨μλ₯Ό λ§λλ κ²λ μ’μ λ°©λ².
μ€λ₯ μ½λλ³΄λ€ μμΈλ₯Ό μ¬μ©νλΌ
1) try-catch λΈλ‘μ λ³λ ν¨μλ‘ λ½μλ΄κΈ°
public void delete(Page page) {
try {
deletePageAndAllReferences(page);
} catch (Exception e) {
logErorr(e);
}
}
-------------------------------
private void deletePageAndAllReferences(Page page) throws Exception {
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
}
private void logError(Exception e) {
logger.log(e.getMessage());
}
2) Error.java μμ‘΄μ± μμ
μ€λ₯ μ½λλ₯Ό μ μνλ ν΄λμ€κ° λ³νλ€λ©΄ ν΄λΉ μ€λ₯ μ½λλ₯Ό μ¬μ©νλ ν΄λμ€ μ λΆλ₯Ό λ€μ μ»΄νμΌνκ³ λ€μ λ°°μΉν΄μΌ νλ€. μ€λ₯ μ½λ λμ μμΈλ₯Ό μ¬μ©νλ©΄ μ μμΈλ Exception ν΄λμ€μμ νμλκΈ° λλ¬Έμ μ¬μ»΄νμΌμ΄λ μ¬λ°°μΉ μμ΄λ μ μμΈ ν΄λμ€λ₯Ό μΆκ°ν μ μλ€.
ꡬ쑰μ νλ‘κ·Έλλ°
루ν μμμ break, continueλ κ±°μ μ¬μ©νμ§ λ§ κ². νΉν gotoλ μ¬μ© κΈμ§
ν¨μλ₯Ό μ§λ λ°©λ²
1. λ¨Όμ μ μ¨λ΄λ €κ°λ€ + λ¨μ ν μ€νΈ
2. κΈ°λ₯ λ¨μλ‘ λΆλ¦¬ / μ μ ν λ€μ΄λ° / μ€λ³΅ μ κ±° λ±μ κ³ λ €νμ¬ λ¦¬ν©ν λ§ + λ¨μ ν μ€νΈ
μ€λ μ½μ μκ°
λͺ©λ‘ 3-1μ 보λ μκ° μ‘Έν μ½λμ λ무 λκ°μμ λλλ€. κ±°μ μ μκΆ μλ°μΌλ‘ κ³ μν΄μΌ ν μ λ
μ΄λ² μ₯μμλ 무μμμ μΈ μ½λ μμ±λ²μ μ§μ νλ λ΄μ©μ΄ λ§μλ€. μλ 3κ°μ§ λ΄μ©μ΄ λ΄ μ½λμ μ£Ό λ¬Έμ μ μΈλ°, μμΌλ‘ ν¨μλ₯Ό μμ±ν λλ§λ€ μ΄ 3κ°μ§ λ΄μ©μ μ겨μΌκ² λ€. νΉν switchλ¬Έμ κΌ ν©ν 리 λ©μλλ₯Ό μ μ©ν΄λ΄μΌκ² λ€!
1) switchλ¬Έμ μ¬μ©
2) νλκ·Έ μΈμλ₯Ό ν¨μ μΈμλ‘ λκΈ°λ κ²
3) try-catch λΈλ‘ μ¬μ©
κΆκΈνκ±°λ μ μ΄ν΄λμ§ μλ λ΄μ©
μΆμ ν©ν 리 vs ν©ν 리 λ©μλ
- μΆμ ν©ν 리 ν¨ν΄(Abstract Factory Pattern) : μλ‘ κ΄λ ¨μ΄ μλ κ°μ²΄λ€μ ν΅μ§Έλ‘ λ¬Άμ΄μ ν©ν 리 ν΄λμ€λ‘ λ§λ€κ³ , μ΄λ€ ν©ν 리λ₯Ό 쑰건μ λ°λΌ μμ±νλλ‘ λ€μ ν©ν 리λ₯Ό λ§λ€μ΄μ κ°μ²΄λ₯Ό μμ±νλ ν¨ν΄
- ν©ν 리 λ©μλ ν¨ν΄ : 쑰건μ λ°λ₯Έ κ°μ²΄ μμ±μ ν©ν 리 ν΄λμ€λ‘ μμνμ¬, ν©ν λ₯΄ ν΄λμ€μμ κ°μ²΄λ₯Ό μμ±νλ ν¨ν΄
=> ν©ν 리 λ©μλ ν¨ν΄μμλ ꡬμ±νλ§λ€ ν©ν 리λ₯Ό λ§λ€μ΄ μ΄λ€ κ°μ²΄λ₯Ό νμ±νλλ°, κ·Έ κ°μ²΄μ ꡬμ±νμ μΌμ νλ―λ‘ μΆμ ν©ν 리 ν¨ν΄μ μ μ©νμ¬ κ΄λ ¨λ κ°μ²΄λ€μ νκΊΌλ²μ μΊ‘μννμ¬ ν©ν λ¦¬λ‘ λ§λ ν μΌκ΄λκ² κ°μ²΄ μμ±.
https://victorydntmd.tistory.com/300
[λμμΈν¨ν΄] μΆμ ν©ν 리 ν¨ν΄ ( Abstract Factory Pattern )
μΆμ ν©ν 리 ν¨ν΄ ( Abstract Factory Pattern ) μΆμ ν©ν 리 ν¨ν΄μ΄λΌλ μ΄λ¦λ§ λ΄μλ ν©ν 리 λ©μλ ν¨ν΄κ³Ό λΉμ·ν΄λ³΄μ΄μ§λ§, λͺ νν μ°¨μ΄μ μ΄ μμ΅λλ€. ν©ν 리 λ©μλ ν¨ν΄ 쑰건μ λ°λ₯Έ κ°μ²΄ μμ±
victorydntmd.tistory.com
μκ°μ μΈ κ²°ν©(temporal coupling)
μννΈμ¨μ΄μ μ€κ³ μμ μ체λ‘μμ μκ° μν
ex) λ©μλ Aλ μΈμ λ λ°λμ λ©μλ Bλ³΄λ€ λ¨Όμ νΈμΆν΄μΌ νλ€
1) λμμ±(κ°μ μκ°μ μΌμ΄λλ μΌ)
2) μμ(μκ° μμμ μΌλ€μ μλμ μμΉ)
=> μ°λ¦¬λ λμμ±μ νμ©νκ³ μμκ° μλ νλ‘κ·Έλ¨μ λ§λ€μ΄μΌ νλ€.
μμ μ’ μμ±(order dependency)
νμ μμ μ μ ν μμ μ΄ μλ£λ λκΉμ§ μμκ°γΉ μ μλ€.
- SRP : ν΄λμ€μλ ν κ°μ§, λ¨ ν κ°μ§ λ³κ²½ μ΄μ λ§ μ‘΄μ¬ν΄μΌ νλ€.
-> ν΄λμ€μ λ³κ²½ = μ½λμ λ³κ²½μ΄λ€.
- OCP : ν΄λμ€λ νμ₯μ μ΄λ € μμ΄μΌ νλ©° λ³κ²½μ λ«ν μμ΄μΌ νλ€.
-> μ μ§μμ μΆκ°ν λλ§λ€ μ½λκ° λ³κ²½λλ©΄ μ λλ€.