λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“šμ½μ€ μ±… 정리/μžλ°” μ½”λ”©μ˜ 기술

(8)
[μžλ°” μ½”λ”©μ˜ 기술] 8μž₯ : 데이터 흐름 8μž₯μ—μ„œλŠ” μžλ°” ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž¨μ˜ 핡심 κ°œλ…μ„ μ„€λͺ…ν•˜κ² λ‹€. - ν•¨μˆ˜ν˜• 방식이 λͺ…λ Ήν˜• 방식을 μ›”λ“±νžˆ λŠ₯κ°€ν•˜λŠ” 경우. - 읡λͺ… 클래슀λ₯Ό λͺ…μΎŒν•˜κ²Œ λŒ€μ²΄ν•˜λŠ” 방법 - 자료 ꡬ쑰λ₯Ό 더 효율적으둜 μˆœνšŒν•˜λŠ” 방법 - μ˜΅μ…”λ„λ‘œ ν”„λ‘œκ·Έλž¨μ„ 덜 μ·¨μ•½ν•˜κ²Œ λ§Œλ“œλŠ” 방법 8.1 읡λͺ… 클래슀 λŒ€μ‹  λžŒλ‹€ μ‚¬μš©ν•˜κΈ° 문제 μ½”λ“œ class Calculator { Map values = new HashMap(); Double square(Double x) { Function squareFunction = new Function() { @Override public Double apply(Double value) { return value * value; } }; return values.computeIfAbsent(x, squareFun..
[μžλ°” μ½”λ”©μ˜ 기술] 7μž₯ : 객체 λ””μžμΈ μžλ°”μ˜ ν΄λž˜μŠ€μ™€ 객체λ₯Ό μ˜¬λ°”λ₯΄κ²Œ κΈ°λŠ₯만 λ™μž‘ν•˜κ²Œ ν•˜λŠ” 것은 λΆ€μ‘±ν•˜λ‹€! 보기 μ’‹μ•„μ•Ό ν•˜κ³  μ‚¬μš©ν•˜κΈ°λ„ νŽΈν•΄μ•Όλ§Œ ν•œλ‹€!! 7μž₯μ—μ„œλŠ” 더 객체 지ν–₯적이고 κ°•λ ₯ν•œ μ½”λ“œλ₯Ό λ§Œλ“œλŠ”λ° μœ μš©ν•˜κ²Œ 쓰일 μžλ°”μ˜ 보편적인 λ””μžμΈ 원리λ₯Ό κ°•μ‘°ν•˜κ² λ‹€. 7.1 뢈 λ§€κ°œλ³€μˆ˜λ‘œ λ©”μ„œλ“œ λΆ„ν•  문제 μ½”λ“œ void log(String message, boolean classified) throws IOException { if (classified) { writeMessage(message, CAPTAIN_LOG); } else { writeMessage(message, CREW_LOG); } } μœ„ μ½”λ“œλŠ” boolean의 μƒνƒœμ— 따라 μ„œλ‘œ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. μ΄λŠ” λ™μž‘μ— λ¬Έμ œκ°€ μ—†μ§€λ§Œ 읽기 λΆˆνŽΈν•˜κ³  λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ΄ True와..
[μžλ°” μ½”λ”©μ˜ 기술] 6μž₯ : μ˜¬λ°”λ₯΄κ²Œ λ“œλŸ¬λ‚΄κΈ° 6.1 Given-When-Then으둜 ν…ŒμŠ€νŠΈ ꡬ쑰화 JUnit은 μžλ°” 클래슀 λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” μ†ν•˜μ§€ μ•Šμ§€λ§Œ μžλ°”μ—μ„œ λ‹¨μœ„ ν…ŒμŠ€νŠΈ μž‘μ„±ν•˜λŠ” μ‚¬μ‹€μƒμ˜ ν‘œμ€€μ΄λ‹€. λ©”μ„œλ“œμ— @Test만 μΆ”κ°€ν•˜λ©΄ JUnit이 μ•Œμ•„μ„œ ν…ŒμŠ€νŠΈλ‘œ μ‹€ν–‰ν•œλ‹€. 문제 μ½”λ“œ @Test void setPlanetarySpeedIs7667() { CruiseControl cruiseControl = new CruiseControl(); cruiseControl.setPreset(SpeedPreset.PLANETARY_SPEED); Assertions.assertTrue(7667 == cruiseControl.getTargetSpeedKmh()); } μœ„ ν…ŒμŠ€νŠΈλŠ” μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•œλ‹€. ν•˜μ§€λ§Œ μš°λ¦¬λŠ” μ’€ 더 μ½”λ“œλ₯Ό κ΅¬μ‘°ν™”ν•˜μ—¬ 읽기 μ‰½κ²Œ λ°”κΏ€ μˆ˜λ„ 있..
[μžλ°” μ½”λ”©μ˜ 기술] 5μž₯ : 문제 λ°œμƒμ— λŒ€λΉ„ν•˜κΈ° 5.1 λΉ λ₯Έ μ‹€νŒ¨ 문제 μ½”λ“œ class CruiseControl { static final double SPEED_OF_LIGHT_KMH = 1079252850; static final double SPEED_LIMIT = SPEED_OF_LIGHT_KMH; private double targetSpeedKmh; void setTargetSpeedKmh(double speedKmh) { if (speedKmh < 0) { throw new IllegalArgumentException(); } else if (speedKmh κ°€μž₯ ꡬ체적인 μ˜ˆμ™Έλ₯Ό 작자!! λ§Œμ•½ μ—¬λŸ¬ 개의 μ˜ˆμ™Έλ₯Ό λ˜‘κ°™μ€ λ°©λ²•μœΌλ‘œ μ²˜λ¦¬ν•œλ‹€λ©΄ 닀쀑 캐치 방식을 μ‚¬μš©ν•˜μž. ex) catch(NumberFormatException | IOExcep..
[μžλ°” μ½”λ”©μ˜ 기술] 4μž₯ : μ˜¬λ°”λ₯΄κ²Œ λͺ…λͺ…ν•˜κΈ° ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 이름을 μ˜¬λ°”λ₯΄κ²Œ μ§“λŠ” 것은 μ€‘μš”ν•˜λ‹€. ν•˜μ§€λ§Œ νŒ¨ν‚€μ§€, 클래슀, λ©”μ„œλ“œ, ν•„λ“œ, λ§€κ°œλ³€μˆ˜, 지역 λ³€μˆ˜ λ“± λͺ…λͺ…ν•  μš”μ†Œκ°€ λ„ˆλ¬΄ 많기 λ•Œλ¬Έμ— λͺ¨λ“  μš”μ†Œμ— 쒋은 이름을 μ§“λŠ” 것은 μ–΄λ ΅λ‹€. 4μž₯μ—μ„œλŠ” μ½”λ“œ μš”μ†Œμ— κ±Έλ§žλŠ” 이름을 ν• λ‹Ήν•˜λŠ” 방법에 λŒ€ν•΄μ„œ λ°°μš΄λ‹€. λͺ…λͺ…ν•  땐 μžλ°” κ·œμΉ™μ΄ μ€‘μš”ν•˜λ©°, λ©”μ„œλ“œ λͺ…λͺ…은 κ°„κ²°ν•΄μ•Όλ§Œ ν•˜λ©° μ˜λ―Έμ—†κ±°λ‚˜ ν•œ κΈ€μžμ§œλ¦¬ 이름은 ν”Όν•΄μ•Όλ§Œ ν•œλ‹€. 4.1 μžλ°” λͺ…λͺ… κ·œμΉ™ μ‚¬μš©ν•˜κΈ° μ•„λž˜ μ½”λ“œλŠ” μ–΄λ–€ λ¬Έμ œκ°€ μžˆμ„κΉŒ..? class Rover { static final double WalkingSpeed = 3; final String SerialNumber; double MilesPerHour; Rover(String NewSerialNumber) { SerialNumber = Ne..
[μžλ°” μ½”λ”©μ˜ 기술] 3μž₯ : 슬기둭게 주석 μ‚¬μš©ν•˜κΈ° 3.1 μ§€λ‚˜μΉ˜κ²Œ λ§Žμ€ 주석 μ—†μ• κΈ° μ•„λ¬΄λŸ° μ˜λ―Έμ—†λŠ” 주석은 μ—†μ•€λ‹€. λŒ€μ‹  μ½”λ“œλ§Œ λ³΄μ•„μ„œλŠ” λ“œλŸ¬λ‚˜μ§€ μ•ŠλŠ” 정보λ₯Ό "주석"으둜 ν‘œμ‹œν•˜μž. 3.2 주석 처리된 μ½”λ“œ 제거 주석 처리된 μ½”λ“œλŠ” 일반적인 주석과 달리 λͺ…ν™•νžˆ μ„€λͺ…νžˆ μ—†λ‹€. μ΄λŠ” μ½”λ“œμ— ν˜Όλž€λ§Œ κ°€μ€‘μ‹œν‚€λŠ” μ“°λ ˆκΈ°λ₯Ό λΌμ–ΉλŠ” 것과 κ°™λ‹€. μ–΄μ°¨ν”Ό 주석 처리된 μ½”λ“œλ₯Ό λ‹€μ‹œ 찾을 일은 μ—†λ‹€. μ œκ±°ν•˜μž. 3.3 주석을 μƒμˆ˜λ‘œ λŒ€μ²΄ 2μž₯μ—μ„œ λ³΄μ•˜λ˜ "λ§€μ§λ„˜λ²„" μ‚¬μš© μ‹œ 각 λ„˜λ²„μ— μ˜λ―Έμ— λŒ€ν•œ 주석을 λ‹¬μ•„λ†“λŠ” 것은 λ‚˜μ˜μ§€ μ•Šμ€ 방법이닀. ν•˜μ§€λ§Œ μš°λ¦¬λŠ” "μƒμˆ˜"λ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ 주석없이 μ½”λ“œλ§ŒμœΌλ‘œ 주석을 λŒ€μ²΄ν•  수 μžˆλ‹€. 주석을 "μƒμˆ˜, λ³€μˆ˜, ν•„λ“œ, λ©”μ„œλ“œ 이름"으둜 λŒ€μ²΄ν•  수 μžˆλ‹€λ©΄ λ°”λ‘œ μ‹œλ„ν•˜μž! 3.4 주석을 μœ ν‹Έλ¦¬ν‹° λ©”μ„œλ“œλ‘œ λŒ€μ²΄ // round to intege..
[μžλ°” μ½”λ”©μ˜ 기술] 2μž₯ : μ½”λ“œ μŠ€νƒ€μΌ λ ˆλ²¨μ—… 2.1 맀직 λ„˜λ²„λ₯Ό μƒμˆ˜λ‘œ λŒ€μ²΄ void setPreset(int speedPreset) { if (speedPreset == 2) { setTargetSpeedKmh(16944); } else if (speedPreset == 1) { setTargetSpeedKmh(7667); } else if (speedPreset == 0) { setTargetSpeedKmh(0); } } void setTargetSpeedKmh(double speed) { targetSpeedKmh = speed; } μœ„ μ½”λ“œ 쑰각처럼 μ•„λ¬΄λŸ° μ˜λ―Έμ—†λŠ” μˆ«μžκ°€ ν”„λ‘œκ·Έλž¨μ„ λ™μž‘μ„ μ œμ–΄ν•œλ‹€λ©΄ "맀직 λ„˜λ²„"라고 λΆ€λ₯Έλ‹€. μ΄λŸ¬ν•œ λ§€μ§λ„˜λ²„μ˜ μ‚¬μš©μ€ μ •ν™•ν•œ 뜻이 μ •ν•΄μ Έμžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ°œμƒν•˜κΈ° μ‰¬μš°λ©° μ‚¬μš©μžκ°€ λ©”μ„œλ“œ 내뢀에 λŒ€ν•œ 지..
[μžλ°” μ½”λ”©μ˜ 기술] 1μž₯ : μš°μ„  정리뢀터 1.1 λΆˆν•„μš”ν•œ 비ꡐ ν”Όν•˜κΈ° microscope.isInorganic(sample) 이 Bool을 λ°˜ν™˜ν•œλ‹€λ©΄ λΆˆν•„μš”ν•˜κ²Œ True, False둜 λΉ„κ΅ν•΄μ„œ 쑰건문을 μ²΄ν¬ν•˜μ§€ 말고 κ°„λ‹¨ν•˜κ²Œ μ—†μ• μž. if(microscope.isInorganic(sample) == true) if(microscope.isInorganic(sample) == false) 보단 if(microscope.isInorganic(sample)) if(!microscope.isInorganic(sample)) λ₯Ό μ‚¬μš©ν•˜μž. 1.2 λΆ€μ • ν”Όν•˜κΈ° 1. λ©”μ„œλ“œκ°€ λ°˜ν™˜ κ°’μœΌλ‘œ False(λΆ€μ •)을 λ°˜ν™˜ν•˜κ²Œ 되면 ν•œλ²ˆ 더 μƒκ°ν•˜λ©° 이해해야 ν•œλ‹€. 2. λ°˜ν™˜ 값이 긍정인 것을 ꡳ이 `!`을 μ΄μš©ν•΄μ„œ λΆ€μ •μœΌλ‘œ λ°”κΎΈλ©΄ ν•œλ²ˆ 더 μƒκ°ν•˜λ©° 이해해야 ν•œλ‹€. ..

λ°˜μ‘ν˜•