πŸ“‚ JAVA

    JVM λ©”λͺ¨λ¦¬ ꡬ쑰

    1. JVM κ°œλ… πŸ‘¨‍πŸ”§ JVM(Java Virtual Machine)μ΄λž€ 'μžλ°”λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•œ κ°€μƒμ˜ 컴퓨터'라고 ν•  수 μžˆλ‹€. μ—¬κΈ°μ„œ λ§ν•˜λŠ” κ°€μƒμ˜ μ»΄ν“¨ν„°λž€ μ‹€μ œ 컴퓨터(ν•˜λ“œμ›¨μ–΄)κ°€ μ•„λ‹Œ μ†Œν”„νŠΈμ›¨μ–΄λ‘œ κ΅¬ν˜„λœ 컴퓨터 μ†μ˜ 컴퓨터이닀. μžλ°”λ‘œ μž‘μ„±λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λͺ¨λ‘ JVMμ—μ„œλ§Œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” JVM이 λ°˜λ“œμ‹œ ν•„μš”ν•˜λ‹€. JVM은 OS에 쒅속적이기 λ•Œλ¬Έμ— ν•΄λ‹Ή OSμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•œ JVM이 ν•„μš”ν•˜λ‹€. μ΄λŸ¬ν•œ νŠΉμ„±μœΌλ‘œ 인해 μžλ°”μ˜ μž₯점 쀑 ν•˜λ‚˜λ‘œ 'Write Once, Run AnyWhere.(ν•œ 번 μž‘μ„±ν•˜λ©΄ μ–΄λ””μ„œλ“  μ‹€ν–‰λœλ‹€.)'λΌλŠ” 것이 μžˆλ‹€. 2. 3가지 μ£Όμš” μ˜μ—­ πŸ‘©‍πŸ”¬ JVM은 λ©”λͺ¨λ¦¬λ₯Ό μš©λ„μ— 따라 μ—¬λŸ¬ μ˜μ—­μœΌλ‘œ λ‚˜λˆ„μ–΄ κ΄€λ¦¬ν•œλ‹€. κ·Έ 쀑 3가지 μ£Όμš” μ˜μ—­μΈ..

    λ³€μˆ˜

    1. λ³€μˆ˜ πŸƒ‍♂️ μžλ°”μ—μ„œ μžλ£Œν˜•μ€ 크게 'κΈ°λ³Έν˜•'κ³Ό 'μ°Έμ‘°ν˜•' 두 κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. κΈ°λ³Έν˜• λ³€μˆ˜λŠ” μ‹€μ œ κ°’(data)을 μ €μž₯ν•˜κ³ , μ°Έμ‘°ν˜• λ³€μˆ˜λŠ” μ–΄λ–€ 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” μ£Όμ†Œ(memory address)λ₯Ό κ°’μœΌλ‘œ κ°–λŠ”λ‹€. κΈ°λ³Έν˜•μ—λŠ” 8κ°€μ§€μ˜ νƒ€μž…μ΄ 있고, 8개의 κΈ°λ³Έν˜•μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€λŠ” λͺ¨λ‘ μ°Έμ‘°ν˜•μ΄λ‹€. 2. κΈ°λ³Έν˜• 🏌️‍♂️ 1. ꡬ뢄 κΈ°λ³Έν˜•μ€ 크게 'λ…Όλ¦¬ν˜•, λ¬Έμžν˜•, μ •μˆ˜ν˜•, μ‹€μˆ˜ν˜•'으둜 κ΅¬λΆ„ν•œλ‹€. λ…Όλ¦¬ν˜• boolean λ¬Έμžν˜• char μ •μˆ˜ν˜• byte short int long μ‹€μˆ˜ν˜• float double 2. 크기 κΈ°λ³Έν˜•μ˜ ν¬κΈ°λŠ” λ‹€μŒκ³Ό κ°™λ‹€. 1 byte 2 byte 4 byte 8 byte λ…Όλ¦¬ν˜• boolean λ¬Έμžν˜• char μ •μˆ˜ν˜• byte short int long μ‹€μˆ˜ν˜• floa..

    곡변 λ°˜ν™˜νƒ€μž… (Convariant Return Type)

    1. μ •μ˜ 🌻 곡변 λ°˜ν™˜νƒ€μž…μ΄λž€ μž¬μ •μ˜ν•œ λ©”μ„œλ“œμ˜ λ°˜ν™˜ νƒ€μž…μ€ μƒμœ„ 클래슀의 λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” νƒ€μž…μ˜ ν•˜μœ„ νƒ€μž…μ΄ 될 수 μžˆλ‹€λŠ” 것이닀. 기쑴의 μ˜€λ²„λΌμ΄λ”©μ€ 'λ©”μ„œλ“œμ˜ 이름', '맀개 λ³€μˆ˜μ˜ 개수, νƒ€μž…, μˆœμ„œ', '리턴 νƒ€μž…'이 κ°™μ•„μ•Ό ν–ˆλ‹€. ν•˜μ§€λ§Œ JDK1.5λΆ€ν„° 곡변 λ°˜ν™˜νƒ€μž…μ΄ μΆ”κ°€λ˜λ©΄μ„œ μ˜€λ²„λΌμ΄λ”©μ„ ν•  λ•Œ λ‹€λ₯Έ 리턴 νƒ€μž…μ„ κ°€μ§ˆ 수 있게 λ˜μ—ˆλ‹€. μ—¬κΈ°μ„œ λ‹€λ₯Έ νƒ€μž…μ΄λž€ λΆ€λͺ¨ν΄λž˜μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œμ˜ 리턴 νƒ€μž…μ˜ μ„œλΈŒνƒ€μž…μ„ λ§ν•œλ‹€. 2. κ΅¬ν˜„(JAVA) 🌼 μ˜€λ²„λΌμ΄λ”©μ—μ„œμ˜ λ¦¬ν„΄νƒ€μž…μ€ λΆ€λͺ¨ν΄λž˜μŠ€ 리턴 νƒ€μž…μ˜ μ„œλΈŒνƒ€μž…μ΄λ©΄ λœλ‹€. 이 점을 μœ μ˜ν•΄μ„œ μ½”λ“œλ₯Ό 보자. class Parent { Parent testMethod() { return this; } } class ChildA extends Parent ..

    마컀 μΈν„°νŽ˜μ΄μŠ€ (Marker Interface)

    1. μ •μ˜ πŸ’ interface XXX { } 마컀 μΈν„°νŽ˜μ΄μŠ€(Marker Interface)λž€ 아무 λ©”μ„œλ“œλ„ μ„ μ–Έν•˜μ§€ μ•Šμ€ μΈν„°νŽ˜μ΄μŠ€λ‹€. ν•΄λ‹Ή μΈν„°νŽ˜μ΄μŠ€λŠ” 객체의 νƒ€μž…κ³Ό κ΄€λ ¨λœ μ •λ³΄λ§Œμ„ μ œκ³΅ν•΄ μ£ΌλŠ” 역할을 ν•œλ‹€. κ·Έλž˜μ„œ μ»΄νŒŒμΌλŸ¬μ™€ JVM은 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 객체에 λŒ€ν•œ 좔가적인 정보λ₯Ό 얻을 수 μžˆλ‹€. 쑰금 더 κ°„λ‹¨ν•˜κ²Œ λ§ν•˜μžλ©΄, 마컀 μΈν„°νŽ˜μ΄μŠ€λŠ” μžμ‹ μ„ κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€κ°€ νŠΉμ • 속성을 κ°€μ§„λ‹€λŠ” 것을 ν‘œν˜„ν•΄ μ£ΌλŠ” 것이닀. 2. μ˜ˆμ‹œλ₯Ό ν†΅ν•œ 이해 πŸ₯ 마컀 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€κ°€ νŠΉμ • 속성을 κ°€μ§„λ‹€λŠ” 것을 ν‘œμ‹œν•΄ μ£ΌλŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ? μ•„λž˜μ˜ 동물 μ˜ˆμ‹œλ₯Ό 톡해 μ•Œμ•„λ³΄μž. κΈ°λ³Έ 섀정은 μ•„λž˜μ™€ κ°™λ‹€. μƒμœ„ν΄λž˜μŠ€μΈ Animalμ΄λΌλŠ” ν΄λž˜μŠ€κ°€ μžˆλ‹€. Dog, Lion, Snake, Fish... λ“± μ—¬λŸ¬..

    toString을 항상 μž¬μ •μ˜ν•˜λΌ - [3μž₯. λͺ¨λ“  객체의 곡톡 λ©”μ„œλ“œ(μ•„μ΄ν…œ12)]

    1. toString을 μž¬μ •μ˜ ν•΄μ•Ό ν•˜λŠ” 이유 πŸ§ƒ 1. Object의 toString λ©”μ„œλ“œμ˜ κΈ°λ³Έ ν˜•μ‹ Object의 κΈ°λ³Έ toString λ©”μ„œλ“œλŠ” 'ν΄λž˜μŠ€μ΄λ¦„@16μ§„μˆ˜λ‘œ ν‘œμ‹œν•œ ν•΄μ‰¬μ½”λ“œ'λ₯Ό λ°˜ν™˜ν•΄ μ€€λ‹€. test.Test@15db9742이 ν•˜λ‚˜μ˜ μ˜ˆμ‹œμ΄λ‹€. μ΄λŠ” μš°λ¦¬κ°€ μž‘μ„±ν•œ ν΄λž˜μŠ€μ—μ„œ toString으둜 λ°˜ν™˜λ°›μ„ μ μ ˆν•œ κ°’μ˜ ν˜•νƒœκ°€ μ•„λ‹ˆλ‹€. λ˜ν•œ, Object.class에 μ •μ˜λœ toString을 μ‚΄νŽ΄λ³΄λ©΄ μ•„λž˜μ˜ λ‚΄μš©μ„ 확인할 수 μžˆλ‹€. The result should be a concise but informative representation that is easy for a person to read. κ°„κ²°ν•˜λ©΄μ„œ μ‚¬λžŒμ΄ 읽기 μ‰¬μš΄ ν˜•νƒœμ˜ μœ μ΅ν•œ 정보λ₯Ό λ°˜ν™˜ν•΄λΌ It is recommended ..

    Parsing(νŒŒμ‹±) - CSV, XML, JSON

    이번 κΈ€μ—μ„œλŠ” λ°μ΄ν„°μ˜ μ’…λ₯˜, Parsing(νŒŒμ‹±) & Parser(νŒŒμ„œ), Parsing의 μ‹€μ œ μ‚¬μš© 방법을 μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜μž. 1. CSV, XML, JSON 🌞 (1) CSV (Comma Separated Value) 🌱 CSVλŠ” λͺ‡ 가지 ν•„λ“œλ₯Ό μ‰Όν‘œ(,)둜 κ΅¬λΆ„ν•œ ν…μŠ€νŠΈ 데이터 및 ν…μŠ€νŠΈ νŒŒμΌμ΄λ‹€. name,age,visitTime μ΅œν•˜λŠ˜,23,2023-01-28 이ꡬ름,15,2023-01-29 κΉ€μ‚°,32,2023-01-30 (2) XML (eXtensible Markup Language) 🌳 XML은 HTMLκ³Ό 맀우 λΉ„μŠ·ν•œ 문자 기반의 λ§ˆν¬μ—… μ–Έμ–΄(text-based markup language)이닀. νƒœκ·Έλ₯Ό 톡해 데이터 ν˜•μ‹μ„ μ •μ˜ν•œλ‹€. XML νƒœκ·ΈλŠ” HTML νƒœκ·Έμ²˜λŸΌ 미리 μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šκ³ ,..

    μž…μΆœλ ₯(I/O)(2) - 직렬화(Serialization)

    1. 직렬화 κ°œλ… πŸ“ 직렬화(Serialization)λž€ 객체λ₯Ό 데이터 슀트림으둜 λ§Œλ“œλŠ” 것을 λ§ν•œλ‹€. 즉, ν˜„μž¬ 데이터(structure, object)의 μƒνƒœλ₯Ό μ˜μ†μ μœΌλ‘œ μ €μž₯ν•˜κ±°λ‚˜ λ‹€λ₯Έ ν™˜κ²½μœΌλ‘œ 전달(λ„€νŠΈμ›Œν¬ 톡신 λ“±) ν•˜κΈ° μœ„ν•΄ μ–΄λ– ν•œ 정해진 포맷으둜 λ³€ν™˜ν•˜λŠ” 과정이닀. λ³€ν™˜λœ 데이터λ₯Ό λ‹€μ‹œ μ›λž˜ λ°μ΄ν„°λ‘œ λ³€ν™˜ν•˜λŠ” 과정은 역직렬화(Deserialization)이라고 ν•œλ‹€. // 직렬화λ₯Ό ν•˜μ§€ μ•Šμ€ 경우 public class User{ private String name; private String id; String password; public User(String name, String id, String password) { this.name = name; this.id = id; this..

    μž…μΆœλ ₯(I/O)(1) - λ…Έλ“œ 슀트림, 보쑰 슀트림

    ꡬ체적인 λ‚΄μš©μ— 듀어가기에 μ•žμ„œ 기본적인 단어 3개λ₯Ό μ‚΄νŽ΄λ³΄μž. I/Oλž€ Input/Ouput의 μ•½μžλ‘œ μž…λ ₯κ³Ό 좜λ ₯을 λ‚˜νƒ€λ‚Έλ‹€. λ…Έλ“œ(Node)λž€ 'λ°μ΄ν„°μ˜ μΆœλ°œμ§€μ™€ λͺ©μ μ§€' λ˜λŠ” 'μž…λ ₯κ³Ό 좜λ ₯의 끝단'이닀. 데이터λ₯Ό μ „λ‹¬ν•˜κΈ° 데이터λ₯Ό μš΄λ°˜ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ—°κ²° ν†΅λ‘œκ°€ ν•„μš”ν•œλ° 그것이 슀트림(Stream)이닀. 이번 μ£Όμ œμ—μ„œλŠ” μž…μΆœλ ₯을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” λ…Έλ“œ 슀트림, 이λ₯Ό λ„μ™€μ£ΌλŠ” 보쑰 슀트림, 그리고 직렬화(Serialization)λ₯Ό μ•Œμ•„λ³΄μž. 1. λ…Έλ“œ 슀트림 πŸ›΄ λ…Έλ“œ μŠ€νŠΈλ¦Όμ΄λž€ λ…Έλ“œμ— μ—°κ²°λœ μŠ€νŠΈλ¦Όμ΄λ‹€. λ‹€μ–‘ν•œ λ…Έλ“œ μŠ€νŠΈλ¦Όλ“€μ΄ μžˆλŠ”λ° 3가지 쑰건으둜 λΆ„λ₯˜λ₯Ό ν•˜μ—¬ 그것에 ν•΄λ‹Ήν•˜λŠ” λ…Έλ“œμŠ€νŠΈλ¦Όμ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€. 3가지 λΆ„λ₯˜λŠ” μ•„λž˜μ™€ κ°™λ‹€. 데이터 νƒ€μž… 전솑할 데이터 νƒ€μž…μ΄ Byte인지 μ•„λ‹ˆλ©΄ Char인지 ..

    λžŒλ‹€μ‹(Lambda Expression) - (2)

    μ•žμ— 글에 μ΄μ–΄μ„œ λžŒλ‹€μ‹μ„ μ‚΄νŽ΄λ³΄μž. μ΄λ²ˆμ—λŠ” java.util.function νŒ¨ν‚€μ§€μ˜ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ™€ λ©”μ„œλ“œ 참쑰에 λŒ€ν•΄μ„œ μ•Œμ•„λ³Ό 것이닀. 1. ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ πŸ› ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ μ„€λͺ…이 ν•„μš”ν•˜λ‹€λ©΄ μ•žμ˜ 글을 μ°Έκ³ ν•˜κΈ°λ₯Ό λ°”λž€λ‹€. μ—¬κΈ°μ„œλŠ” java.util.functionμ—μ„œ μ œκ³΅ν•˜λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ˜ μ’…λ₯˜μ™€ μ‚¬μš©λ²•μ— λŒ€ν•΄μ„œλ§Œ μ•Œμ•„λ³΄κ³ μž ν•œλ‹€. ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œ μ„€λͺ… Runnable void run() λ§€κ°œλ³€μˆ˜ X, λ°˜ν™˜κ°’ X Supplier T get() λ§€κ°œλ³€μˆ˜ X, λ°˜ν™˜κ°’ O Consumer void accept(T t) λ§€κ°œλ³€μˆ˜ O, λ°˜ν™˜κ°’ X Function R apply(T t) λ§€κ°œλ³€μˆ˜ O, λ°˜ν™˜κ°’ O Predicate boolean test(T t) λ§€κ°œλ³€μˆ˜ O, ..

    λžŒλ‹€μ‹(Lambda Expression) - (1)

    JDK1.8λΆ€ν„° λžŒλ‹€μ‹(Lambda Expression)을 μ‚¬μš©ν•  수 있게 λ˜μ—ˆλ‹€. 이것은 μžλ°”μ˜ 맀우 큰 λ³€ν™” 쀑에 ν•˜λ‚˜μ΄λ‹€. 이번 글을 톡해 'λžŒλ‹€μ‹μ˜ κ°œλ…', 'λžŒλ‹€μ‹ μž‘μ„±λ²•', 'ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€'λ₯Ό μ•Œμ•„λ³΄μž. 1. λžŒλ‹€μ‹(Lambda Expression) 🍣 λžŒλ‹€μ‹(Lambda Expression)은 λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜μ˜ '식(expression)'으둜 ν‘œν˜„ν•œ 것이닀. 이λ₯Ό 톡해 μžλ°”λŠ” 객체지ν–₯언어인 λ™μ‹œμ— ν•¨μˆ˜ν˜• μ–Έμ–΄κ°€ λ˜μ—ˆλ‹€. μ•„λž˜λŠ” λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ°κ³Ό μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•œ κ°„λž΅ν•œ λ‚΄μš©μ΄λ‹€. 이λ₯Ό μ•Œκ³  λžŒλ‹€μ‹μ„ λ°°μš΄λ‹€λ©΄ λžŒλ‹€μ‹μ˜ λ‚΄μš©μ΄ 더 μ‰½κ²Œ λ‹€κ°€μ˜¬ 것이닀. λͺ…λ Ήν˜• ν”„λ‘œκ·Έλž˜λ° (⊃ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°) : ν΄λž˜μŠ€μ—μ„œ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜κ³ , ν•„μš”ν•  λ•Œ κ·Έ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” λͺ…령을 ν•˜μ—¬ λ™μž‘ν•˜λŠ” 것..

    Comparableκ³Ό Comparator

    public class Main { public static void main(String[] args) { char[] chArr = {'E', 'D', 'C', 'B', 'A'}; System.out.println("μ •λ ¬ μ „ : " + Arrays.toString(chArr)); Arrays.sort(chArr); System.out.println("μ •λ ¬ ν›„ : " + Arrays.toString(chArr)); } } // μ •λ ¬ μ „ : [E, D, C, B, A] // μ •λ ¬ ν›„ : [A, B, C, D, E] Arrays.sortλ₯Ό μ΄μš©ν•˜λ©΄ μœ„μ™€ 같이 정렬을 ν•  수 μžˆλ‹€. 정렬이 κ°€λŠ₯ν•œ μ΄μœ λŠ” Comparable을 κ΅¬ν˜„ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€. 이번 κΈ€μ—μ„œλŠ” 'Comparableκ³Ό Comparator의 κ°œλ…'..

    μ˜ˆμ™Έμ²˜λ¦¬(Exception Handling) - (2)

    1. try-with-resourcesλ¬Έ β›³ try (SomeResource resource = getResource()) { use(resource); } catch(Exception e) { ... } JDK1.7λΆ€ν„° try-with-resources문이 μΆ”κ°€λ˜μ—ˆλ‹€. try-with-resources문의 κ΄„ν˜Έ() μ•ˆμ— 객체λ₯Ό μƒμ„±ν•˜λŠ” λ¬Έμž₯을 λ„£μœΌλ©΄, 이 κ°μ²΄λŠ” λ”°λ‘œ close()λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šμ•„λ„ tryλΈ”λŸ­μ„ λ²—μ–΄λ‚˜λŠ” μˆœκ°„ μžλ™μ μœΌλ‘œ close()κ°€ ν˜ΈμΆœλœλ‹€. 그리고 catchλΈ”λŸ­ λ˜λŠ” finallyλΈ”λŸ­μ΄ λ”°λΌμ˜€κ²Œ λœλ‹€. μ΄λ•Œ try-with-resourcesλ₯Ό 톡해 μžλ™μœΌλ‘œ 객체의 close()κ°€ 호좜될 수 있으렀면 ν΄λž˜μŠ€κ°€ AutoCloseableμ΄λΌλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 것이어야 ν•œλ‹€. λ˜ν•œ, ..