Skip to content

Latest commit

Β 

History

History
183 lines (124 loc) Β· 11.8 KB

File metadata and controls

183 lines (124 loc) Β· 11.8 KB

Java κΈ°λ³Έ κ°œλ…μ— λŒ€ν•œ 질문

  1. 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)의 4κ°€μ§€ μ£Όμš” κ°œλ…(μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„±, 좔상화)에 λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”. 각 κ°œλ…μ˜ Javaμ—μ„œμ˜ κ΅¬ν˜„ 방법도 κ°„λ‹¨νžˆ μ–ΈκΈ‰ν•΄μ£Όμ„Έμš”.

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ 객체듀이 λͺ¨μ—¬ μ†Œν†΅ν•˜κ³  ν˜‘λ ₯ν•˜μ—¬ ν•˜λ‚˜μ˜ μ†Œν”„νŠΈμ›¨μ–΄ ν”„λ‘œκ·Έλž¨μ„ μ΄λ£¨λŠ” νŒ¨λŸ¬λ‹€μž„ μž…λ‹ˆλ‹€

4κ°€μ§€ μ£Όμš” κ°œλ…μ΄ OOP에 μžˆλŠ”λ° μΊ‘μŠν™”,상속,λ‹€ν˜•μ„±,좔상화가 μžˆμŠ΅λ‹ˆλ‹€.

κ°„λ‹¨ν•˜κ²Œ μΊ‘μŠν™”λŠ” 속성과 ν–‰μœ„λ₯Ό 클래슀둜 λ¬ΆλŠ” 것인데 데이터 λ³΄ν˜Έμ™€ 은닉을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. private 멀버 λ³€μˆ˜λ‚˜ public 의 getter/setter method μ‚¬μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€.

상속은 κΈ°μ‘΄ 클래슀의 속성과 λ©”μ„œλ“œλ₯Ό μƒˆλ‘œμš΄ ν΄λž˜μŠ€κ°€ μž¬μ‚¬μš©ν•˜λŠ” 것이고 λͺ©μ μ€ μ½”λ“œμ˜ μž¬μ‚¬μš©κ³Ό 계측 ꡬ쑰 ν‘œν˜„μ— μžˆμŠ΅λ‹ˆλ‹€. 주둜 extends ν‚€μ›Œλ“œ μ‚¬μš©ν•΄μ„œ κ°„λ‹¨νžˆ 상속을 μ‚¬μš©ν•  수 방법이 μžˆμŠ΅λ‹ˆλ‹€.

⭐️ λ‹€ν˜•μ„±μ€ ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€λ‚˜ λ©”μ„œλ“œκ°€ μ—¬λŸ¬ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ λ™μž‘ν•  ν•˜λŠ” 것이며 λͺ©μ μ€ μœ μ—°μ„±κ³Ό ν™•μž₯성에 있고 μžλ°”μ—μ„  주둜 μ˜€λ²„λΌμ΄λ”©, μ˜€λ²„λ‘œλ”©μœΌλ‘œ λ‹€ν˜•μ„±μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

μΆ”μƒν™”λŠ” λ³΅μž‘ν•œ μ‹œμŠ€ν…œμ—μ„œ 핡심적인 κ°œλ…μ΄λ‚˜ κΈ°λŠ₯을 κ°„μΆ”λ¦¬λŠ” 것이며 λͺ©μ  μžμ²΄λŠ” λ³΅μž‘μ„± κ°μ†Œμ™€ μ„€κ³„μ˜ μœ μ—°μ„±μ„ λ†’μ΄λŠ” κ²ƒμž…λ‹ˆλ‹€ abstract classλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ interfaceλ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

  1. Java의 λ©”λͺ¨λ¦¬ 관리 방식에 λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”. 특히 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Garbage Collection)의 μž‘λ™ 원리와 JVM의 λ©”λͺ¨λ¦¬ ꡬ쑰(νž™, μŠ€νƒ λ“±)에 λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”.

