Set

1. κ°œμš”

ES6의 SetλŠ” Map와 λΉ„μŠ·ν•˜μ§€λ§Œ SetλŠ” Mapμ™€λŠ” λ‹€λ₯΄κ²Œ keyκ°’λ§Œμ΄ μ‘΄μž¬ν•œλ‹€. μ•žμœΌλ‘œ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” Set에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μž.


2. Set 객체의 νŠΉμ§•

Set κ°μ²΄λŠ” μžλ£Œν˜•μ— 관계 없이 μ›μ‹œ κ°’κ³Ό 객체 μ°Έμ‘° λͺ¨λ‘ μœ μΌν•œ 값을 μ €μž₯ν•  수 μžˆλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ ν‘œμ€€ λ‚΄μž₯ 객체이닀. μ‚½μž… μˆœμ„œλŒ€λ‘œ μš”μ†Œλ₯Ό 순회(for...in, for...of보닀 for문을 μ„ ν˜Έ)ν•  수 있으며 ν•˜λ‚˜μ˜ Setλ‚΄ 값은 ν•œ 번만 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€. 즉, μ–΄λ–€ 값은 κ·Έ Set μ½œλ ‰μ…˜ λ‚΄μ—μ„œ μœ μΌν•˜λ‹€.

Set의 νŠΉμ§•μ„ μ •λ¦¬ν•˜μžλ©΄ μ•„λž˜μ™€ κ°™λ‹€.

  • λ™μΌν•œ 값을 μ€‘λ³΅ν•˜μ—¬ 포함할 수 μ—†λ‹€.

  • μš”μ†Œ μˆœμ„œμ— μ˜λ―Έκ°€ μ—†λ‹€.

  • 인덱슀둜 μš”μ†Œμ— μ ‘κ·Όν•  수 μ—†λ‹€.

μ΄λŸ¬ν•œ Set은 μˆ˜ν•™μ  집합을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ μžλ£Œκ΅¬μ‘°μ΄λ‹€. κ·Έλž˜μ„œ Setλ₯Ό 톡해 ꡐ집합, ν•©μ§‘ν•©, μ°¨μ§‘ν•©, μ—¬μ§‘ν•© 등을 κ΅¬ν˜„ν•  수 μžˆλ‹€.


3. Set 객체의 생성

const set = new Set();
set_object_create

κΈ°λ³Έ 생성 방법은 μœ„μ™€ κ°™λ‹€. Set κ°μ²΄λŠ” set μƒμ„±μž ν•¨μˆ˜λ‘œ μƒμ„±ν•˜λ©° 인수λ₯Ό μ „λ‹¬ν•˜μ§€ μ•ŠμœΌλ©΄ 빈 Set 객체가 μƒμ„±λœλ‹€.

μΈμˆ˜λ‘œλŠ” μ΄ν„°λŸ¬λΈ”λ₯Ό 받을 수 μžˆλ‹€.

  • 배열을 인수둜 받은 경우

    set_object_create2

  • λ¬Έμžμ—΄μ„ 인수둜 받은 경우

    set_object_create3

μƒμ„±λœ Set 객체λ₯Ό 보면 μ€‘λ³΅λœ 값이 μ—†λŠ” 것을 λ³Ό 수 μžˆλ‹€. μ΄λ ‡κ²Œ Set 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄ 및 λ¬Έμžμ—΄ λ“±μ—μ„œ μ€‘λ³΅λœ μš”μ†Œλ₯Ό μ œκ±°ν•  수 μžˆλ‹€. 이λ₯Ό μ΄μš©ν•˜μ—¬ μ€‘λ³΅λœ μš”μ†Œλ₯Ό μ œκ±°ν•œ 배열을 λ§Œλ“€ 수 μžˆλ‹€.

λ°°μ—΄μ˜ μ€‘λ³΅λœ μš”μ†Œ 제거

4. Set의 μ£Όμš” λ©”μ„œλ“œμ™€ ν”„λ‘œνΌν‹°

