GiantStepDEV
article thumbnail

μ„œλ‘ 

일전에 ν•œ λΈ”λ‘œκ·Έ 글을 μ°Έκ³ ν•˜μ—¬ νŒ©ν„°λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄ 글을 μ˜¬λ Έμ—ˆλŠ”λ°..

사싀 λ‹Ήμ‹œμ— λ‚΄κ°€ μ΄ν•΄ν•˜κΈ°μ—λŠ” 글이 μ–΄λ €μ›Œμ„œ ν•΄λ‹Ή νŒ¨ν„΄μ— λŒ€ν•œ 흐름을 μ΄ν•΄ν•˜κΈ° μ–΄λ €μ› λ‹€. 

https://developyanggaeng.tistory.com/129

 

3. [μžλ°”/Java] νŒ©ν† λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄(Factory Method Pattern) : '객체'와 '객체 생성 클래슀' λΆ„λ¦¬ν•˜λŠ” λ””μž

ν•΄λ‹Ή λ‚΄μš©μ€ μ•„λž˜ λΈ”λ‘œκ·Έ ν¬μŠ€νŒ…μ„ μ°Έμ‘°ν•˜μ˜€μŠ΅λ‹ˆλ‹€. https://memostack.tistory.com/61 Design Pattern - Factory Method Pattern (νŒ©ν† λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄) Factory Method Pattern νŒ©ν† λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄μ€ '객체'와 '객체 생성 클

developyanggaeng.tistory.com

μ§€κΈˆ DBλ₯Ό λ°°μš°λ©΄μ„œ ν•΄λ‹Ή κΈ€μ˜ ꡬ쑰에 λŒ€ν•΄ μ‘°κΈˆμ΄λ‚˜λ§ˆ μ΄ν•΄λŠ” κ°”μ§€λ§Œ!

아직 JDBCλŠ” μ•ˆν•΄μ„œ μ™„λ²½νžˆ μ΄ν•΄ν•˜λŠ” 것은 μ—¬μ „νžˆ μ–΄λ ΅λ‹€.

 

κ·ΈλŸ¬λ‹€κ°€ μ΅œκ·Όμ— Spring ν•™μŠ΅ν•˜κΈ°μ— μ•žμ„œ 미리 λ³Όλ§Œν•œκ²Œ 뭐가 μžˆμ„κΉŒ λ‘˜λŸ¬λ³΄λ˜ 차에

λ‚˜ν•œν…Œ λ”± λ§žλŠ” 책을 λ°œκ²¬ν–ˆκ³ , 이미 n회차 정독을 ν–ˆμ§€λ§Œ μ½λŠ” μˆœκ°„μ—λ§Œ 기얡에 λ‚¨μ•„μ„œ λ‚΄ λ°©μ‹λŒ€λ‘œ κΈ°λ‘ν•˜κ³ μž ν¬μŠ€νŒ…μ„ ν•˜κ²Œ 됐닀.

 

참고둜 책은 'μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 μ§€ν–₯의 원리와 이해'이닀.

λžŒλ‹€μ™€ 슀트림이 막 λ‚˜μ˜¨ μ‹œμ μ— 책이 μ§‘ν•„λ˜μ–΄μ„œ λ‹€ν–‰νžˆ(?) λžŒλ‹€μ™€ μŠ€νŠΈλ¦Όμ— κ΄€ν•œ λ‚΄μš©λ„ μ•„μ£Ό 살짝 λ“€μ–΄κ°€μžˆλ‹€.

 

μ €μž. κΉ€μ’…λ―Ό

νŒ©ν„°λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄μ€ μžλ°” 객체지ν–₯의 였래된 μ˜€ν•΄λ₯Ό 풀어쀄 νŒ¨ν„΄μ΄κΈ°λ„ ν•©λ‹ˆλ‹€.

 

