CleanCode TIL (2022.02.14)

Henry ChoΒ·2022λ…„ 2μ›” 14일
0

λ…Έκ°œλΆ

λͺ©λ‘ 보기
20/31

DAY 22

πŸ”–Β μ˜€λŠ˜ 읽은 λ²”μœ„ : 8. 경계(143~152p)


πŸ€“Β μ±…μ—μ„œ κΈ°μ–΅ν•˜κ³  싢은 λ‚΄μš©

μ™ΈλΆ€ μ½”λ“œ μ‚¬μš©ν•˜κΈ°

  • μΈν„°νŽ˜μ΄μŠ€ 제곡자: 더 λ§Žμ€ ν™˜κ²½μ— λŒ€ν•œ μ μš©μ„± λ„“νžˆλ € 애씀
  • μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©μž: μžμ‹ μ˜ μš”κ΅¬μ— μ§‘μ€‘ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€ λ§Œλ“€κΈ°λ₯Ό λ°”λžŒ

μƒˆλ‘œμš΄ 클래슀둜 경계 감싸기 eg) Map

  • Map 이 λ°˜ν™˜ν•˜λŠ” Objectλ₯Ό μ˜¬λ°”λ₯Έ μœ ν˜•μœΌλ‘œ λ³€ν™˜ν•  μ±…μž„μ€ μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ— μžˆλ‹€
    Map sensors = new HashMap();
    ...
    Sensor s = (Sensor)sensors.get(sensorId);
  • Generic을 μ‚¬μš©ν•˜λ©΄ 가독성 증가
    Map<String, Sensor> sensors = new HashMap<Sensor>(); 
    ...
    Sensor s = sensors.get(sensorId);
  • μ—¬μ „νžˆ Map<String, Sensor> κ°€ ν•„μš”ν•˜μ§€ μ•Šμ€ κΈ°λŠ₯κΉŒμ§€ 제곡
  • Map μΈν„°νŽ˜μ΄μŠ€κ°€ λ³€ν•  경우 μˆ˜μ •ν•  μ½”λ“œκ°€ λ§Žμ•„μ§
  • Generic μ‚¬μš©μ—¬λΆ€λ₯Ό Sensors μ•ˆμ—μ„œ κ²°μ •ν•˜μž
    public class Sensors {
        private Map sensors = new HashMap();
        public Sensor getById(String id) {
            return (Sensor) sensors.get(id);
        }
        // ...
    }
  • 경계 μΈν„°νŽ˜μ΄μŠ€μΈ Map을 Sensors μ•ˆμœΌλ‘œ μˆ¨κΉ€μœΌλ‘œμ„œ Map μΈν„°νŽ˜μ΄μŠ€κ°€ 변해도 λ‚˜λ¨Έμ§€ ν”„λ‘œκ·Έλž¨μ— 영ν–₯을 λ―ΈμΉ˜μ§€μ•ŠμŒ
  • Sensors ν΄λž˜μŠ€λŠ” ν•„μš”ν•œ μΈν„°νŽ˜μ΄μŠ€λ§Œ 제곡
  • 무쑰건 μΊ‘μŠν™” ν•˜λΌλŠ” μ†Œλ¦¬κ°€ μ•„λ‹ˆλΌ Map κ³Ό 같은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ—¬κΈ°μ €κΈ° λ„˜κΈ°μ§€ λ§λΌλŠ” μ†Œλ¦¬

경계 μ‚΄ν”Όκ³  읡히기

ν•™μŠ΅ ν…ŒμŠ€νŠΈ

: μ™ΈλΆ€ νŒ¨ν‚€μ§€λ₯Ό κ°€μ Έμ™€μ„œ κ³§λ°”λ‘œ 우리μͺ½ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” λŒ€μ‹  κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•΄ μ™ΈλΆ€ μ½”λ“œλ₯Ό 읡히자

  • ν†΅μ œλœ ν™˜κ²½μ—μ„œ APIλ₯Ό μ‚¬μš©ν•˜λ €λŠ” λͺ©μ μ—λ§Œ μ΄ˆμ μ„ 맞좰 ν…ŒμŠ€νŠΈ 진행

log4j 읡히기

  • ν…ŒμŠ€νŠΈλ₯Ό μš°μ„  μž‘μ„±ν•˜μ—¬ ν•„μš”ν•œ μ‚¬μš©λ²• νŒŒμ•…
@Test
public void testLogCreate() {
    Logger logger = Logger.getLogger("MyLogger");
    logger.info("hello");
}
  • Appenderκ°€ ν•„μš”
@Test
public void testLogAddAppender() {
    Logger logger = Logger.getLogger("MyLogger");
    ConsoleAppender appender = new ConsoleAppender();
    logger.addAppender(appender);
    logger.info("hello");
}
  • 좜λ ₯ 슀트림이 μ—†λ‹€