4-1. Set.add(value)

값을 μΆ”κ°€ν•˜κ³  Set μžμ‹ μ„ λ°˜ν™˜ν•œλ‹€. λ§Œμ•½ λ™μΌν•œ 값을 λ„£κ³  set.add(value)λ₯Ό 아무리 많이 ν˜ΈμΆœν•œλ‹€ν•΄λ„ Set κ°μ²΄μ—λŠ” μΆ”κ°€κ°€ λ˜μ§€ μ•ŠλŠ”λ‹€. Set.add()λ©”μ„œλ“œλŠ” 자기 μžμ‹ μ„ λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— 체이닝을 ν•  수 μžˆλ‹€.

set_add1

Setκ°μ²΄λŠ” κ°μ²΄λ‚˜ λ°°μ—΄, μ›μ‹œκ°’ 같이 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  값을 μš”μ†Œλ‘œ μ €μž₯ν•  수 μžˆλ‹€.

set_add2

μ€‘λ³΅λœ μš”μ†Œκ°€ μ—†λŠ” 것을 확인할 수 μžˆλ‹€.


4-2. Set.delete(value)

값을 μ œκ±°ν•œλ‹€. 호좜 μ‹œμ μ— Set 내에 값이 μžˆμ–΄μ„œ μ œκ±°μ— μ„±κ³΅ν•˜λ©΄ true, μ•„λ‹ˆλ©΄ falseλ₯Ό λ°˜ν™˜ν•œλ‹€. μ΄λ•Œ Set κ°μ²΄μ—λŠ” μΈλ±μŠ€κ°€ μ—†κΈ° λ•Œλ¬Έμ— μ‚­μ œν•˜λ €λŠ” μš”μ†Œκ°’μ„ 인수둜 μ „λ‹¬ν•΄μ•Όν•œλ‹€. 그리고 Set.delete()λ©”μ„œλ“œλŠ” λΆˆλ¦¬μ–Έκ°’μ„ λ¦¬ν„΄ν•˜κΈ° λ•Œλ¬Έμ— 체이닝을 ν•  수 μ—†λ‹€.

set_delete

4-3. Set.has(value)

Set 객체 내에 값이 μ‘΄μž¬ν•˜λ©΄ true, μ•„λ‹ˆλ©΄ falseλ₯Ό λ°˜ν™˜ν•œλ‹€.

set_has

4-4. Set.clear()

Set 객체의 λͺ¨λ“  μš”μ†Œλ₯Ό μΌκ΄„μ‚­μ œν•œλ‹€. 항상 undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

set_clear

4-5. Set.size

Set 객체에 λͺ‡ 개의 μš”μ†Œκ°€ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€. Set.size ν”„λ‘œνΌν‹°μ— 숫자λ₯Ό ν• λ‹Ήν•˜μ—¬ Set 객체의 크기λ₯Ό μ •ν•  수 μ—†λ‹€. ν•΄λ‹Ή ν”„λ‘œνΌν‹°λŠ” setterν•¨μˆ˜λŠ” μ—†κ³  getterν•¨μˆ˜λ§Œ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

set_size

5. Set 객체 μš”μ†Œμ˜ 순회

Set 객체 μš”μ†Œλ₯Ό μˆœνšŒν•˜κΈ° μœ„ν•΄μ„œλŠ” Set.forEachλ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. λ˜ν•œ forλ¬Έ, for...or문으둜 μˆœνšŒν•  μˆ˜λ„ μžˆλ‹€. μΆ”κ°€μ μœΌλ‘œ Set κ°μ²΄λŠ” μ΄ν„°λŸ¬λΈ”μ΄κΈ° λ•Œλ¬Έμ— μŠ€ν”„λ ˆλ“œλ¬Έλ²•κ³Ό, λ°°μ—΄ λ””μŠ€νŠΈλŸ­μ²˜λ§μ˜ λŒ€μƒμ΄ 될 수 μžˆλ‹€.

