관리 메뉴

λͺ©λ‘λ””μžμΈνŒ¨ν„΄ (17)

JUINTINATION

μŠ€νŠΈλž˜ν‹°μ§€(Strategy) νŒ¨ν„΄

μŠ€νŠΈλž˜ν‹°μ§€ νŒ¨ν„΄μ΄λž€? μ–΄λ–€ λͺ©μ μ„ λ‹¬μ„±ν•˜κΈ° μœ„ν•΄ 일을 μˆ˜ν–‰ν•˜λŠ” 방식, λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™, 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ 등을 μ˜λ―Έν•˜λŠ” μ „λž΅μ„ μ‰½κ²Œ λ°”κΏ€ 수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” νŒ¨ν„΄μ΄λ‹€. ν”„λ‘œκ·Έλž¨μ—μ„œ μ „λž΅μ„ μ‹€ν–‰ν•  λ•ŒλŠ” μ‰½κ²Œ μ „λž΅μ„ λ°”κΏ”μ•Ό ν•  ν•„μš”κ°€ μžˆλŠ” κ²½μš°κ°€ 많이 λ°œμƒν•˜λŠ”λ° 특히 κ²Œμž„ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ κ²Œμž„ 캐릭터가 μžμ‹ μ΄ μ²˜ν•œ 상황에 따라 κ³΅κ²©μ΄λ‚˜ ν–‰λ™ν•˜λŠ” 방식을 λ°”κΎΈκ³  싢을 λ•Œ μŠ€νŠΈλž˜ν‹°μ§€ νŒ¨ν„΄μ€ 맀우 μœ μš©ν•˜κ²Œ 쓰인닀. λ‹€μŒκ³Ό 같이 λ‘œλ΄‡μ„ λ§Œλ“œλŠ” ν΄λž˜μŠ€κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž. public class Main { public static void main(String[] args) { Robot taekwonV = new TaekwonV("TaekwonV"); Robot atom = new Atom("Ateom"); Sy..

λ””μžμΈνŒ¨ν„΄ κ°œμš”

λ””μžμΈνŒ¨ν„΄μ΄λž€? μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 섀계할 λ•Œ νŠΉμ • λ§₯λ½μ—μ„œ 자주 λ°œμƒν•˜λŠ” 고질적인 λ¬Έμ œλ“€μ΄ 또 λ°œμƒν–ˆμ„ λ•Œ μž¬μ‚¬μš©ν•  수 μžˆλŠ” ν•΄κ²°μ±… νŒ¨ν„΄μ΄λž€? λΉ„μŠ·ν•˜κ±°λ‚˜ λ™μΌν•œ 양식 λ˜λŠ” μœ ν˜•λ“€μ΄ λ°˜λ³΅λ˜μ–΄ λ‚˜νƒ€λ‚˜λŠ” 것 λ¬Έμ œμ™€ 해결책도 λ™μΌν•œ μœ ν˜•μ΄λ‚˜ 양식을 톡해 μ‰½κ²Œ 찾을 수 μžˆλ‹€. λ””μžμΈ νŒ¨ν„΄μ— μ μ ˆν•œ 격언 바퀴λ₯Ό λ‹€μ‹œ 발λͺ…ν•˜μ§€ 마라 (Dont reinvent the wheel) 이미 잘 κ΅΄λŸ¬κ°€λŠ” λ°”ν€΄λŠ” μ²˜μŒλΆ€ν„° λ‹€μ‹œ λ§Œλ“€ ν•„μš”κ°€ μ—†λ‹€. λ””μžμΈνŒ¨ν„΄ ꡬ쑰 μ½˜ν…μŠ€νŠΈ : λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” μ—¬λŸ¬ 상황을 기술 λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” μ—¬λŸ¬ 상황을 κΈ°μˆ ν•œλ‹€. 즉, νŒ¨ν„΄μ΄ 적용될 수 μžˆλŠ” 상황을 λ‚˜νƒ€λ‚Έλ‹€. κ²½μš°μ— λ”°λΌμ„œλŠ” νŒ¨ν„΄μ΄ μœ μš©ν•˜μ§€ λͺ»ν•˜λŠ” 상황을 λ‚˜νƒ€λ‚΄κΈ°λ„ ν•œλ‹€. 문제 : νŒ¨ν„΄μ΄ μ μš©λ˜μ–΄ 해결될 ν•„μš”κ°€ μžˆλŠ” λ””μžμΈ 이슈 νŒ¨ν„΄μ΄ μ μš©λ˜μ–΄ ν•΄κ²°..

쒋은 객체 지ν–₯ μ„€κ³„μ˜ 5가지 원칙 (SOLID)

SRP: 단일 μ±…μž„ 원칙(Single Responsibility Principle) ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€. ν•˜λ‚˜μ˜ μ±…μž„μ΄λΌλŠ” 것은 λͺ¨ν˜Έν•˜λ‹€. 클 수 있고, μž‘μ„ 수 μžˆλ‹€. λ¬Έλ§₯κ³Ό 상황에 따라 λ‹€λ₯΄λ‹€. 객체 지ν–₯ 섀계 κ΄€μ μ—μ„œ μ±…μž„μ˜ κΈ°λ³Έ λ‹¨μœ„λŠ” 객체이닀. μ±…μž„ = ν•΄μ•Όν•˜λŠ” 것, ν•  수 μžˆλŠ” 것, λ³€κ²½ 이유 μ€‘μš”ν•œ 기쀀은 변경이닀. μš”κ΅¬ μ‚¬ν•­μ˜ 변경이 μžˆμ„ λ•Œ κ°€λŠ₯ν•œ 영ν–₯을 λ°›λŠ” 뢀뢄을 쀄여야 ν•œλ‹€. λ³€κ²½ μ‚¬μœ κ°€ 될 수 μžˆλŠ” 것을 ν•˜λ‚˜λ‘œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€. ex) DB μŠ€ν‚€λ§ˆ λ³€κ²½, UI λ³€κ²½, 객체의 생성과 μ‚¬μš©μ„ 뢄리 OCP: 개방-폐쇄 원칙 (Open/Closed Principle) μ†Œν”„νŠΈμ›¨μ–΄ μš”μ†ŒλŠ” ν™•μž₯μ—λŠ” μ—΄λ € μžˆμœΌλ‚˜ λ³€κ²½μ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€ 기쑴의 μ½”λ“œλŠ” λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ κΈ°λŠ₯을..

객체 지ν–₯ 원리

μžλ°” μ–Έμ–΄μ˜ κ°€μž₯ 큰 νŠΉμ§•μ€ 객체 지ν–₯ μ–Έμ–΄, 즉 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ‚¬μš©ν•˜λŠ” μ–Έμ–΄λΌλŠ” 점이닀. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ—¬λŸ¬ 개의 λ…λ¦½λœ λ‹¨μœ„, 즉 "객체"λ“€μ˜ λͺ¨μž„μœΌλ‘œ νŒŒμ•…ν•˜κ³ μž ν•˜λŠ” 것이닀. 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ ν”„λ‘œκ·Έλž¨μ„ μœ μ—°ν•˜κ³  변경이 μš©μ΄ν•˜κ²Œ λ§Œλ“ λ‹€. 객체 지ν–₯ μ–Έμ–΄μ˜ νŠΉμ§• 좔상화 집합을 κ΅¬μ„±ν•˜λŠ” κ°œμ²΄λ“€μ„ 'μΌλ°˜ν™”'ν•˜λŠ” 것 μ–΄λ–€ μ˜μ—­μ—μ„œ ν•„μš”λ‘œ ν•˜λŠ” μ†μ„±μ΄λ‚˜ ν–‰μœ„λ₯Ό μΆ”μΆœν•˜λŠ” μž‘μ—… 관심 μžˆλŠ” 뢀뢄에 λ”μš± 집쀑할 수 있음 switch(μžλ™μ°¨ μ’…λ₯˜) { case μ•„μš°λ””: // μ•„μš°λ”” 엔진 였일 κ΅ν™˜ μ½”λ“œ case λ²€μΈ : // λ²€μΈ  엔진 였일 κ΅ν™˜ μ½”λ“œ } // μžλ™μ°¨ μ’…λ₯˜κ°€ 좔가될 λ•Œλ§ˆλ‹€ μœ„μ˜ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  μ•„λž˜μ™€ 같이 ν•΄κ²° void changeEngineOil(Car c) {} c.c..