Programming/Java 22

[Effective Java] μ™œ EnumSet κ³Ό EnumMap 을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”κ°€

λ“€μ–΄κ°€κΈ° 전에 λ°±κΈ°μ„ λ‹˜μ˜ [Effective Java] κ°•μ˜λ₯Ό μˆ˜κ°•ν•˜λŠ” 쀑 μ—¬λŸ¬ 개의 Enum 객체λ₯Ό κ°€μ§€κ±°λ‚˜ Enum 객체λ₯Ό Key 둜 κ°€μ§€λŠ” 경우 μ™œ EnumMap μ΄λ‚˜ EnumSet 을 μ“°λŠ” 것이 λ‹€λ₯Έ Map / Set κ΅¬ν˜„μ²΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것보닀 νš¨μœ¨μ μΈμ§€μ— λŒ€ν•΄ ν•™μŠ΅ν•˜λŠ” 과제λ₯Ό λ°›μ•˜λ‹€. 이번 μ‹œκ°„μ—λŠ” 이듀이 λ™μž‘ν•˜λŠ” 방식과 그에 λŒ€ν•œ 차이점 및 얻을 수 μžˆλŠ” 이점에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄λ €κ³  ν•œλ‹€. μ™œ μ—΄κ±° νƒ€μž…μ„ μ‚¬μš©ν•΄μ•Ό ν• κΉŒ? Java 1.5 버전 μ΄μ „μ—λŠ” 자주 μ‚¬μš©ν•˜λŠ” μƒμˆ˜λ₯Ό int νƒ€μž…μœΌλ‘œ μ •μ˜ν•˜μ—¬ μ‚¬μš©ν–ˆλ‹€. 이λ₯Ό μ •μˆ˜ μ—΄κ±° νŒ¨ν„΄μ΄λΌκ³  ν•œλ‹€. 과거의 λ°©μ‹μ²˜λŸΌ int λ₯Ό μ΄μš©ν•΄ μƒμˆ˜λ₯Ό μ—΄κ±°ν•˜λŠ” 경우 λ‹€μŒκ³Ό 같은 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆλ‹€. 1. 컴파일 νƒ€μž„μ—μ„œ νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•  수 μ—†λ‹€. 2. Name..

Programming/Java 2022.11.20

F019 - Socket

✍️ 이전 μ‹œκ°„μ— IO에 λŒ€ν•΄ κ³΅λΆ€ν•˜λ©΄μ„œ νŒŒμΌμ„ μ €μž₯ν•˜λŠ” 것과 λ„€νŠΈμ›Œν¬ ν†΅μ‹ κ³ΌλŠ” μ „ν˜€ κ΄€λ ¨ μ—†λ‹€κ³  μƒκ°ν–ˆλŠ”λ°, ν•˜λ‚˜ λ‘˜ μ”© κ³΅λΆ€ν•˜λ‹€ λ³΄λ‹ˆ ν•˜λ‚˜μ˜ λΏŒλ¦¬μ—μ„œ μ‹œμž‘λ˜μ—ˆλ‹€λŠ” 것을 μ•Œκ²Œλ˜μ—ˆλ‹€. 이번 μ‹œκ°„μ—λŠ” κ·Έ μ—°μž₯으둜 Socket 톡신에 λŒ€ν•΄ 곡뢀해보렀고 ν•œλ‹€. Socket Socket(μ΄ν•˜ μ†ŒμΌ“)은 λ¬΄μ—‡μΌκΉŒ? μΌμƒμ—μ„œ λ³Ό 수 μžˆλŠ” μ½˜μ„ΌνŠΈ μ†ŒμΌ“μΌ μˆ˜λ„ 있고, 전ꡬλ₯Ό λΌμš°λŠ” μ†ŒμΌ“μΌ μˆ˜λ„ 있고, μš°λ¦¬κ°€ μ§€κΈˆ κ³΅λΆ€ν•˜λ €κ³  ν•˜λŠ” μ†ŒμΌ“μ΄λΌλŠ” ν”„λ‘œν† μ½œμΌ μˆ˜λ„ μžˆλ‹€. μ΄λ“€μ˜ 곡톡점은 A와 Bλ₯Ό μ—°κ²°ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μ‘΄μž¬λΌλŠ” 것이닀. A socket is an endpoint for communication between two machines. μ†ŒμΌ“μ€ 두 κΈ°κΈ° κ°„μ˜ 톡신을 μœ„ν•œ μ—”λ“œν¬μΈνŠΈμ΄λ‹€. - Java 8 Referenc..

Programming/Java 2021.06.22