Set.forEach의 첫 λ²ˆμ§Έμ™€ 두 번째 μΈμˆ˜λŠ” ν˜„μž¬ μˆœνšŒμ€‘μΈ μš”μ†Œκ°’μ΄λ‹€. 이런 μ΄μœ λŠ” Set κ°μ²΄μ—λŠ” μΈλ±μŠ€κ°€ μ—†κΈ° λ•Œλ¬Έμ— Array.forEachλ©”μ„œλ“œμ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν†΅μΌν•˜κΈ° μœ„ν•¨λ‹ˆλ‹€. μ„Έ 번째 μΈμˆ˜λ‘œλŠ” ν˜„μž¬ μˆœνšŒμ€‘μΈ Set 객체 μžμ²΄μ΄λ‹€.

set_forEach

6. Set 객체λ₯Ό ν†΅ν•œ μ§‘ν•© μ—°μ‚°

Set 객체λ₯Ό 톡해 ꡐ집합, μ°¨μ§‘ν•©, ν•©μ§‘ν•©, λΆ€λΆ„ μ§‘ν•©κ³Ό μƒμœ„ 집합을 κ΅¬ν˜„ν•  수 μžˆλ‹€.


6-1. ꡐ집합

set_intersection(ꡐ집합)

6-2. μ°¨μ§‘ν•©

set_relative(μ°¨μ§‘ν•©)

6-3. ν•©μ§‘ν•©

set_union(ν•©μ§‘ν•©)

6-4. λΆ€λΆ„ μ§‘ν•©κ³Ό μƒμœ„ μ§‘ν•©

set_isSuperSet

isSuperSet()ν•¨μˆ˜λŠ” 첫 번째 νŒŒλΌλ―Έν„°κ°€ 두 번째 νŒŒλΌλ―Έν„°μ— μƒμœ„μ§‘ν•©μΈμ§€ μ•Œλ €μ£ΌλŠ” ν•¨μˆ˜μ΄λ‹€. ν•΄λ‹Ή 값이 true라면 첫 번째 νŒŒλΌλ―Έν„°λŠ” μƒμœ„μ§‘ν•© 두 번째 νŒŒλΌλ―Έν„°λŠ” λΆ€λΆ„ 집합이 λœλ‹€.


7. Conclusion

쀑학ꡐ, 고등학ꡐ λ•Œ λ°°μ› λ˜ ν•©μ§‘ν•©, ꡐ집합 등등을 λ‹€μ‹œ λ‹€λ£¨κ²Œ λ˜λ‹ˆ μ‹ μ„ ν–ˆλ‹€. λ˜ν•œ 이λ₯Ό μ½”λ“œλ‘œ κ΅¬ν˜„ν•  수 μžˆλ‹€λŠ” 것이 놀라웠닀. μ§€κΈˆκΉŒμ§€ λ‹€μ–‘ν•œ 집합을 λ‹€λ£° κΈ°νšŒκ°€ μ—†μ—ˆμ§€λ§Œ μ½”λ”© ν…Œμ΄νŠΈλ₯Ό κ³΅λΆ€ν•˜λ‹€λ³΄λ©΄ 많이 μ‚¬μš©ν•˜κ²Œ 될 λ“― ν•˜λ‹€. λ§΅(Map)κ³Ό μ…‹(Set) μ˜›λ‚ μ—λŠ” κ·Έμ € μ–΄λ €μš΄ κ°œλ…μ΄μ—ˆλŠ”λ° μ§€κΈˆμ€ μ–΄λŠμ •λ„ μ΅μˆ™ν•΄μ§„ λ“― ν•˜λ‹€.


μ°Έκ³ 

λ§΅κ³Ό μ…‹ JavaScript - Set [JavaScript] 37. Set κ³Ό Map Set-mdn Map κ³Ό Set


πŸ“… 2022-08-12

Last updated