@Test
public void testLogAddAppender() {
    Logger logger = Logger.getLogger("MyLogger");
    logger.removeAllAppenders();
    logger.addAppender(new ConsoleAppender(
        new PatternLayout("%p %t %m%n"),
        ConsoleAppender.SYSTEM_OUT));
    logger.info("hello");
}
  • 사싀 ConsoleAppender.SYSTEM_OUT κ°€ 없어도 λœλ‹€.
public class LogTest {
    private Logger logger;
    @Before
    public void initialize() {
        logger = Logger.getLogger("logger");
        logger.removeAllAppenders();
        Logger.getRootLogger().removeAllAppenders();
    }
    @Test
    public void basicLogger() {
        BasicConfigurator.configure();
        logger.info("basicLogger");
    }
    @Test
    public void addAppenderWithStream() {
        logger.addAppender(new ConsoleAppender(
            new PatternLayout("%p %t %m%n"), ConsoleAppender.SYSTEM_OUT));
        logger.info("addAppenderWithStream");
    }
    @Test
    public void addAppenderWithoutStream() {
        logger.addAppender(new ConsoleAppender(new PatternLayout("%p %t %m%n")));
        logger.info("addAppenderWithoutStream");
    }
}

ν•™μŠ΅ ν…ŒμŠ€νŠΈλŠ” 곡짜 이상이닀

  • νˆ¬μžν•˜λŠ” λ…Έλ ₯보닀 μ–»λŠ” μ„±κ³Όκ°€ 크닀
  • νŒ¨ν‚€μ§€ μƒˆ 버전이 λ‚˜μ˜¬ λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ μœ„ν—˜ λ°œμƒ
  • μ‹€μ œ μ½”λ“œμ™€ λ™μΌν•œ λ°©μ‹μœΌλ‘œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 경계 ν…ŒμŠ€νŠΈ ν•„μš”

아직 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κΈ°

  • μ•„λŠ” μ½”λ“œμ™€ λͺ¨λ₯΄λŠ” μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜λŠ” 경계
  • μƒλŒ€νŽΈ μΈν„°νŽ˜μ΄μŠ€κ°€ μ •μ˜ λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ 아직 λͺ¨λ₯΄λŠ” 지식일 경우, 자체적으둜 μš°λ¦¬κ°€ λ°”λΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜
  • λ‚˜μ€‘μ— 점차 쀑간 API λ₯Ό κ΅¬ν˜„ν•˜μ—¬ 간극을 메움

κΉ¨λ—ν•œ 경계

  • 섀계가 μš°μˆ˜ν•˜λ‹€λ©΄ νˆ¬μžμ™€ μž¬μž‘μ—…μ΄ 크지 μ•ŠμŒ
  • ν†΅μ œν•˜μ§€ λͺ»ν•˜λŠ” μ½”λ“œμΌ 경우 λ§Žμ€ νˆ¬μžμ™€ ν–₯ν›„ λ³€κ²½ λΉ„μš© λ°œμƒ
  • μ™ΈλΆ€ νŒ¨ν‚€μ§€λ₯Ό ν˜ΈμΆœν•˜λŠ” μ½”λ“œλ₯Ό κ°€λŠ₯ν•œ 쀄여 경계λ₯Ό 관리
  • μƒˆλ‘œμš΄ 클래슀둜 경계λ₯Ό κ°μ‹Έκ±°λ‚˜ adapterνŒ¨ν„΄μ„ μ‚¬μš©ν•΄ μš°λ¦¬κ°€ μ›ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 점차 νŒ¨ν‚€μ§€κ°€ μ œκ³΅ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œ λ³€ν™˜

πŸ€”Β λ– μ˜€λ₯΄λŠ” 생각

  • μ˜€ν”ˆ μ†ŒμŠ€ μ§„μ˜μ— λ°œμ„ λ“€μ—¬λ†“μœΌλ©΄μ„œ μ–΄λ–»κ²Œλ“  빨리 μ‚¬μš©ν•΄λ³΄λ €λŠ” 마음 λΏμ΄μ—ˆλŠ”λ° ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λŠ” μŠ΅κ΄€μ„ κΈΈλŸ¬μ•Ό κ² λ‹€

πŸ”ŽΒ μ§ˆλ¬Έ

πŸ“Β μ†Œκ° 3쀄 μš”μ•½

  • μƒˆλ‘œμš΄ 클래슀둜 경계λ₯Ό 감싸 ν•„μš”ν•œ μΈν„°νŽ˜μ΄μŠ€λ§Œ 제곡
  • μ™ΈλΆ€ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” ν•™μŠ΅ ν…ŒμŠ€νŠΈ λ¨Όμ €
  • 아직 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λͺ¨λ₯΄λŠ” μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜κ³  좔후에 Adapter api 둜 간극을 메움
profile
Full stack tech visionary

0개의 λŒ“κΈ€