JVM의 λ©”λͺ¨λ¦¬ κ΅¬μ‘°λŠ” νž™, λ©”μ„œλ“œ, μŠ€νƒ, ν”Όμ‹œ λ ˆμ§€μŠ€ν„°, λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ μŠ€νƒκ°€ μžˆμŠ΅λ‹ˆλ‹€.

νž™ μ˜μ—­μ€ 객체와 배열이 μ €μž₯λ˜λŠ” 곳으둜 λ™μ μœΌλ‘œ μƒμ„±λ˜κ³  μ†Œλ©Έλ˜λŠ” 데이터λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€. κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ μ£Όμš” λŒ€μƒμž…λ‹ˆλ‹€.

λ©”μ„œλ“œ μ˜μ—­μ€ 클래슀 ꡬ쑰와 λ©”μ„œλ“œ 데이터, 클래슀 λ³€μˆ˜, μƒμˆ˜ λ“± 정적인 데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

μŠ€νƒ μ˜μ—­μ€ λ©”μ„œλ“œ 호좜 μ‹œ μƒμ„±λ˜λŠ” μŠ€νƒ ν”„λ ˆμž„, μ§€μ—­ λ³€μˆ˜, 맀개 λ³€μˆ˜ 등을 μ €μž₯ν•©λ‹ˆλ‹€.

ν”Όμ‹œ λ ˆμ§€μŠ€ν„°λŠ” ν˜„μž¬ 싀행쀑인 λͺ…λ Ήμ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜κ³ , 각 μŠ€λ ˆλ“œλ§ˆλ‹€ λ³„λ„λ‘œ μƒμ„±λ˜κ³  μŠ€λ ˆλ“œκ°€ μ’…λ£Œλ˜λ©΄ μ‚­μ œλ©λ‹ˆλ‹€.

λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œλŠ” λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œ 정보λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

⭐️ -> μ™œ νž™λ§Œ μ €μž₯ ? κ·Έ μ΄μœ λŠ” μ—¬λŸ¬κ°€μ§€μΈλ° κ°€λΉ„μ§€ 컬렉터가 νž™ μ˜μ—­μ—μ„œλ§Œ ν™œλ™μ„ ν•˜λŠ”λ° νž™ μ˜μ—­μ€ 동적 λ©”λͺ¨λ¦¬ 할당이 κ°€λŠ₯ν•œλ° 객체의 크기λ₯Ό μ €μž₯ν•˜λŠ”λ°μ— μžˆμ–΄ 자유둭고 이둜 μΈν•œ 수λͺ…μ£ΌκΈ° 관리에 μ ν•©ν•˜κ³  λ©€ν‹°μŠ€λ ˆλ”©μ„ 지원해 μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ ‘κ·Όν•  수 있고 μžλ™ 정리가 λ˜μ–΄ νž™μ— μ €μž₯ν•˜λŠ”κ²Œ μœ λ¦¬ν•©λ‹ˆλ‹€.

κ°€λΉ„μ§€μ»¬λ ‰μ…˜μ˜ λ™μž‘μ›λ¦¬λŠ” 객체 생성 > 객체 μ‚¬μš© > μ°Έμ‘° ν•΄μ œ > κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ λ™μž‘ > λ§ˆν‚Ή > μŠ€μœ„ν•‘ > μ••μΆ• >λ©”λͺ¨λ¦¬ λ°˜ν™˜ 이루어지며, λ§ˆν‚Ήμ„ ν†΅ν•΄μ„œ λͺ¨λ“  μ ‘κ·Ό κ°€λŠ₯ν•œ 객체λ₯Ό μ‹λ³„ν•˜κ³  λ§ˆν‚Ή ν•œ 뒀에 μŠ€μœ„ν•‘ κ³Όμ •μ—μ„œ λ§ˆν‚Ήμ—μ„œ μ œμ™Έλœ 객체 λ©”λͺ¨λ¦¬λ“€μ„ μ œκ±°ν•˜κ³  μ••μΆ• κ³Όμ •μ—μ„œ 남은 객체듀을 μ—°μ†λœ λ©”λͺ¨λ¦¬ κ³΅κ°„μœΌλ‘œ μ΄λ™μ‹œμΌœ λ‹¨νŽΈν™”λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.

