관리 메뉴

Suhee Coding Archive

[λ””μžμΈ νŒ¨ν„΄] νŒ©ν† λ¦¬ νŒ¨ν„΄ λ³Έλ¬Έ

CS

[λ””μžμΈ νŒ¨ν„΄] νŒ©ν† λ¦¬ νŒ¨ν„΄

sueee_y 2022. 10. 12. 13:35

πŸ‘‰ νŒ©ν† λ¦¬ νŒ¨ν„΄

객체λ₯Ό μ‚¬μš©ν•˜λŠ” μ½”λ“œμ—μ„œ 객체 생성 뢀뢄을 λ–Όμ–΄λ‚΄ μΆ”μƒν™”ν•œ νŒ¨ν„΄μ΄μž 상속 관계에 μžˆλŠ” 두 ν΄λž˜μŠ€μ—μ„œ μƒμœ„ ν΄λž˜μŠ€κ°€ μ€‘μš”ν•œ λΌˆλŒ€λ₯Ό κ²°μ •ν•˜κ³ , ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 객체 생성에 κ΄€ν•œ ꡬ체적인 λ‚΄μš©μ„ κ²°μ •ν•˜λŠ” νŒ¨ν„΄

 

- μƒμœ„ ν΄λž˜μŠ€μ™€ ν•˜μœ„ ν΄λž˜μŠ€κ°€ λΆ„λ¦¬λ˜κΈ° λ•Œλ¬Έν•΄ λŠμŠ¨ν•œ κ²°ν•©

- μƒμœ„ ν΄λž˜μŠ€μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€ 생성 방식에 λŒ€ν•΄ μ „ν˜€ μ•Œ ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— 더 λ§Žμ€ μœ μ—°μ„±μ„ κ°–κ²Œ λœλ‹€.

- 객체 생성 둜직이 λ”°λ‘œ λ–Όμ–΄μ Έ 있기 λ•Œλ¬Έμ— μ½”λ“œλ₯Ό λ¦¬νŒ©ν„°λ§ν•˜λ”λΌλ„ ν•œ 곳만 κ³ μΉ  수 있게 λ˜λ‹ˆ μœ μ§€ λ³΄μˆ˜μ„±μ΄ 증가

 

μ˜ˆμ‹œ ) λΌλ–Ό λ ˆμ‹œν”Ό / 아메리카노 λ ˆμ‹œν”Ό / 우유 λ ˆμ‹œν”ΌλΌλŠ” ꡬ체적인 λ‚΄μš©μ΄ λ“€μ–΄ μžˆλŠ” ν•˜μœ„ ν΄λž˜μŠ€κ°€ 컨베이어 벨트λ₯Ό

          톡해 전달 μƒμœ„ 클래슀인 λ°”λ¦¬μŠ€νƒ€ 곡μž₯μ—μ„œ 이 λ ˆμ‹œν”Όλ“€μ„ ν† λŒ€λ‘œ 우유 등을 μƒμ‚°ν•˜λŠ” 생산 곡정을 μƒκ°ν•˜λ©΄ λœλ‹€.

 

abstract class Coffee { 
    public abstract int getPrice(); 
    
    @Override
    public String toString(){
        return "Hi this coffee is "+ this.getPrice();
    }
}

class CoffeeFactory { 
    public static Coffee getCoffee(String type, int price){
        if("Latte".equalsIgnoreCase(type)) return new Latte(price);
        else if("Americano".equalsIgnoreCase(type)) return new Americano(price);
        else{
            return new DefaultCoffee();
        } 
    }
}
class DefaultCoffee extends Coffee {
    private int price;

    public DefaultCoffee() {
        this.price = -1;
    }

    @Override
    public int getPrice() {
        return this.price;
    }
}
class Latte extends Coffee { 
    private int price; 
    
    public Latte(int price){
        this.price=price; 
    }
    @Override
    public int getPrice() {
        return this.price;
    } 
}
class Americano extends Coffee { 
    private int price; 
    
    public Americano(int price){
        this.price=price; 
    }
    @Override
    public int getPrice() {
        return this.price;
    } 
} 
public class HelloWorld{ 
     public static void main(String []args){ 
        Coffee latte = CoffeeFactory.getCoffee("Latte", 4000);
        Coffee ame = CoffeeFactory.getCoffee("Americano",3000); 
        System.out.println("Factory latte ::"+latte);
        System.out.println("Factory ame ::"+ame); 
     }
} 
/*
Factory latte ::Hi this coffee is 4000
Factory ame ::Hi this coffee is 3000
*/

CoffeeFactory λΌλŠ” μƒμœ„ ν΄λž˜μŠ€κ°€ μ€‘μš”ν•œ λΌˆλŒ€λ₯Ό κ²°μ •ν•˜κ³  ν•˜μœ„ 클래슀인 LatteFactoryκ°€ ꡬ체적인 λ‚΄μš©μ„ κ²°μ •ν•˜κ³  μžˆλ‹€. μ΄λŠ” μ˜μ‘΄μ„± μ£Όμž…μ΄λΌκ³  λ³Ό 수 μžˆλ‹€. CoffeeFactoryμ—μ„œ LatteFactory의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 것이 μ•„λ‹Œ LatteFactoryμ—μ„œ μƒμ„±ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό CoffeeFactory에 μ£Όμž…ν•˜κ³  있기 λ•Œλ¬Έ. λ˜ν•œ CoffeeFactoryλ₯Ό 보면 static으둜 getCoffee() 정적 λ©”μ„œλ“œλ₯Ό μ •μ˜ν•œ 것을 μ•Œ 수 μžˆλŠ”λ°, 정적 λ©”μ„œλ“œλ₯Ό μ“°λ©΄ 클래슀의 μΈμŠ€ν„΄μŠ€ 없이 호좜이 κ°€λŠ₯ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ ν•  수 있고 κ°œλ³„ μΈμŠ€ν„΄μŠ€μ— 묢이지 μ•ŠμœΌλ©° 클래슀 λ‚΄μ˜ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 μžˆλŠ” μž₯점이 μžˆλ‹€.

 

βž• if("Latte".equalsIgnoreCase(type))을 톡해 λ¬Έμžμ—΄ 비ꡐ 기반으둜 둜직이 κ΅¬μ„±λ˜λŠ”λ° Enum λ˜λŠ” Map을 μ΄μš©ν•˜μ—¬ if문을 μ“°μ§€ μ•Šκ³  λ§€ν•‘ν•΄μ„œ ν•  μˆ˜λ„ μžˆλ‹€.

 

βž• Enum 

μƒμˆ˜μ˜ 집합을 μ •μ˜ν•  λ–„ μ‚¬μš©λ˜λŠ” νƒ€μž…μ΄λ‹€. μƒμˆ˜λ‚˜ λ©”μ„œλ“œ 등을 μ§‘μ–΄λ„£μ–΄μ„œ κ΄€λ¦¬ν•˜λ©° μ½”λ“œλ₯Ό λ¦¬νŒ©ν„°λ§ ν•  λ•Œ ν•΄λ‹Ή 집합에 κ΄€ν•œ 둜직 μˆ˜μ • μ‹œ μ΄λΆ€λΆ„λ§Œ μˆ˜μ •ν•˜λ©΄ λ˜λ―€λ‘œ μ½”λ“œ λ¦¬νŒ©ν„°λ§ μ‹œ 강점이 생긴닀.

Comments