ν‹°μŠ€ν† λ¦¬ λ·°

πŸ”Ž Map μ»¬λ ‰μ…˜ 클래슀

Map μΈν„°νŽ˜μ΄μŠ€λŠ” Collection μΈν„°νŽ˜μ΄μŠ€μ™€λŠ” λ‹€λ₯Έ μ €μž₯ 방식을 κ°€μ§‘λ‹ˆλ‹€.

Map μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ Map μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λ“€μ€ 킀와 값을 ν•˜λ‚˜μ˜ 쌍으둜 μ €μž₯ν•˜λŠ” 방식(key-value 방식)을 μ‚¬μš©ν•©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ ν‚€(key)λž€ μ‹€μ§ˆμ μΈ κ°’(value)을 μ°ΎκΈ° μœ„ν•œ μ΄λ¦„μ˜ 역할을 ν•©λ‹ˆλ‹€.

 

Map μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ λͺ¨λ“  Map μ»¬λ ‰μ…˜ ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€.

 

1. μš”μ†Œμ˜ μ €μž₯ μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€.

2. ν‚€λŠ” 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šμ§€λ§Œ, κ°’μ˜ 쀑볡은 ν—ˆμš©ν•œλ‹€.

 

λŒ€ν‘œμ μΈ Map μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ— μ†ν•˜λŠ” ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

1. HashMap<K, V>

2. Hashtable<K, V>

3. TreeMap<K, V>

 

❓ HashMap<K, V> 클래슀

HashMap ν΄λž˜μŠ€λŠ” Map μ»¬λ ‰μ…˜ ν΄λž˜μŠ€μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” 클래슀 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

JDK1.2λΆ€ν„° 제곡된 HashMpa ν΄λž˜μŠ€λŠ” ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜(hash algorithm)을 μ‚¬μš©ν•˜μ—¬ 검색 속도가 맀우 λΉ λ¦…λ‹ˆλ‹€.

 

HashMap ν΄λž˜μŠ€λŠ” Map μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ―€λ‘œ, μ€‘λ³΅λœ ν‚€λ‘œλŠ” 값을 μ €μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 같은 값을 λ‹€λ₯Έ ν‚€λ‘œ μ €μž₯ν•˜λŠ” 것은 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

λ‹€μŒμ€ hashMap을 μ„ μ–Έν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

HashMap<K, V> name = new HashMap<K, V>();

λ‹€μŒ μ˜ˆμ œλŠ” userMapμ΄λΌλŠ” hashMap에 아이디, λΉ„λ°€λ²ˆν˜Έ, 이름, λ‚˜μ΄λ₯Ό key둜 ν•΄μ„œ valueκΉŒμ§€ μ‚½μž…ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

HashMap<String, Object> userMap = new HashMap<String, Object>();

userMap.put("id", "doeunnkimm");
userMap.put("password" , "1234");
userMap.put("name", "김도은");
userMap.put("age", 20);

// ν‚€κ°’μœΌλ‘œ value κ°€μ Έμ˜€κΈ°
System.out.println(userMap.get("id")); // doeunnkimm

 

πŸ“Œ JSONObject 라이브러리

μžλ°”μ—μ„œ org.json 라이브러리λ₯Ό μ΄μš©ν•˜μ—¬ JSON 데이터λ₯Ό λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€.

이 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” JSONObject, JSONArray ν΄λž˜μŠ€λŠ” JSON 데이터λ₯Ό κ°–κ³  있고, JSON ν˜•μ‹μ˜ λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ JSON λ¬Έμžμ—΄μ„ 파일둜 μ €μž₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

κ°‘μžκΈ° JSONObjectλ₯Ό μ™œ Map μ»¬λ Œμ…˜ 클래슀 κΈ€μ—μ„œ 닀루냐면

JSON λ°μ΄ν„°μ˜ ν˜•νƒœκ°€ key와 value ν˜•νƒœλ‘œ 이루어져 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

1. JSON ?

JSON은 JavaScript Object Notation의 μ•½μžλ‘œ, Javascriptμ—μ„œ 데이터λ₯Ό μ „λ‹¬ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

JSON νŒŒμΌμ€ λ‹€μŒκ³Ό 같이 key-value ν˜•νƒœλ‘œ 데이터λ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
         }
    ]
}

 

2. JSONObject

JSONObjectλŠ” JSONμ—μ„œ key-value 쌍으둜 데이터λ₯Ό ν‘œν˜„ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€.

JSONObject에 데이터λ₯Ό μž…λ ₯ν•  λ•ŒλŠ” put(key, value)으둜 μž…λ ₯ν•©λ‹ˆλ‹€.

toString()은 JSONObjectκ°€ κ°–κ³  μžˆλŠ” 데이터λ₯Ό JSON ν˜•μ‹μœΌλ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.

JSONObject jo = new JSONObject();
jo.put("name", "Johe");
jo.put("city", "Seoul");

 

3. HashMap으둜 JSONObject 생성

그런데 JSONObject 객체의 λ§€κ°œλ³€μˆ˜λ‘œ HashMap 객체도 λ„˜κ²¨μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

그러면 HashMap κ°μ²΄μ—μ„œ put ν•΄μ£Όμ—ˆλ˜ key와 valueκ°€ κ·ΈλŒ€λ‘œ JSONObject νƒ€μž…μœΌλ‘œ λ³€ν™˜λ˜κ²Œ λ©λ‹ˆλ‹€.

HashMap<String, Object> userMap = new HashMap<String, Object>();

userMap.put("id", "doeunnkimm");
userMap.put("password", "1234");
userMap.put("name", "김도은");
userMap.put("age", 20);