-> 1. μž‘λ™ 쀑 λ°œμƒκ°€λŠ₯ν•œ λ¬Έμ œλŠ” ?

  1. 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 차이점은 λ¬΄μ—‡μΈκ°€μš”? 각각 μ–΄λ–€ μƒν™©μ—μ„œ μ‚¬μš©ν•˜λŠ” 것이 μ ν•©ν•œμ§€ 예λ₯Ό λ“€μ–΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”.

좔상 ν΄λž˜μŠ€λŠ” 기본적으둜 상속과 ν™•μž₯ν•˜μ—¬ μ‚¬μš©ν•˜κΈ° μœ„ν•œ 것이며 μΈν„°νŽ˜μ΄μŠ€λŠ” λ™μΌν•œ μ‚¬μš©λ°©λ²•κ³Ό λ™μž‘μ„ 보μž₯ν•˜κΈ° μœ„ν•œ κ²ƒμœΌλ‘œ 차이λ₯Ό λ‚˜νƒ€λ‚΄κ³ μžˆμŠ΅λ‹ˆλ‹€.

좔상 ν΄λž˜μŠ€λŠ” 곡톡적인 속성과 κΈ°λŠ₯을 κ°€μ§„ κ΄€λ ¨ ν΄λž˜μŠ€λ“€μ˜ κΈ°λ³Έ 틀을 μ œκ³΅ν•˜λŠ” 데 μ ν•©ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œ μž¬μ‚¬μš©μ„±μ„ 높이고 κ΄€λ ¨ ν΄λž˜μŠ€λ“€ κ°„μ˜ 일관성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μΈν„°νŽ˜μ΄μŠ€λŠ” 클래슀의 νŠΉμ • 행동을 μ •μ˜ν•˜λŠ” 데 쀑점을 λ‘‘λ‹ˆλ‹€. μ„œλ‘œ λ‹€λ₯Έ ν΄λž˜μŠ€λ“€μ΄ λ™μΌν•œ λ°©μ‹μœΌλ‘œ λ™μž‘ν•΄μ•Ό ν•  λ•Œ μ‚¬μš©ν•˜λ©°, 닀쀑 κ΅¬ν˜„μ„ 톡해 μœ μ—°ν•œ 섀계가 κ°€λŠ₯ν•©λ‹ˆλ‹€. 두 κ°€μ§€ λͺ¨λ‘ μ½”λ“œ μž¬μ‚¬μš©κ³Ό λ‹€ν˜•μ„±μ„ μ¦μ§„μ‹œν‚€μ§€λ§Œ, 좔상 ν΄λž˜μŠ€λŠ” '무엇인가'λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 반면, μΈν„°νŽ˜μ΄μŠ€λŠ” '무엇을 ν•  수 μžˆλŠ”κ°€'λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€

  1. Java의 μ˜ˆμ™Έ 처리 λ©”μ»€λ‹ˆμ¦˜μ— λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”. Checked Exceptionκ³Ό Unchecked Exception의 차이, 그리고 try-catch-finally λΈ”λ‘μ˜ μ‚¬μš©λ²•μ— λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”.

μžλ°”μ˜ μ˜ˆμ™Έ 처리 λ©”μ»€λ‹ˆμ¦˜μ€ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ°œμƒν•  수 μžˆλŠ” μ˜ˆμ™Έ 상황을 κ΄€λ¦¬ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 주둜 try-catch 블둝을 μ‚¬μš©ν•΄ κ΅¬ν˜„ν•©λ‹ˆλ‹€.

checked 와 unchecked μ°¨μ΄λŠ” checkedλŠ” 컴파일 μ‹œμ μ— 처리λ₯Ό κ°•μ œν•˜κ³  uncheckedλŠ” λŸ°νƒ€μž„μ— λ°œμƒν•©λ‹ˆλ‹€.


