λͺ©λ‘π» Java Study/Java μ΄λ‘ μ 리 (26)
Coding Planet
private static String escapeSpecialCharacters(String data) { if (data == null) { return ""; } String escapedData = data.replace("\"", "\"\""); if (data.contains(",") || data.contains("\n") || data.contains("\"")) { escapedData = "\"" + escapedData + "\""; } return escapedData; }}λ°μ΄ν°λ₯Ό csvλ‘ λ§λλ κ³Όμ μμ νΉμλ¬Έμμ λν μ²λ¦¬κ° νμνλ€. data listμμ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LehUl/btsHooRONwS/DqNIiGSWbNsPiK4O8fh6lk/img.png)
νμ¬ κ°λ°μ€μΈ μΉνμ΄μ§ λ‘κ·ΈμΈ μ SpringSecurityLoginFilterλ₯Ό νλ©΄μ νμν μ μ°¨λ₯Ό λ°λ₯΄κ³ μλ€. νμ¬ νμ΄μ§λ μ¬μ©μκ° κ°μ μ μ²μ νλ©΄ κ΄λ¦¬μκ° μΉμΈ ν μ¬μ΄νΈλ₯Ό μ΄μ©ν μ μλ€. μ΄ λ μ¬μ© μν(κ°μ μ μ² or κ°μ μΉμ)μ μ‘°νν ν κ°μ λκΈ° μνλΌλ©΄ alertμ°½μ λμ°κ³ λ€μ λ‘κ·ΈμΈ νμ΄μ§λ‘ 보λ΄μΌνλ€. Java μλΈλ¦Ώμμ ν΄λΌμ΄μΈνΈμ JavaScript Alert μ°½μ λμ°λ €λ©΄, HttpServletResponse κ°μ²΄λ₯Ό μ¬μ©ν΄μΌ νλ€. λ€μμ κ°μ μ μ² μνκ° 'μΉμΈ λκΈ°(A)'μΈ κ²½μ°, μ¬μ©μμκ² μνλ₯Ό μλ¦¬κ³ λ‘κ·ΈμΈ νμ΄μ§λ‘ 리λλ μ νλ μμ μ½λμ΄λ€. if ("A".equals(loginVO.getUserSttus())) { httpResponse.setConte..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xoNZJ/btsFAt1sbiV/U0MGMvbVkOusPQJ1EXRonk/img.png)
μλ° μ λ¬Έ λ 벨μμ κ°λ°μ λ¬Έμλ₯Ό 보거λ githubμ λ€λ₯Έ μ½λλ€μ λ³΄λ€ λ³΄λ©΄ Boxμ κ°μ λ―μ ννμ λ¬Έμ₯μ λ§λκ² λλ€. μ΄λ¬ν κ²λ€μ΄ μ§λ€λ¦μ€μΈλ° λ¨κΆμ± μ μμ μλ°μ μ μμ μ°Έκ³ νμ¬ μ λ¬Έμμ€μμ κ°λ¨νκ² μ΄ν΄λ³΄κ³ μ νλ€. μ΄λ ΅λ€λ©΄ κ°μ‘°λ λ΄μ©λ§ λ΄λ λμΆ© κ°μ μ‘μ μ μλ€. | μ§λ€λ¦μ€λ? μ§λ€λ¦μ€λ λ€μν νμ μ κ°μ²΄λ€μ λ€λ£¨λ λ©μλλ 컬λ μ ν΄λμ€μ μ»΄νμΌ μ μ νμ 체ν¬(compile-time type check)λ₯Ό ν΄μ£Όλ κΈ°λ₯μ΄λ€. κ°μ²΄μ νμ μ μ»΄νμΌ μμ 체ν¬νκΈ° λλ¬Έμ κ°μ²΄μ νμ μμ μ±μ λμ΄κ³ νλ³νμ λ²κ±°λ‘μμ΄ μ€μ΄λ λ€. -μλ°μ μ μ 1. μ»΄νμΌ μ μ νμ 체ν¬(compile-time type check) μ§λ€λ¦μ€λ₯Ό μ¬μ©νλ©΄, 컬λ μ μ μ μ₯λλ κ°μ²΄μ νμ μ μ»΄νμΌ μμ ..
λλ€μμ κ΄ν κ°κ΄μ μΈ ν¬μ€νΈλ μλ μ°Έμ‘°! https://sharonprogress.tistory.com/330 λλ€μ(Lamda expression) μ΄μ 리μ νμ©μμ μλ ν¬μ€νΈμ μμ λ° λ΄μ©μ λ¨κΆμ± μ μμ μλ°μ μ μμ λ§μ΄ μ°Έκ³ νλ€. | λλ€μμ΄λ λλ€μμ κ°λν λ§ν΄μ λ©μλλ₯Ό νλμ 'μ(expression)'μΌλ‘ ννν κ²μ΄λ€. μλ° 8λΆν° λ±μ₯ν κ°λ μΌ sharonprogress.tistory.com μ μ ν¬μ€νΈμμ μ€λͺ νλλ‘ λλ€μμ λ©μλλ₯Ό νλμ μμΌλ‘ ννν΄ κ°λ΅νλ©΄μ λͺ ννκ² μμΌλ‘ ννν μ μλλ‘νλ ννμμ΄λ€. μ΄μ λν΄ λλ€μμ΄ νλμ λ©μλλ§ νΈμΆνλ κ²½μ°μλ 'λ©μλ μ°Έμ‘°(method reference)'λΌλ λ°©λ²μΌλ‘ λλ€μμ λμ± κ°λ΅νκ² μΈ μ μλ€. | λ©μ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/brc158/btsFuLVR5s2/YG1AMG5utLeJOzQIU8q5n0/img.png)
μλ ν¬μ€νΈμ μμ λ° λ΄μ©μ λ¨κΆμ± μ μμ μλ°μ μ μμ λ§μ΄ μ°Έκ³ νλ€. | λλ€μμ΄λ λλ€μμ κ°λν λ§ν΄μ λ©μλλ₯Ό νλμ 'μ(expression)'μΌλ‘ ννν κ²μ΄λ€. μλ° 8λΆν° λ±μ₯ν κ°λ μΌλ‘ κ°μ²΄μ§ν₯μΈμ΄μΈ μλ°μ ν¨μν νμ©μ λν΄μ£Όμλ€. λλ€μμ λ©μλμ 맀κ°λ³μλ‘ μ λ¬λμ΄μ§λ κ²μ΄ κ°λ₯νκ³ , λ©μλμ κ²°κ³Όλ‘ λ°νλ μλ μλ€. λλ€μμΌλ‘ μΈν΄ λ©μλλ₯Ό λ³μμ²λΌ λ€λ£¨λ κ²μ΄ κ°λ₯ν΄μ§ κ²μ΄λ€. λ©μλλ₯Ό λλ€μμΌλ‘ νννλ©΄ λ©μλμ μ΄λ¦κ³Ό λ°νκ°μ΄ μμ΄μ§λ―λ‘ λλ€μμ 'μ΅λͺ ν¨μ'λΌκ³ νκΈ°λ νλ€. μλ μμμ (i) -> (int)(Math.random()*5+1) λΆλΆμ΄ λλ€μμ΄λ€. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3VCpv/btsFofYcSab/LWNdUt8DTr5Tr5MyyUkbz0/img.png)
| μλ°μ μ μ(λ¨κΆ μ± μ μ) λ°μ· μ ν΅μ μΌλ‘ νλ‘κ·Έλλ°μμ ν¨μλΌλ μ΄λ¦μ μνμμ λ°μ¨ κ²μ λλ€. μνμ ν¨μμ κ°λ μ΄ μ μ¬νκΈ° λλ¬Έμ΄μ£ . κ·Έλ¬λ κ°μ²΄μ§ν₯κ°λ μμλ ν¨μ(function)λμ κ°μ²΄μ νμλ λμμ μλ―Ένλ λ©μλ(method)λΌλ μ©μ΄λ₯Ό μ¬μ©ν©λλ€. λ©μλλ ν¨μμ κ°μ μλ―Έμ΄μ§λ§, νΉμ ν΄λμ€μ λ°λμ μν΄μΌ νλ€λ μ μ½μ΄ μκΈ° λλ¬Έμ κΈ°μ‘΄μ ν¨μμ κ°μ μλ―Έμ λ€λ₯Έ μ©μ΄λ₯Ό μ νν΄μ μ¬μ©ν κ²μ λλ€. κ·Έλ¬λ μ΄μ λλ€μμμλ λ©μλκ° νλμ λ 립μ μΈ κΈ°λ₯μ νκΈ°λλ¬Έμ ν¨μλΌλ μ©μ΄λ₯Ό μ¬μ©νκΈ°λ ν©λλ€. | μ»΄ν¨ν° μΈμ΄ λ΄μμ λ©μλμ ν¨μμ μ°¨μ΄ μ»΄ν¨ν° νλ‘κ·Έλλ°μμ "λ©μλ(method)"μ "ν¨μ(function)" μ©μ΄λ μ’ μ’ νΌμ©λμ§λ§, κ·Έλ€ μ¬μ΄μλ λͺ νν μ°¨μ΄μ μ΄ μλ€...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/L4KmW/btsFjUNRwWC/zXtXmcxQXJAreLo1GRKVaK/img.png)
ConCurrentHashMapκ³Ό HashTableμ 곡λΆνλ©΄μ κ²½μ쑰건과 Lockμ΄ μ£Όμ ν€μλλ‘ λ±μ₯νλ€. μ€λ λλ₯Ό 곡λΆνλ©΄μ λΉλ²νκ² λ±μ₯νκΈ° λλ¬Έμ λ κ°λ λͺ¨λ μ΄λ ΄νμ΄ μκ³ μκΈ΄ νμ§λ§ μ΄λ² κΈ°νμ μ 리νκ³ κ°μΌκ² λ€. | κ²½μ 쑰건 (Race Condition)κ³Ό Lock κ²½μ 쑰건μ λ©ν° μ€λ λ νλ‘κ·Έλ¨μμ λ κ° μ΄μμ μ€λ λκ° λ°μ΄ν°λ μμμ λμμ μ κ·Όνλ €κ³ ν λ λ°μνλ λ¬Έμ μ΄λ€. μ΄λ¬ν μν©μμ μ€λ λλ€μ μ€ν μμμ λ°λΌ νλ‘κ·Έλ¨μ κ²°κ³Όκ° λ¬λΌμ§ μ μμΌλ©°, μ΄λ λ°μ΄ν°μ μΌκ΄μ±κ³Ό μ νμ±μ ν΄μΉ μ μλ€. κ²½μ 쑰건μ λ°©μ§νκΈ° μν΄ λκΈ°ν λ©μ»€λμ¦(λνμ μΌλ‘ Lock)μ μ¬μ©νμ¬ μ€λ λλ€μ΄ μμμ μμ νκ² μ κ·Όν μ μλλ‘ ν΄μΌνλ€. Lockμ λμμ μ¬λ¬ μ€λ λκ° κ°μ μμμ ..
HashMap / HashTable / ConCurrentHashMapμ Javaμ Map μΈν°νμ΄μ€ ꡬν체μ΄λ€. | HashMap / HashTable / ConCurrentHashMap λΉκ΅νκΈ° νΉμ§/ꡬν체 HashMap Hashtable ConcurrentHashMap λκΈ°ν (Synchronization) λκΈ°νλμ§ μμ λκΈ°νλ¨ λΆλΆ λκΈ°ν(μΈκ·Έλ¨ΌνΈ λ½) Null νμ© ν€μ κ° λͺ¨λμ null νμ© null νμ©νμ§ μμ null νμ©νμ§ μμ μ±λ₯ λΉ λ¦ λλ¦Ό HashMapλ³΄λ€ λ리μ§λ§, Hashtable보λ€λ λΉ λ¦ Iterator fail-fast fail-safeκ° μλ fail-safe λ©ν° μ€λ λ νκ²½ μ ν©νμ§ μμ(λκΈ°ν μΆκ° νμ) μ ν©νμ§λ§ μ±λ₯ μ ν μ ν©νλ©° μ±λ₯ μ΅μ νλ¨ μ©λ λ¨..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Mnp5v/btsFjX4B9PH/zIj2vv3OLK1ufmAqK3Xi00/img.png)
|ThreadLocalμ΄λ ThreadLocalμ Javaμ μ€λ λ λ‘컬 λ³μλ₯Ό κ΄λ¦¬ν μ μλλ‘ νλ κΈ°λ₯μ΄λ€. μ§κΈκΉμ§ λ³μλ€μ ν΄λμ€, λ©μλ λ 벨μμ κ΄λ¦¬λμλλ° μ€λ λλ³λ‘ μ μ₯λκ³ κ΄λ¦¬ν μ μλ κ²μ΄λ€. μ¦, ν μ€λ λμμ μ€μ ν ThreadLocal λ³μμ κ°μ λ€λ₯Έ μ€λ λμ 곡μ λμ§ μμΌλ©°, κ° μ€λ λλ ν΄λΉ λ³μμ μμ λ§μ λ 립μ μΈ κ°μ μ μ§νκ² λλ€. μ΄λ₯Ό ν΅ν΄ μ€λ λ κ° λ°μ΄ν° κ²©λ¦¬κ° μ΄λ£¨μ΄μ Έ μ€λ λ μμ μ±(thread-safety)μ ν보ν μ μλ€. λ κ°λ¨ν μ€λͺ νμλ©΄ threadLocalλ³μλ₯Ό μ μΈνλ©΄ λ©ν° μ€λ λ νκ²½μμ κ° μ€λ λλ§λ€ λ 립μ μΈ λ³μλ₯Ό κ°μ§κ² λκ³ κ° κ°μ get(), set() λ©μλλ₯Ό ν΅ν΄ μ κ·Όν μ μκ² λλ€. **thread-safety λ©ν° μ€λ λ© ..
"Daemon" μ΄λΌλ λ¨μ΄λ μλ κ·Έλ¦¬μ€ μ νμ 보νΈμ λλ μ μ μ§λ°°λ₯Ό λ°λ μνΌμ μλ―Ένλ λ¨μ΄μμ μ λλ¬μΌλ, μ»΄ν¨ν λΆμΌμμ λ°±κ·ΈλΌμ΄λμμ μ€νλλ νλ‘μΈμ€λ μλΉμ€λ₯Ό μλ―Ένλ€. λ³΄ν΅ μ¬μ©μμ μ§μ μ μΈ κ°μ μμ΄ λ 립μ μΌλ‘ μ€νλλ©° μμ€ν κ΄λ¦¬, μμ κ΄λ¦¬, νμΌ μ μ‘, λ€νΈμν¬ μλΉμ€ μ 곡 λ±μ μμ μ μννλ νλ‘κ·Έλ¨μ κ°λ¦¬ν¨λ€. μ΄μ체μ λ μλ²μμλ λ€μν λ°λͺ¬μ΄ μμ€ν μ κΈ°λ³Έμ μΈ κΈ°λ₯μ μ§μνκΈ° μν΄ μ€νλκ³ μλλ° μ΄ ν¬μ€νΈμμλ λ°λͺ¬μ°λ λ(daemeon thread)λ₯Ό μ€μ μ μΌλ‘ μ΄ν΄ λ³΄κ³ μ νλ€. | λ°λͺ¬ μ°λ λ(daemon thread) λ°λͺ¬ μ°λ λλ μΌλ°μ°λ λ(λ°λͺ¬ μ°λ λκ° μλ μ°λ λ)μ μμ μ λλ 보쑰μ μΈ μν μ μννλ μ°λ λμ΄λ€. μ£Ό μ°λ λ(μ ν리μΌμ΄μ μ λ©μΈμ°λ λ)κ° μ’ ..