객체지ν–₯을 처음 배울 λ•Œ ν”νžˆ ν΄λž˜μŠ€μ™€ 객체의 κ΄€κ³„λŠ” 'λΆ•μ–΄λΉ΅ν‹€κ³Ό 뢕어빡이닀.'λΌλŠ” μ„€λͺ…을 무수히 많이 μ ‘ν•˜κ²Œ λ©λ‹ˆλ‹€.

저도 객체지ν–₯에 λŒ€ν•΄ 배울 λ•Œ ν•΄λ‹Ή μ„€λͺ…을 많이 λ“€μ—ˆμ—ˆμŠ΅λ‹ˆλ‹€. (근데 ν•΄λ‹Ή λΉ„μœ λ₯Ό λ“€μ—ˆμ„ λ•Œ 사싀 잘 이해가 μ•ˆκ°”μ—ˆλ˜..)

 

ν—ˆλ‚˜ 이 책을 λΉ„λ‘―ν•΄μ„œ '객체지ν–₯의 사싀과 μ˜€ν•΄'λΌλŠ” μ±…μ—μ„œλ„ 이 κ°œλ…μ€ 객체지ν–₯을 μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν•˜λŠ” 것을 λ°©ν•΄ν•œλ‹€κ³  μ„€λͺ…ν•©λ‹ˆλ‹€.

 

그럼 λΆ•μ–΄λΉ΅μ—κ²Œ 뢕어빡틀은 λ¬΄μ—‡μΌκΉŒ?

πŸ“Œ μš” 책에 μ˜ν•˜λ©΄ 뢕어빡틀은 뢕어빡을 λ§Œλ“œλŠ” νŒ©ν„°λ¦¬(객체λ₯Ό μƒμ„±ν•˜λŠ”) 라고 ν•©λ‹ˆλ‹€.

 

κ·Έλ ‡κ΅¬λ‚˜..

근데 νŒ©ν„°λ¦¬κ°€ 뭐지?

 

ν•˜μ—¬ 이 νŒ©ν„°λ¦¬λΌλŠ” 것에 λŒ€ν•΄μ„œ μ œλŒ€λ‘œ μ•Œμ•„λ³΄μžλΌλŠ” μΌλ…μœΌλ‘œ 이 글을 μž‘μ„±ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ„œλ‘ μ΄ μ°Έ κΈΈμ—ˆμ£ ? ^^; 


λ³Έλ‘ 

Factory Method Pattern

🐸 FactoryλŠ” 우리말둜 '곡μž₯' μž…λ‹ˆλ‹€. μ‹€μƒν™œμ—μ„œ 곡μž₯은 물건을 μƒμ‚°ν•˜λ“―μ΄ μžλ°”μ—μ„œμ˜ FactoryλŠ” 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

그럼 μ € νŒ¨ν„΄μ˜ 이름 κ·ΈλŒ€λ‘œλ₯Ό ν•΄μ„ν•˜λ©΄ 객체λ₯Ό μƒμ„±ν•˜λŠ” λ©”μ†Œλ“œ 즈음 λ˜κ² λ„€μš”.

μœ μ‹ν•œ 말둜(?) λ‹€μ‹œ μ •λ¦¬ν•˜μžλ©΄ πŸ’‘νŒ©ν„°λ¦¬ λ©”μ†Œλ“œλŠ” 객체λ₯Ό 생성 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ μž…λ‹ˆλ‹€.

거기에 νŒ¨ν„΄μ΄ λΆ™κ²Œλ˜λ©΄ πŸ’‘ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ νŒ©ν„°λ¦¬ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•΄μ„œ 객체λ₯Ό λ°˜ν™˜ν•˜κ²Œ ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

 

근데 μ΄λ ‡κ²Œ 말둜 μ„€λͺ…ν•˜λŠ” κ²ƒλ³΄λ‹€λŠ” μ½”λ“œλ‘œ μ„€λͺ…ν•˜λŠ” 것이 μ΄ν•΄ν•˜λŠ”λ°μ— 더 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

 