try 블둝 μ˜ˆμ™Έκ°€ λ°œμƒ κ°€λŠ₯성이 μžˆλŠ” μ½”λ“œλ₯Ό ν¬ν•¨μ‹œν‚΅λ‹ˆλ‹€

catch 블둝 tryλΈ”λ‘μ—μ„œ λ°œμƒν•œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€ catch 블둝은 μ—¬λŸ¬κ°œ μž‘μ„±μ΄ κ°€λŠ₯ν•˜λ©° λ‹€μ–‘ν•œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμ™Έ νƒ€μž…μ€ λ²”μœ„κ°€ 쒁은 것뢀터 넓은 순으둜 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

finally 블둝 μ˜ˆμ™Έ λ°œμƒ 여뢀와 관계없이 항상 μ‹€ν–‰λ˜λŠ” μ½”λ“œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. 무쑰건 μ‚¬μš©μ΄ μ•„λ‹Œ μ„ νƒμ μœΌλ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

1. try-with-resourcesλž€ λ¬΄μ—‡μΈκ°€μš”? 
-> Java 7μ—μ„œ λ„μž…λœ κΈ°λŠ₯으둜, AutoCloseable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μžλ™μœΌλ‘œ λ‹«μ•„μ£ΌλŠ” κ΅¬λ¬Έμž…λ‹ˆλ‹€.
2. μ˜ˆμ™Έλ₯Ό λ¬΄μ‹œν•˜λŠ” 것(swallowing exceptions)의 λ¬Έμ œμ μ€ λ¬΄μ—‡μΈκ°€μš”?
-> 디버깅을 μ–΄λ ΅κ²Œ λ§Œλ“€κ³ , 잠재적인 버그λ₯Ό 숨길 수 μžˆμ–΄ ν”„λ‘œκ·Έλž¨μ˜ μ•ˆμ •μ„±μ„ ν•΄μΉ  수 μžˆμŠ΅λ‹ˆλ‹€.
  1. μžλ°”μ˜ μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ— λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”. List, Set, Map μΈν„°νŽ˜μ΄μŠ€μ˜ μ£Όμš” νŠΉμ§•κ³Ό κ·Έ κ΅¬ν˜„ ν΄λž˜μŠ€λ“€μ˜ 차이점을 μ„€λͺ…ν•΄μ£Όμ„Έμš”.

μžλ°” μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬λŠ” 데이터λ₯Ό μ €μž₯ν•˜κ³  μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μΌκ΄€λœ ꡬ쑰의 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ μ§‘ν•©μž…λ‹ˆλ‹€. μΈν„°νŽ˜μ΄μŠ€μ™€ λ‹€ν˜•μ„±μ„ μ΄μš©ν•œ 객체 μ§€ν–₯적 섀계λ₯Ό 톡해 ν‘œμ€€ν™”λ˜μ–΄μžˆμ–΄μ„œ μ‚¬μš©λ²•μ„ μ΅νžˆκΈ°μ— νŽΈν•˜κ³  μž¬μ‚¬μš©μ„±μ΄ λ†’μŠ΅λ‹ˆλ‹€.

μž₯점은 ?

List ListλŠ” μˆœμ„œκ°€ 있고 쀑볡을 ν—ˆμš©ν•˜λŠ” 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€. μ£Όμš” ν΄λž˜μŠ€λ‘œλŠ” ArrayList와 LinkedListκ°€ 있으며 Arrayλ¦¬μŠ€νŠΈλŠ” λ‚΄λΆ€μ μœΌλ‘œ 동적 배열을 μ‚¬μš©ν•΄ λΉ λ₯Έ 랜덀 접근이 κ°€λŠ₯ν•˜μ§€λ§Œ 쀑간 μ‚½μž…/μ‚­μ œκ°€ λŠλ¦½λ‹ˆλ‹€.

Linkedλ¦¬μŠ€νŠΈλŠ” 이쀑 μ—°κ²° 리슀트둜 κ΅¬ν˜„λ˜μ–΄ 쀑간 μ‚½μž…/μ‚­μ œκ°€ λΉ λ₯΄μ§€λ§Œ 랜덀 접근이 λŠλ¦½λ‹ˆλ‹€.