JSONObject userJSON = null;
userJSON = new JSONObject(userMap);

System.out.println(userJSON);

좜λ ₯ κ²°κ³Ό

 

4. JSONObject에 key-value μΆ”κ°€(put)

key와 value의 νƒ€μž…μ΄ μ²˜μŒμ— μ œλ„€λ¦­μœΌλ‘œ μ„€μ •ν–ˆλ˜ 것과 λ‹€λ₯Ό 수 있기 λ•Œλ¬Έμ— κΌ­ try-catch μ•ˆμ— λ„£μ–΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

try {
    userJSON.put("gender", "F");
} catch (JSONException e) {
    e.printStackTrace();
]

 

5. JSONObjectμ—μ„œ key둜 value 쑰회(get)

이 κ²½μš°μ—λ„ μž…λ ₯ν•œ keyκ°€ JSONObject에 없을 수 있기 λ•Œλ¬Έμ— try-catch μ•ˆμ— μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

try {
    System.out.println(userJSON.get("id"));
} catch (JSONException e) {
    e.printStackTrace();
}

 

6. JSONArray

JSON은 key-value ν˜•νƒœλ‘œ 데이터λ₯Ό κ°–κ³  μžˆλŠ”λ°, μ—¬κΈ°μ„œ valueλŠ” μ•„λž˜μ™€ 같이 Array νƒ€μž…μ΄ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

"friends":["Harry","Sam"]

예λ₯Ό λ“€μ–΄ μƒν’ˆμ΄λΌλŠ” keyκ°€ μžˆλ‹€λ©΄ value둜 λ“€μ–΄κ°€λŠ” μƒν’ˆμ΄ μ—¬λŸ¬ κ°œκ°€ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

λ˜ν•œ κ·Έ μƒν’ˆμ—λŠ” 이름, 가격, ν• μΈμœ¨ λ“±μ˜ keyκ°€ λ‹€μ‹œ 또 μ‘΄μž¬ν•  κ²ƒμž…λ‹ˆλ‹€.

λ”°λΌμ„œ ν•˜λ‚˜μ˜ key에 λŒ€ν•΄ μ—¬λŸ¬ 데이터λ₯Ό λ‹΄μ•„μ•Ό ν•  λ•Œ JSONArrayλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

 

7. ν•˜λ‚˜μ˜ key에 λŒ€ν•΄ μ—¬λŸ¬ 개의 데이터 λ‹΄κΈ°

μ•„λž˜ μ½”λ“œλŠ” μ—¬λŸ¬ 개의 μƒν’ˆμ΄ 객체둜 μ‘΄μž¬ν•œλ‹€κ³  ν–ˆμ„ λ•Œ

이 객체듀을 JSONArray에 productλΌλŠ” ν‚€μ˜ κ°’μœΌλ‘œ λ‹΄μœΌλ €κ³  ν•©λ‹ˆλ‹€.

 

μš°μ„  μƒν’ˆμ˜ 정보λ₯Ό 담을 Product 클래슀 ν•˜λ‚˜λ₯Ό μ„ μ–Έν•΄μ£Όκ² μŠ΅λ‹ˆλ‹€.

public class Product {
    private static Long sequence;
    private String productName;
    private int productPrice;
    private int productStock;
    
    public Product() {;}
   
    public Product(String productName, int productPrice, int productStock) {
      this.productId = sequence;
      this.productName = productName;
      this.productPrice = productPrice;
      this.productStock = productStock;
   }
]

 μ΄μ œ ArrayList에 μƒν’ˆ 정보듀을 λ‹΄μ•„μ£Όκ³  이 λ‹΄κΈ΄ ArrayListλ₯Ό ν•œλ²ˆμ— ν•˜λ‚˜μ˜ key에 λ‹€ 담아버리렀고 ν•©λ‹ˆλ‹€.

ArrayList<Product> productList = new ArrayList<Product>(
        Arrays.asList(new Product("쑱발", 39000, 10), new Product("보쌈", 45000, 10)));
        
// productList에 λ‹΄κΈ΄ 객체 ν•˜λ‚˜ν•˜λ‚˜λ₯Ό JSONObject둜 λ°”κΏ”μ„œ λ‹€μ‹œ 담을 ArrayList
ArrayList<JSONObject> productJSONs = new ArrayList<JSONObject>();

productList.strea().map(product -> new JSONObject(product)).forEach(productJSONs::add);

JSONArray products = new JSONArray(productJSONs);

System.out.println(products.toString());
// [{"productId":1,"productStock":10,"productPrice":39000,"productName":"쑱발"},{"productId":2,"productStock":10,"productPrice":45000,"productName":"보쌈"}]

 

8. JSONArrayμ—μ„œ μ›ν•˜λŠ” 정보 좜λ ₯

사싀 JSONArrayλŠ” ν‚€μ˜ valueμ•ˆμ— 또 λ‹€μ‹œ ν‚€κ°€ 있고 valueκ°€ μžˆλŠ” ν˜•νƒœμ—¬μ„œ get을 잘 μƒκ°ν•˜λ©΄μ„œ ν•΄μ•Όν•©λ‹ˆλ‹€.

μ €λŠ” μœ„μ—μ„œ λ§Œλ“€μ–΄ 놓은 productsμ—μ„œ λͺ¨λ“  μƒν’ˆμ˜ μ΄λ¦„λ§Œ λͺ¨λ‘ 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄ 보렀고 ν•©λ‹ˆλ‹€.

for (int i=0; i < products.length(); i++) {
    try {
        System.out.println(products.getJSONObject(i).get("productName"));
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

좜λ ₯ κ²°κ³Ό

 

728x90
LIST