πŸ”΄ 좔상 νŒ©ν„°λ¦¬ λ©”μ†Œλ“œ

public abstract class Animal {
    abstract AnimalToy getToy();
}

πŸ”΅ νŒ©ν„°λ¦¬ λ©”μ†Œλ“œκ°€ 생성할 객체의 μƒμœ„ 클래슀

public abstract class AnimalToy {
    abstract void identify();
}

πŸ”΄ 좔상 νŒ©ν„°λ¦¬ λ©”μ†Œλ“œ extends 및 μ˜€λ²„λΌμ΄λ”©

public class Dog extends Animal {
    @Override
    AnimalToy getToy() {
        return new DogToy();
    }
}

πŸ”΅ νŒ©ν„°λ¦¬ λ©”μ†Œλ“œκ°€ 생성할 객체

public class DogToy extends AnimalToy {
    @Override
    void identify() {
        System.out.println("λ‚˜λŠ” κ°•μ•„μ§€ μž₯λ‚œκ°!!");
    }
}

Main

public class Main {
    public static void main(String[] args) {
        Animal doggy = new Dog();
        AnimalToy toyBall = doggy.getToy();
        toyBall.identify();
    }
}
λ‚˜λŠ” κ°•μ•„μ§€ μž₯λ‚œκ°!!

κ²°λ‘ 

이처럼 좔상 νŒ©ν„°λ¦¬ λ©”μ†Œλ“œλ₯Ό 톡해 λΆ•μ–΄λΉ΅ν‹€κ³Ό λΆ•μ–΄λΉ΅μ˜ 관계λ₯Ό μ•Œκ²Œ λ˜μ—ˆλŠ”λ°μš”.

 

그럼 ν΄λž˜μŠ€μ™€ 객체의 κ΄€κ³„λŠ” λŒ€μ²΄ λ­”κ°€?λΌλŠ” 의문이 λ“€ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

이 μ±…μ—μ„œλŠ” μΉœμ ˆνžˆλ„ κ·Έ ν•΄λ‹΅κΉŒμ§€ μ œμ‹œν•΄μ€λ‹ˆλ‹€. (μ±… κ΄‘κ³  μ ˆλŒ€ μ•„λ‹˜.)

ν΄λž˜μŠ€μ™€ 객체λ₯Ό κ΅¬λΆ„ν•˜λŠ” κ°„λ‹¨ν•œ 방법은 'λ‚˜μ΄λ₯Ό λ¬Όμ–΄ λ³΄λŠ” 것'

  • μ‚¬λžŒμ˜ λ‚˜μ΄λŠ” λͺ‡ 살인가?
  • κΉ€μ—°μ•„μ˜ λ‚˜μ΄λŠ” λͺ‡ 살인가?
  • λ™λ¬Όμ˜ λ‚˜μ΄λŠ” λͺ‡ 살인가?

λ‚˜μ΄λ₯Ό λ°”λ‘œ μ•Œ 수 μžˆλ‹€λ©΄ 객체. μ•„λ‹ˆλ©΄ 클래슀.

 

ν΄λž˜μŠ€λŠ” λΆ„λ₯˜μ— λŒ€ν•œ κ°œλ…μΌλΏ 싀체가 μ•„λ‹ˆμ§€λ§Œ, κ°μ²΄λŠ” 싀체 μž…λ‹ˆλ‹€.

그럼 ν΄λž˜μŠ€μ™€ 객체의 관계에 λŒ€ν•΄ ν•œ μ€„λ‘œ μ •λ¦¬ν•˜λ©΄?!

클래슀 : 객체 = μ‚¬λžŒ : κΉ€μ—°μ•„

클래슀 : 객체 = μ₯ : λ―Έν‚€λ§ˆμš°μŠ€

 

profile

GiantStepDEV

@kongmi

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!