μˆœμ„œκ°€ μ€‘μš”ν•˜κ±°λ‚˜ 쀑볡 μš”μ†Œλ₯Ό ν—ˆμš©ν•  λ•Œ μ‚¬μš©(예. 졜근 검색기둝, λŒ€κΈ°μ—΄)

Set set은 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€. HashSet κ³Ό TreeSet, LinkedHashSet이 있으며 해쉬셋은 ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•΄ κ°€μž₯ λΉ λ₯Έ 검색과 μ‚½μž…μ„ μ œκ³΅ν•˜μ§€λ§Œ, μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€μ•ŠμŠ΅λ‹ˆλ‹€.

νŠΈλ¦¬μ…‹μ€ 이진 검색 트리λ₯Ό μ‚¬μš©ν•΄ μš”μ†Œλ₯Ό μ •λ ¬λœ μƒνƒœλ‘œ μœ μ§€ν•©λ‹ˆλ‹€.

λ§ν¬λ“œν•΄μ‰¬μ…‹μ€ 해쉬셋에 λ§ν¬λ“œλ¦¬μŠ€νŠΈ κ²°ν•©ν•˜μ—¬ μ‚½μž… μˆœμ„œλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€ μš”μ†Œμ˜ κ³ μœ μ„±, 검색 속도, μ •λ ¬ ν•„μš”μ„± 등을 κ³ λ €ν•˜μ—¬ μ μ ˆν•œ Set을 μ„ νƒν•΄μ•Όν•©λ‹ˆλ‹€.

쀑볡을 ν—ˆμš©μΉ˜ μ•Šκ³  κ³ μœ ν•œ 데이터 집합이 ν•„μš”ν•  λ•Œ(예. 고유 μ‹λ³„μž, λ°©λ¬Έν•œ μ›Ή νŽ˜μ΄μ§€ URL)

Map 맡은 ν‚€-κ°’ 쌍으둜 데이터λ₯Ό μ €μž₯ν•˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€. HashMap, TreeMap, LinkedHashMap 이 있으며

해쉬맡은 ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ—¬ λΉ λ₯Έ 검색과 μ‚½μž…μ„ μ œκ³΅ν•˜μ§€λ§Œ μˆœμ„œλŠ” 보μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

νŠΈλ¦¬λ§΅μ€ λ ˆλ“œ-λΈ”λž™ 트리λ₯Ό μ‚¬μš©ν•΄ ν‚€λ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ ¬λœ μƒνƒœλ₯Ό μœ μ§€ ν•©λ‹ˆλ‹€.

λ§ν¬λ“œν•΄μ‰¬λ“œλ§΅μ€ 해쉬맡에 λ§ν¬λ“œλ¦¬μŠ€νŠΈλ₯Ό κ²°ν•©ν•΄ μ‚½μž… μˆœμ„œλ‚˜ μ ‘κ·Ό μˆœμ„œλ₯Ό μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν‚€ - κ°’ 쌍 데이터λ₯Ό μ €μž₯ν•˜κ³  검색해야 ν•  λ•Œ (예. μΊμ‹œ, μ„€μ • 정보, 사전)

  1. λ©€ν‹°μŠ€λ ˆλ”©μ΄λž€ 무엇이며, Javaμ—μ„œ μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‚˜μš”? μŠ€λ ˆλ“œμ˜ 생λͺ…주기와 동기화 방법에 λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”. ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ‹€μˆ˜μ˜ μ‹€ν–‰ λ‹¨μœ„λ‘œ κ΅¬λΆ„ν•˜μ—¬ μžμ›μ„ κ³΅μœ ν•˜κ³  μžμ›μ˜ 생산과 κ΄€λ¦¬μ˜ μ€‘μš”μ„±μ„ μ΅œμ†Œν™”ν•˜μ—¬ μˆ˜ν–‰ λŠ₯λ ₯을 ν–₯μƒν•˜λŠ”κ²ƒ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œλ₯Ό 톡해 ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ—μ„œ λ™μ‹œμ— μ—¬λŸ¬ 개의 일을 μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” 것