F018 - Serializable (직렬화, 역직렬화)

✍️ 업무λ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ Domain ν΄λž˜μŠ€μ— Serializable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 경우λ₯Ό 봀던 κ²½ν—˜μ΄ μžˆλŠ”λ°, λ‹Ήμ‹œμ—λŠ” μ™œ κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ”μ§€ 찾아보지 μ•Šκ³  κ°œλ°œν–ˆμ—ˆλ‹€. 이번 μ‹œκ°„μ—λŠ” Serializable μΈν„°νŽ˜μ΄μŠ€λŠ” μ–΄λ–€ μš©λ„λ‘œ μ‚¬μš©ν•˜λŠ”μ§€ κ³΅λΆ€ν•΄λ³΄μž Serializable public class SerializableTest implements Serializable { ... } 사전적 μ˜λ―Έλ‘œλŠ” μ§λ ¬ν™”λΌλŠ” λœ»μ„ 가진닀. μ§λ ¬ν™”λŠ” λ¬΄μ—‡μΌκΉŒ? λͺ¨λž˜μ‹œκ³„ μ•ˆμ— μžˆλŠ” λͺ¨λž˜λ­‰μΉ˜κ°€ 쒁은 ν†΅λ‘œλ₯Ό 톡과 ν•  λ•Œ 각각의 μ•Œκ°±μ΄λ‘œ λ‚˜λ‰˜μ–΄μ Έ μ§€λ‚˜κ°€λŠ” 것을 λ³Ό 수 μžˆλŠ”λ°, μ΄λŠ” Serializable κ³Ό λΉ„μŠ·ν•˜λ‹€κ³  μƒκ°λœλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 외뢀와 데이터λ₯Ό μ£Όκ³  λ°›κΈ° μœ„ν•΄μ„œ Stream μ΄μš©ν•˜μ—¬ ν†΅μ‹ ν•˜λŠ”λ°, 이 λ•Œ Str..

Programming/Java 2021.06.16

F017 - Blocking, Non-Blocking / Synchronous, Asynchronous

✍️ μ˜ˆμ „μ— Node.jsλ₯Ό 잠깐 κ³΅λΆ€ν•˜λ©΄μ„œ 기초 지식을 μŒ“λŠ”λ‹€κ³  ν•΄λ‹Ή κ°œλ…μ„ 슀쳐 μ§€λ‚˜κ°€ λ“― μ°Ύμ•„ 봀던 기얡이 μžˆλ‹€. λΈ”λ‘œκ·Έμ— 정리도 ν–ˆλ˜ 것 같은데, λ‹Ήμ‹œμ—λŠ” Thread와 Process 그리고 이둜 인해 μš΄μ˜μ²΄μ œκ°€ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ‘°κΈˆλ„ μ•Œμ§€ λͺ»ν–ˆκΈ° λ•Œλ¬Έμ— μ „ν˜€ 이해가 μ•ˆλœ μƒνƒœλ‘œ κΈ€λ§Œ μ •λ¦¬ν–ˆμ—ˆλ‹€. (볡뢙 μˆ˜μ€€) 이번 μ‹œκ°„μ—λŠ” κ·Έλž˜λ„ μœ„μ˜ κ°œλ…μ— λŒ€ν•΄ λ―Έμ•½ν•˜κ²Œλ‚˜λ§ˆ 정리가 λ˜μ—ˆμœΌλ‹ˆ 이λ₯Ό 발판으둜 동기와 비동기, Blockingκ³Ό Non-Blocking에 λŒ€ν•΄ κ³΅λΆ€ν•΄λ³΄μž! Blocking / Non-Blocking Blocking : μ–΄λ– ν•œ ν–‰μœ„μ— μ˜ν•΄ μžμ‹ μ˜ ν–‰μœ„λ₯Ό μ΄μ–΄μ„œ μˆ˜ν–‰ν•˜μ§€ λͺ»ν•˜κ±°λ‚˜ λ§‰νžˆλŠ” 것. Non-Blocking : μ–΄λ– ν•œ ν–‰μœ„μ— ꡬ애 받지 μ•Šκ³  μžμ‹ μ˜ ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것. Sync /..

Programming/Java 2021.06.15

F016 - File, I/O, Stream

