πŸ—„οΈ Backend/Java

μžλ°”(Java) - 객체 직렬화(Serializable) 예제. 카페 메뉴 λ§Œλ“€κΈ°

kongmi 2023. 2. 14. 10:01

일전에 Map을 μ΄μš©ν•΄μ„œ 카페 메뉴 λ§Œλ“€κΈ° 예제λ₯Ό λ§Œλ“€μ—ˆμ—ˆλŠ”λ°,

ν•œ 단계 μ—…κ·Έλ ˆμ΄λ“œ ν•˜μ—¬ μ™ΈλΆ€ νŒŒμΌμ— μ €μž₯ν•˜λŠ” 것을 μΆ”κ°€(객체직렬화)

πŸ’‘ 객체 직렬화(Serializable) ν•˜λŠ” 이유?

  • λ©”λͺ¨λ¦¬λ₯Ό λ””μŠ€ν¬μ— μ €μž₯ν•˜κ±°λ‚˜ λ„€νŠΈμ›Œν¬ 톡신에 μ‚¬μš©ν•˜κΈ° μœ„ν•œ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것
    🐢 λ””μŠ€ν¬μ— μ €μž₯/λ„€νŠΈμ›Œν¬ 톡신에 μ‚¬μš©ν•˜λ €λ©΄ 객체 μ°Έμ‘°νƒ€μž…μ€ μ•ˆλ˜λŠ”κ±΄κ°€?
  • λ””μŠ€ν¬μ— μ €μž₯ν•˜κ±°λ‚˜ λ„€νŠΈμ›Œν¬ 톡신에 μ‚¬μš©ν•˜λ €λ©΄ κΈ°λ³Έ 데이터 νƒ€μž… 즉, κ°’ ν˜•μ‹ λ°μ΄ν„°λ§Œ κ°€λŠ₯함.
    🐢 μ•„, μ°Έμ‘° νƒ€μž… λ°μ΄ν„°λŠ” 값이 μ•„λ‹Œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κ°€μ§€κ³  있기 λ•Œλ¬Έμ— μ•ˆλ˜λŠ”κ±°κ΅¬λ‚˜.
    🐸 λ§žμ•„.
  • μ΄λŸ¬ν•œ μ°Έμ‘° νƒ€μž… 데이터(객체)λ₯Ό 직렬화 ν•˜κ²Œ 되면 κ°’ ν˜•μ‹ λ°μ΄ν„°λ‘œ λ³€ν™˜ν•΄μ€Œ.

πŸ’‘ ν•œ 쀄 정리!!

μ‚¬μš©ν•˜κ³  μžˆλŠ” 데이터듀을 파일 μ €μž₯ ν˜Ήμ€λ„€νŠΈμ›Œν¬/데이터 ν†΅μ‹ μ—μ„œ parsing ν•˜μ—¬ μœ μ˜λ―Έν•œ 데이터λ₯Ό λ§Œλ“€κΈ° μœ„ν•¨!

μ‹€μŠ΅μ˜ˆμ œ. 카페 메뉴 λ§Œλ“€κΈ°

직렬화

import java.io.Serializable;
public class CoffeeMenuInfo implements Serializable {
    private String name;
    private int price;
    private String group;
    private String desc;

    public CoffeeMenuInfo(String name, int price, String group, String desc) {
        this.name = name;
        this.price = price;
        this.group = group;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

SerialMenuWrite

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class SerialMenuWrite {
    static Map<String, CoffeeMenuInfo> map = new HashMap<>();
    public static void main(String[] args) throws IOException {
        menuWrite();
        selectMenu();
    }
    static void menuWrite() {
        map.put("Americano", new CoffeeMenuInfo("Americano", 2500, "Coffee", "κ·Έλƒ₯ 컀피"));
        map.put("Espresso", new CoffeeMenuInfo("Espresso", 2500, "Coffee", "μ§„ν•œ 컀피"));
        map.put("Latte", new CoffeeMenuInfo("Latte", 4500, "Coffee", "μš°μœ κ°€ λ“€μ–΄ μžˆμ–΄μš”."));
    }
    static void selectMenu() throws IOException {
        Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.println("메뉴λ₯Ό 선택 ν•˜μ„Έμš” : ");
            System.out.print("[1]메뉴 보기, [2]메뉴 μΆ”κ°€, [3]μ’…λ£Œ : ");
            int menu = sc.nextInt();
            switch (menu) {
                case 1 :
                    System.out.println("======= 메뉴 보기 =======");
                    for(String e : map.keySet()) {
                        System.out.println("메뉴 : " + map.get(e).getName());
                        System.out.println("가격 : " + map.get(e).getPrice());
                        System.out.println("λΆ„λ₯˜ : " + map.get(e).getGroup());
                        System.out.println("μ„€λͺ… : " + map.get(e).getDesc());
                        System.out.println("------------------------------------");
                    }
                    break;
                case 2 :
                    System.out.print("μΆ”κ°€ ν•  메뉴λ₯Ό μž…λ ₯ ν•˜μ„Έμš” : ");
                    String key = sc.next();
                    if(map.containsKey(key)) {
                        System.out.println("ν•΄λ‹Ή 메뉴가 이미 쑴재 ν•©λ‹ˆλ‹€.");
                    } else {
                        System.out.print("가격 : ");
                        int price = sc.nextInt();
                        System.out.print("λΆ„λ₯˜ : ");
                        String grp = sc.next();
                        sc.nextLine(); // 버퍼 λΉ„μš°κΈ°
                        System.out.print("μ„€λͺ… : ");
                        String desc = sc.nextLine();
                        map.put(key, new CoffeeMenuInfo(key, price, grp, desc));
                    }
                    break;
                case 3 :
                    System.out.println("메뉴λ₯Ό μ’…λ£Œ ν•©λ‹ˆλ‹€. λ‚΄μš©μ„ νŒŒμΌμ— μ €μž₯ ν•©λ‹ˆλ‹€.");
                    FileOutputStream fos = new FileOutputStream("D:/μ§λ ¬ν™”νŒŒμΌ/컀피메뉴.bin");
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
                    oos.writeObject(map); // 객체λ₯Ό μ§λ ¬ν™”ν•΄μ„œ νŒŒμΌμ— μ €μž₯
                    oos.flush();
                    oos.close();
                    return;
            }

        }

    }
}

 

 

SerialMenuRead

import μ§λ ¬ν™”μ—°μŠ΅2번.CoffeeMenuInfo;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Map;

public class SerialMenuRead {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        getMenuList();
    }
    static void getMenuList() throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream("C:/Dev/work_java/Java_Big_Data_am/src/μ§λ ¬ν™”μ—°μŠ΅3번/컀피메뉴.bin");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Map<String, CoffeeMenuInfo> map = (Map<String, CoffeeMenuInfo>) ois.readObject();
        for(String e : map.keySet()) {
            System.out.println("메뉴 : " + map.get(e).getName());
            System.out.println("가격 : " + map.get(e).getPrice());
            System.out.println("λΆ„λ₯˜ : " + map.get(e).getGroup());
            System.out.println("μ„€λͺ… : " + map.get(e).getDesc());
            System.out.println("------------------------------------");
        }
        fis.close();
        ois.close();
    }
}