Thread 클래슀 상속과 Runnable μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 그리고 Executor ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ” 3 κ°€μ§€μ˜ 방법이 μžˆμŠ΅λ‹ˆλ‹€. λœ¨λ ˆλ“œμ™€ λŸ¬λ„ˆλΈ”μ„ μ΄μš©ν•œ 두 κ°€μ§€ 방식은 기본적인 μŠ€λ ˆλ“œ 생성 λ°©λ²•μ΄μ§€λ§Œ ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œλŠ” μ—¬λŸ¬ ν•œκ³„μ μ΄ μžˆμŠ΅λ‹ˆλ‹€

ν•œκ³„μ μ΄? 1. μŠ€λ ˆλ“œ 생성과 μ†Œλ©Έμ˜ μ˜€λ²„ν—€λ“œ 2. μŠ€λ ˆλ“œ 수의 μ œν•œμ  μ œμ–΄ 3. μž‘μ—… νμž‰, μŠ€λ ˆλ“œ μž¬μ‚¬μš© λ“±μ˜ κΈ°λŠ₯ λΆ€μž¬

μŠ€λ ˆλ“œμ˜ 생λͺ…μ£ΌκΈ°λŠ” new -> runnalbe -> running -> blocked -> Dead 의 μˆœμ„œλ‘œ μŠ€λ ˆλ“œκ°€ μƒμ„±λ˜κ³  start() λ©”μ„œλ“œ ν˜ΈμΆœν•˜λ©΄ Runnalbe μƒνƒœλ‘œ μ΄λ™ν•˜λŠ”λ° Runnalbe μƒνƒœμ—μ„œ μ“°λ ˆλ“œ μŠ€μΌ€μ₯΄λŸ¬μ— μ˜ν•΄ λŸ¬λ‹μƒνƒœλ‘œ μ΄λ™ν•˜κ²Œ λœλ‹€μŒ μŠ€λ ˆλ“œκ°€ νŠΉμ • 이유둜 λŸ¬λ‹ μƒνƒœμ—μ„œ λΈ”λ‘μƒνƒœλ‘œ μ΄λ™ν•˜κ²Œ λœλ‹€. 블둝 λ‹¨κ³„λŠ” 동기화 λ©”μ„œλ“œ ν˜Ήμ€ 동기화 블둝을 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ λ¨Όμ € 싀행쀑인 μ“°λ ˆλ“œλ₯Ό μ‹€ν–‰ μ™„λ£Œλ₯Ό κΈ°λ‹€λ¦¬λŠ” μƒνƒœμ΄λ‹€ μ“°λ ˆλ“œκ°€ μ’…λ£Œλ˜λ©΄ κ·Έ μ“°λ ˆλ“œλŠ” λ‹€μ‹œ μ‹œμž‘ν•  μˆ˜μ—†κ²Œ λ°λ“œ λ‹¨κ³„μ—μ„œ μ²˜λ¦¬λœλ‹€.

동기화 방법은 Synchronized ν‚€μ›Œλ“œ, Volatile ν‚€μ›Œλ“œ, concurrent νŒ¨ν‚€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ‹±ν¬λ‘œλ‚˜μ΄μ¦ˆλ“œ ν‚€μ›Œλ“œλŠ” λ©”μ†Œλ“œλ‚˜ 블둝에 μ‚¬μš©ν•˜μ—¬ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ§Œ μ ‘κ·Όν•  수 μžˆκ²Œν•©λ‹ˆλ‹€. κ°€μž₯ 기본적인 λ°©λ²•μž…λ‹ˆλ‹€.

Volatile ν‚€μ›Œλ“œλŠ” λ©€ν‹° μŠ€λ ˆλ“œ μƒν™©μ—μ„œ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œκ°€ write&readν•˜κ³  λ‚˜λ¨Έμ§€ μŠ€λ ˆλ“œκ°€ μ½λŠ” 상황에 κ²½μš°μ— μ ν•©ν•©λ‹ˆλ‹€.