✍️ μ‹€λ¬΄μ—μ„œ μ—‘μ…€μ΄λ‚˜ CSV νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜κ±°λ‚˜ μ—…λ‘œλ“œν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆλ˜ κ²½ν—˜μ΄ μžˆλŠ”λ°, μ—‘μ…€μ˜ 경우 Apache μž¬λ‹¨μ—μ„œ μ œκ³΅ν•˜λŠ” 라이브러리λ₯Ό μ΄μš©ν•΄μ„œ κ΅¬ν˜„ν–ˆκ³ , CSV의 경우 ByteArrayInputStream 으둜 κ΅¬ν˜„ν–ˆμ—ˆλ‹€. ν•˜μ§€λ§Œ λ‹Ήμ‹œμ—λŠ” κ·Έλƒ₯ 이 클래슀λ₯Ό μ“°λ©΄ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ/μ—…λ‘œλ“œ ν•  수 μžˆλ‹€λŠ” κ²ƒλ§Œ μ•Œκ³  μ–΄λ–»κ²Œ λ‹€μš΄λ‘œλ“œ/μ—…λ‘œλ“œλ₯Ό ν•  수 μžˆλŠ”μ§€ μ•Œμ§€ λͺ»ν–ˆλ‹€. 이번 μ‹œκ°„μ„ 톡해 I/O, File, I/O Stream 에 λŒ€ν•΄ κ³΅λΆ€ν•΄λ³΄μž! File java.io νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” 클래슀둜 파일뿐만 μ•„λ‹ˆλΌ 파일의 κ²½λ‘œκΉŒμ§€ ν¬ν•¨ν•˜λŠ” 포괄적인 ν΄λž˜μŠ€μ΄λ‹€. λ•Œλ¬Έμ— λͺ©μ μ˜ λͺ¨ν˜Έμ„± λ•Œλ¬Έμ— Java 7 λΆ€ν„° NIO2 νŒ¨ν‚€μ§€λ₯Ό μ œκ³΅ν•˜λ©΄μ„œ Files ν΄λž˜μŠ€κ°€ μΆ”κ°€λ˜λŠ”λ°, μ΄λŠ” File 클래슀 λŒ€λΆ€λΆ„μ˜ λ©”μ†Œ..

Programming/Java 2021.06.14

F015 - Set (μž‘μ„± 쀑)

✍️ 이번 μ‹œκ°„μ—λŠ” Setκ³Ό Queue μΈν„°νŽ˜μ΄μŠ€μ™€ 이λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ³ , 각 클래슀 λ³„λ‘œ μ–΄λ–»κ²Œ ν•΄λ‹Ή 자료ꡬ쑰λ₯Ό κ΅¬ν˜„ν–ˆλŠ”μ§€, νŠΉμ§•μ€ 무엇인지 μ•Œμ•„λ³΄λŠ” μ‹œκ°„μ„ 가져보렀 ν•œλ‹€. Set μˆ˜ν•™μ—μ„œμ˜ μ§‘ν•©μ˜ κ°œλ…κ³Ό λ™μΌν•˜κ²Œ 쀑볡 집합을 μ œμ™Έν•˜κ³  집합 λ‚΄ μ‘΄μž¬ν•˜λŠ” μ›μ†Œλ“€μ€ μ„œλ‘œ λ‹€λ₯΄λ©°, 같은 μ›μ†Œκ°€ μ—¬λŸ¬ 개 쑴재 ν•  수 μ—†λ‹€. 이λ₯Ό λ°”νƒ•μœΌλ‘œ Set μžλ£Œκ΅¬μ‘°λŠ” 객체 내에 λ‹΄κΈ΄ λ°μ΄ν„°μ˜ 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. λ˜ν•œ, Set μžλ£Œκ΅¬μ‘°λŠ” μˆœμ„œμ— 상관없이 데이터λ₯Ό λ‹΄λŠ”λ‹€. λ•Œλ¬Έμ— νŠΉμ • μˆœμ„œμ— μ‘΄μž¬ν•˜λŠ” 데이터λ₯Ό κΊΌλ‚΄μ–΄ μ‚¬μš©ν•  λ•Œ μ‚¬μš©ν•˜κΈ° λ³΄λ‹€λŠ” νŠΉμ • 데이터가 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜κ±°λ‚˜ ν•΄λ‹Ή 객체 내에 데이터가 μ–Όλ§ˆλ‚˜ μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 주둜 μ‚¬μš©λœλ‹€. μ΄λŸ¬ν•œ Set μΈν„°νŽ˜μ΄μŠ€λŠ” Collection μΈν„°νŽ˜μ΄..

Programming/Java 2021.05.31

F014 - List (ArrayList, LinkedList, Vector, Stack)