Concurrent νŒ¨ν‚€μ§€ μžλ°” 5μ—μ„œ μΆ”κ°€λœ νŒ¨ν‚€μ§€λ‘œ, 동기화가 ν•„μš”ν•œ 상황에 μ‚¬μš©ν•  수 μžˆλŠ” μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

Concurrent νŒ¨ν‚€μ§€ μ„€λͺ…ν•΄μ£Όμ„Έμš” 

λ™μ‹œμ„± μ»¬λ ‰μ…˜
- ConcurrentHashMap μ—¬λŸ¬ μ“°λ ˆλ“œκ°€ λ™μ‹œμ— 읽고 μ“Έ 수 있으며, 전체 맡을 λ½ν•˜μ§€ μ•Šκ³  νŠΉμ • λΆ€λΆ„μ—λ§Œ 락을 κ²λ‹ˆλ‹€.
μ‹€ν–‰μž ν”„λ ˆμž„μ›Œν¬
- ExecutorService μŠ€λ ˆλ“œ 풀을 κ΄€λ¦¬ν•˜κ³  비동기 μž‘μ—… 싀행을 λ‹¨μˆœν™”ν•©λ‹ˆλ‹€.
동기화 μœ ν‹Έλ¦¬ν‹°
λ™μ‹œμ„± 큐
μ›μžμ  λ³€μˆ˜
  1. Java의 μ ‘κ·Ό μ œμ–΄μž(public, protected, default, private)의 차이점과 μ‚¬μš© λͺ©μ μ— λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”. μΊ‘μŠν™”μ™€ μ–΄λ–€ 관련이 μžˆλŠ”μ§€λ„ μ–ΈκΈ‰ν•΄μ£Όμ„Έμš”. λ„€ public λͺ¨λ“  접근을 ν—ˆμš©ν•˜μ—¬ μ™ΈλΆ€ ν΄λž˜μŠ€μ—μ„œλ„ 자유둭게 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. protected 같은 ν΄λž˜μŠ€λ‚˜ 이λ₯Ό 상속받은 ν•˜μœ„ν΄λž˜μŠ€μ—μ„œλ§Œ 접근이 κ°€λŠ₯ ν•©λ‹ˆλ‹€. default μžμ‹ κ³Ό 같은 νŒ¨ν‚€μ§€μ— μ†Œμ†λœ 클래슀만 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€ private 같은 클래슀 λ‚΄μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ©° μ™ΈλΆ€μ—μ„œλŠ” 접근이 λΆˆκ°€ν•©λ‹ˆλ‹€.

퍼블릭은 μ–΄λ””μ„œλ“  μ‚¬μš© κ°€λŠ₯ν•œ 곡개 APIλ₯Ό λ§Œλ“€λ•Œ μ‚¬μš©ν•˜κ³  ν”„λ‘œν…νŠΈλŠ” 상속 κ΄€κ³„μ—μ„œ μƒμœ„ 클래슀의 κΈ°λŠ₯을 ν•˜μœ„ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•˜κ²Œ ν•  λ•Œ μ‚¬μš©ν•˜κ³  λ””ν΄νŠΈλŠ” 같은 νŒ¨ν‚€μ§€λ‚΄μ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” 클래슀 λ˜λŠ” 멀버λ₯Ό μ •μ˜ν•  λ•Œ μ“°κ³ . 프라이빗은 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” 멀버λ₯Ό μ •μ˜ν• λ•Œ μ“°λ©°.

μΊ‘μŠν™”μ™€ 관계에 λŒ€ν•΄μ„  프라이빗을 μ‚¬μš©ν•΄ 클래슀 λ‚΄λΆ€ μƒνƒœλ₯Ό 숨기고, 퍼블릭 λ©”μ„œλ“œλ₯Ό 톡해 μ œμ–΄λœ λ°©μ‹μœΌλ‘œλ§Œ λ‚΄λΆ€ μƒνƒœμ— μ ‘κ·Ό κ°€λŠ₯ν•˜λ„λ‘ ν•¨μœΌλ‘œμ¨ μΊ‘μŠν™”λ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.