✍️ μ§€κΈˆκΉŒμ§€ κ°œλ°œμ„ ν•˜λ©΄μ„œ λ‹€μ–‘ν•œ 자료ꡬ쑰λ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ, μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ λͺ¨λ₯Έ 채 μ‚¬μš©ν–ˆμ—ˆλ‹€. κ·Έλž˜μ„œ μ—¬λŸ¬ 상황듀 μ†μ—μ„œ 자료ꡬ쑰λ₯Ό 적절히 μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 남듀이 μ“°λ‹ˆκΉŒ 따라 μ“°κ³ , λ‚΄κ°€ μ΅μˆ™ν•˜λ‹ˆκΉŒ κ·Έλƒ₯ μ“°λŠ” 것이 버릇이 됐닀. 이번 μ‹œκ°„μ„ 톡해 κ°€μž₯ 자주 μ‚¬μš©ν•˜λŠ” List μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•΄ κ³΅λΆ€ν•˜κ³  이λ₯Ό κ΅¬ν˜„ν•œ ArrayList와 LinkedList의 차이λ₯Ό ν™•μΈν•΄λ³΄μž. List List(μ΄ν•˜ 리슀트)λŠ” 데이터λ₯Ό μ€‘λ³΅ν•˜μ—¬ 담을 수 있고, 객체에 데이터가 λ‹΄κΈ°λŠ” μˆœμ„œλŒ€λ‘œ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœλ‹€λŠ” νŠΉμ§•μ„ 가지고 μžˆλ‹€. μ΄λŸ¬ν•œ νŠΉμ§• 덕뢄에 데이터λ₯Ό μˆœμ„œλŒ€λ‘œ μ‘°νšŒν•  λ•Œ 주둜 μ‚¬μš©λœλ‹€. 이λ₯Ό ν™•μž₯ν•œ ν΄λž˜μŠ€λ‘œλŠ” Vector, ArrayList, LinkedListκ°€ μ‘΄μž¬ν•œλ‹€. Method λ©”μ†Œλ“œ μ„€λͺ… add(..

Programming/Java 2021.05.30

F013 - Generic

✍️ κ΅­λΉ„ ν•™μ›μ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό 진행할 λ•Œ Map μžλ£Œκ΅¬μ‘°κ°€ 뭔지도 λͺ°λžλ˜ μ‹œμ ˆ, μ„œλ‘œ λ‹€λ₯Έ 객체λ₯Ό Object 배열에 λ‹΄μ•„ 직접 ν˜•λ³€ν™˜μ„ ν•΄μ„œ 데이터λ₯Ό μ‘°μž‘ν–ˆλ˜ 기얡이 μžˆλŠ”λ°, 이 λ•Œ ν˜•λ³€ν™˜μ„ 자꾸 잘λͺ»ν•΄μ„œ λŸ°νƒ€μž„ μ—λŸ¬κ°€ 계속 λ‚¬λ˜ κ²½ν—˜μ΄ 생각났닀. 과거에 λ§ˆμ£Όν–ˆλ˜ λ¬Έμ œλ“€μ„ μƒκΈ°ν•˜κ³ , μ™œ ν•΄λ‹Ή κ°œλ…μ΄ ν•„μš”ν•œμ§€ 이번 ν•™μŠ΅μ„ 톡해 μ•Œμ•„κ°€λŠ” μ‹œκ°„μ„ κ°€μ Έλ³΄μž. Generic Genericμ΄λž€ λ‹¨μ–΄μ˜ 사전적 μ˜λ―ΈλŠ” '포괄적인' μ΄λΌλŠ” λœ»μ΄λ‹€. 단어 뜻 κ·ΈλŒ€λ‘œ ν΄λž˜μŠ€μ— λ‹΄κΈΈ κ°μ²΄λ‚˜ λ©”μ†Œλ“œ, μƒμ„±μžμ˜ 맀개 λ³€μˆ˜μ˜ μ’…λ₯˜λ₯Ό νŠΉμ • 클래슀λ₯Ό μ§€μ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, 포괄적인 의미의 단어λ₯Ό μ‚¬μš©ν•΄ λ‹΄κΈΈ 객체의 μ’…λ₯˜μ— λŒ€ν•΄μ„œ μ—΄μ–΄λ‘”λ‹€λŠ” 의미둜 μ‚¬μš©ν•œλ‹€. 즉, Generic은 컴파일 νƒ€μž„μ—μ„œ ν΄λž˜μŠ€μ— λ‹΄κΈΈ 객체의 ν˜•νƒœμ— ν•΄λ‹Ή 클래..

Programming/Java 2021.05.26

F012 - Annotation

✍️ μžλ°”μ˜ μ‹  ν›„λ°˜λΆ€μ— Annotation에 λŒ€ν•΄μ„œ κ³΅λΆ€ν–ˆλ‹€. 3μ£Όμ°¨ λ©˜ν† λ§ 쀑, λ©˜ν† λ‹˜κ»˜μ„œ Lombok이 μš°λ¦¬κ°€ μž‘μ„±ν•œ μ†ŒμŠ€μ½”λ“œμ— μ–΄λ–»κ²Œ κ°œμž…ν•˜λŠ”μ§€ μ—¬μ­€λ³΄μ…¨λŠ”λ° μ‘μš©μ΄ λ˜μ§€ μ•Šμ•„μ„œ λŒ€λ‹΅λ„ λͺ»ν•˜λŠ” 꿀먹은 벙어리가 λ˜μ—ˆλ‹€. 이번 μ‹œκ°„μ—λŠ” Annotation에 λŒ€ν•΄μ„œ κ°„λ‹¨νžˆ μ •λ¦¬ν•΄λ³΄μž! Annotation μ–Όλ§ˆ μ „ κ³΅λΆ€ν•œ λ‚΄μš© 쀑, @Override Annotation(μ΄ν•˜ μ–΄λ…Έν…Œμ΄μ…˜)에 λŒ€ν•΄μ„œ κ³΅λΆ€ν–ˆλ‹€. @Override μ–΄λ…Έν…Œμ΄μ…˜μ€ λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ μƒμ„±μž ν˜Ήμ€ λ©”μ†Œλ“œλ₯Ό μƒμ†λ°›λŠ” μžμ‹ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ ν•  λ•Œ, ν•΄λ‹Ή μƒμ„±μž ν˜Ήμ€ λ©”μ†Œλ“œλŠ” μž¬μ •μ˜λœ μƒνƒœν•˜λŠ” 것이라고 λͺ…μ‹œμ μœΌλ‘œ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€. ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ˜ μ†ŒμŠ€μ½”λ“œλ₯Ό 확인해보면, @Override μ–΄λ…Έν…Œμ΄μ…˜μ€ 1. λ©”μ†Œλ“œ μ˜μ—­μ—μ„œ μ‚¬μš© ν• ..

Programming/Java 2021.05.24

F011 - java.lang.ref

✍️ 이전 μ‹œκ°„μ— Garbage Collector에 λŒ€ν•΄ κ³΅λΆ€ν•˜λ©΄μ„œ Strong, Weak, Soft, Phantom Reference 에 λŒ€ν•΄ 잠깐 슀쳐 μ§€λ‚˜κ°”λ‹€. μ΄λ•Œ, ν•΄λ‹Ή 뢀뢄에 λŒ€ν•΄ μžμ„Ένžˆ κ³΅λΆ€ν•˜μ§€ λͺ»ν–ˆκ³ , λ©˜ν† λ‹˜κ»˜μ„œ static으둜 μ„ μ–Έλœ λ³€μˆ˜λ“€μ€ μ–΄λ–»κ²Œ GC μ²˜λ¦¬κ°€ λ˜λŠ”μ§€, μ–΄λ–»κ²Œ μ΄ˆκΈ°ν™” ν•  수 μžˆλŠ”μ§€ μ§ˆλ¬Έν•΄μ£Όμ…¨λ‹€. κ·Έλž˜μ„œ 이번 μ‹œκ°„μ—λŠ” GCλ₯Ό μˆ˜ν–‰ν•  λ•Œ, μœ„μ˜ 4 가지가 μ–΄λ–€ 것인지 μ•Œμ•„λ³΄λŠ” μ‹œκ°„μ„ κ°€μ Έλ³΄μž! java.lang.ref Javaμ—μ„œλŠ” 객체의 참쑰에 λŒ€ν•œ μœ ν˜•μ„ 4κ°€μ§€λ‘œ λ‚˜λˆ„μ–΄ κ΅¬λΆ„ν•˜κ³ , 각각의 μƒνƒœμ— 따라 GCκ°€ ν•΄λ‹Ή 객체λ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ 정리해야 할지 μ•ˆν• μ§€λ₯Ό νŒλ‹¨ν•˜λ©°, κ°œλ°œμžκ°€ ν•΄λ‹Ή νŒ¨ν‚€μ§€μ—μ„œ μ œκ³΅ν•˜λŠ” 클래슀λ₯Ό 톡해 GC μˆ˜ν–‰μ— μ–΄λŠμ •λ„ κ΄€μ—¬ ν•  수 μžˆλ‹€. 이전에 Garbag..

Programming/Java 2021.05.19