λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’Ž/Java14

[Java] GC 방식 JDK 5.0μ΄μƒμ—μ„œ μ§€μ›ν•˜λŠ” GC λ°©μ‹μ—λŠ” 넀가지가 μžˆλ‹€. WASλ‚˜ μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μˆ˜ν–‰μ‹œ μ˜΅μ…˜μ„ μ§€μ •ν•˜μ—¬ 선택할 수 μžˆλ‹€. 4가지 GC(가비지 μ½œλ ‰ν„°) 방식 Serial GC (μ‹œλ¦¬μ–Ό μ½œλ ‰ν„°) Parallel GC (병렬 μ½œλ ‰ν„°) Parallel Compacting GC (Parallel Old GC, 병렬 μ»΄νŒ©νŒ… μ½œλ ‰ν„°) Concurrent Mark-Sweep GC (CMS μ½œλ ‰ν„°) Garbage First GC (G1 GC) JVM GC λ™μž‘ μˆœμ„œ μš”μ•½ν•˜λ©΄ GC λ™μž‘μ€ μ•„λž˜ 3 STEP으둜 λ‚˜λˆ μ§„λ‹€. Heap μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” 객체듀에 λŒ€ν•΄ μ ‘κ·Ό κ°€λŠ₯ν•œμ§€ ν™•μΈν•œλ‹€. GC Rootμ—μ„œ λΆ€ν„° μ‹œμž‘ν•˜μ—¬ 참쑰값을 따라가며 μ ‘κ·Ό κ°€λŠ₯ν•œ 객체듀에 Markν•˜λŠ” 과정을 μ§„ν–‰ν•œλ‹€. Mark λ˜μ§€ μ•Šμ€ 객체 즉, .. 2021. 8. 25.
[Java] 좔상 클래슀 vs μΈν„°νŽ˜μ΄μŠ€ μΈν„°νŽ˜μ΄μŠ€ μΈν„°νŽ˜μ΄μŠ€λŠ” 섀계도 λ˜λŠ” λͺ…세라고 생각할 수 μžˆλ‹€. λͺ¨λ“  λ©”μ†Œλ“œκ°€ 좔상 λ©”μ†Œλ“œμ΄κ³ , 일반 λ³€μˆ˜λ₯Ό κ°€μ§ˆ 수 μ—†λ‹€. μžλ°” 8 λΆ€ν„° default method, static method도 μ •μ˜ κ°€λŠ₯ default ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ λ©”μ†Œλ“œ κ΅¬ν˜„μ΄ κ°€λŠ₯. λ˜ν•œ 이λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€λŠ” defaultλ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”© ν•  수 μžˆλ‹€. μΈν„°νŽ˜μ΄μŠ€κ°€ 변경이 되면, μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€λ“€μ΄ ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” λ¬Έμ œκ°€ μžˆλ‹€. 이런 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•˜μ—¬ μΈν„°νŽ˜μ΄μŠ€μ— λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•΄ 놓을 수 μžˆλ„λ‘ ν•˜μ˜€λ‹€. static ν‚€μ›Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ λ©”μ†Œλ“œ κ΅¬ν˜„μ΄ κ°€λŠ₯ μΈν„°νŽ˜μ΄μŠ€μ— static λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•¨μœΌλ‘œμ¨, μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ κ°„λ‹¨ν•œ κΈ°λŠ₯을 κ°€μ§€λŠ” μœ ν‹Έλ¦¬ν‹°μ„± μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€ 수 있게 λ˜μ—ˆλ‹€. 반.. 2021. 8. 18.
[Java] Java SE, Java EE, Java ME μžλ°” 배포판 Java SE, Java EE, Java ME 차이 Java SE(Standard Edition) μžλ°” μŠ€νƒ λ‹€λ“œ μ—λ””μ…˜μ€ κ°€μž₯ 보편적으둜 μ“°μ΄λŠ” μžλ°” API 집합체(νŒ¨ν‚€μ§€)이닀. Java SEλŠ” Java Software Development Kit(SDK)으둜 κ΅¬ν˜„λœλ‹€. λŒ€μ²΄λ‘œ μ²˜μŒμ— μžλ°”κ°œλ°œμ— μž…λ¬Έν•  λ•Œ μ ‘ν•œλ‹€. JAVA SE API Applet AWT RMI JDBC Swing Collections Xml binding JavaFX (Merged to Java SE 8) Java 8 Collections Streaming API Java 9 Reactive Streams API Java 9 HTTP/2 API Java EE(Enterprise Edition) Java SE μŠ€νŽ™κΈ°λ°˜μœΌλ‘œ 자.. 2021. 8. 18.
[Java] λ³€μˆ˜μ˜ scope와 static scope ν”„λ‘œκ·Έλž¨μƒμ—μ„œ μ‚¬μš©λ˜λŠ” λ³€μˆ˜λ“€μ€ μ‚¬μš© κ°€λŠ₯ν•œ λ²”μœ„λ₯Ό 가진닀. κ·Έ λ²”μœ„λ₯Ό λ³€μˆ˜μ˜ μŠ€μ½”ν”„λΌκ³  ν•œλ‹€. λ³€μˆ˜κ°€ μ„ μ–Έλœ λΈ”λŸ­μ΄ κ·Έ λ³€μˆ˜μ˜ μ‚¬μš©λ²”μœ„μ΄λ‹€. public class ValableScopeExam{ int globalScope = 10; // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ public void scopeTest(int value){ int localScope = 10; System.out.println(globalScope); System.out.println(localScope); System.out.println(value); } } 클래슀의 μ†μ„±μœΌλ‘œ μ„ μ–Έλœ λ³€μˆ˜ globalScope 의 μ‚¬μš© λ²”μœ„λŠ” 클래슀 전체 이닀. λ§€κ°œλ³€μˆ˜λ‘œ μ„ μ–Έλœ int value λŠ” λΈ”λŸ­ λ°”κΉ₯에 μ‘΄μž¬ν•˜κΈ°λŠ” ν•˜μ§€λ§Œ, λ©”μ„œλ“œ 선언뢀에.. 2021. 8. 11.
[Java] 가비지 μ»¬λ ‰μ…˜(Garbage Collection) C/C++ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  λ•Œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λ₯Ό 막기 μœ„ν•΄ 객체λ₯Ό μƒμ„±ν•œ ν›„ μ‚¬μš©μžν•˜μ§€ μ•ŠλŠ” 객체의 λ©”λͺ¨λ¦¬λ₯Ό ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 직접 ν•΄μ œ ν•΄μ£Όμ–΄μ•Ό ν–ˆμ§€λ§Œ, JAVAμ—μ„œλŠ” JVM(Java Virtual Machine)이 κ΅¬μ„±λœ JRE(Java Runtime Environment)κ°€ 제곡되며, κ·Έ ꡬ성 μš”μ†Œ 쀑 ν•˜λ‚˜μΈ Garbage Collection(μ΄ν•˜ GC)이 μžλ™μœΌλ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 객체λ₯Ό νŒŒκ΄΄ν•œλ‹€. GC에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κΈ° 전에 'stop-the-world'λΌλŠ” μš©μ–΄λ₯Ό μ•Œμ•„μ•Όν•œλ‹€. 'stop-the-world'λž€, GCλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ JVM이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행을 λ©ˆμΆ”λŠ” κ²ƒμž…λ‹ˆλ‹€. μ–΄λ–€ GC μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λ”λΌλ„ 'stop-the-world'λŠ” λ°œμƒν•˜κ²Œ λ˜λŠ”λ°, λŒ€κ°œμ˜ 경우 GC νŠœλ‹μ€.. 2021. 8. 11.
[Java] λžŒλ‹€μ‹ λžŒλ‹€μ‹(Lambda Expression) ν•¨μˆ˜μ  ν”„λ‘œκ·Έλž˜λ° κΈ°λ²•μœΌλ‘œ 'y = f(x)' ν˜•νƒœμ˜ ν•¨μˆ˜λ‘œ κ΅¬μ„±λœ ν”„λ‘œκ·Έλž˜λ° 기법이닀. 즉, λžŒλ‹€μ‹μ€ ν•¨μˆ˜λ₯Ό ν•˜λ‚˜μ˜ 식(expression)으둜 ν‘œν˜„ν•œ 것이닀. ν•¨μˆ˜λ₯Ό λžŒλ‹€μ‹μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ λ©”μ†Œλ“œμ˜ 이름이 ν•„μš” μ—†κΈ° λ•Œλ¬Έμ—, λžŒλ‹€μ‹μ€ 읡λͺ… ν•¨μˆ˜(Anonymous Function)의 ν•œ μ’…λ₯˜λΌκ³  λ³Ό 수 μžˆλ‹€. μžλ°” 8λΆ€ν„° μ§€μ›ν•˜λ©° μžλ°”λŠ” λžŒλ‹€μ‹μ„ ν•¨μˆ˜μ  μΈν„°νŽ˜μ΄μŠ€μ˜ 읡λͺ… κ΅¬ν˜„ 객체둜 μ·¨κΈ‰ν•œλ‹€. 'λžŒλ‹€μ‹ β†’ λ§€κ°œλ³€μˆ˜λ₯Ό 가진 μ½”λ“œ 블둝 β†’ 읡λͺ… κ΅¬ν˜„ 객체' 읡λͺ… ν•¨μˆ˜(Anonymous Function) : ν•¨μˆ˜μ˜ 이름이 μ—†λŠ” ν•¨μˆ˜λ‘œ, 읡λͺ… ν•¨μˆ˜λ“€μ€ λͺ¨λ‘ 일급 객체이닀. 일급 객체인 ν•¨μˆ˜λŠ” λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©κ°€λŠ₯ν•˜λ©° 맀개 λ³€μˆ˜λ‘œ 전달이 κ°€λŠ₯ν•˜λŠ” λ“±μ˜ νŠΉμ§•μ„ 가지고 μžˆλ‹€. λ³€μˆ˜.. 2021. 8. 10.
[Java] 슀트림 Stream κ°œλ… μŠ€νŠΈλ¦Όμ€ 반볡자 μŠ€νŠΈλ¦Όμ€ μ»¬λ ‰μ…˜(λ°°μ—΄ 포함)의 μš”μ†Œλ₯Ό ν•˜λ‚˜μ”© μ°Έμ‘°ν•΄μ„œ λžŒλ‹€μ‹μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλŠ” λ°˜λ³΅μžμ΄λ‹€. λžŒλ‹€μ‹, 슀트림 λ‘˜ λ‹€ μžλ°” 8λΆ€ν„° μ‚¬μš© κ°€λŠ₯ 8μ΄μ „μ—λŠ” Iteratorλ₯Ό μ‚¬μš©ν•¨ νŠΉμ§• 1. λžŒλ‹€μ‹μœΌλ‘œ μš”μ†Œ 처리 μ½”λ“œλ₯Ό μ œκ³΅ν•œλ‹€. 슀트림이 μ œκ³΅ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ μš”μ†Œ 처리 λ©”μ†Œλ“œλŠ” ν•¨μˆ˜μ  μΈν„°νŽ˜μ΄μŠ€ λ§€κ°œνƒ€μž…μ„ 가진닀. λ§€κ°œκ°’μœΌλ‘œ λžŒλ‹€μ‹ λ˜λŠ” λ©”μ†Œλ“œ μ°Έμ‘°λ₯Ό λŒ€μž…ν•  수 μžˆλ‹€. 2. λ‚΄λΆ€ 반볡자λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ 병렬 μ²˜λ¦¬κ°€ 쉽닀. μ™ΈλΆ€ 반볡자(ex. Iterator) - κ°œλ°œμžκ°€ μ½”λ“œλ‘œ 직접 μ»¬λ ‰μ…˜ μš”μ†Œλ₯Ό λ°˜λ³΅ν•΄μ„œ μš”μ²­ν•˜κ³  κ°€μ Έμ˜€λŠ” μ½”λ“œ νŒ¨ν„΄ λ‚΄λΆ€ 반볡자 - 개발자 μ½”λ“œκ°€ λžŒλ‹€μ‹μ΄λ˜κ³ , μ»¬λ ‰μ…˜μ€ λ‚΄λΆ€μ μœΌλ‘œ μš”μ†Œλ“€μ„ λ°˜λ³΅ν•˜λŠ” μŠ€νŠΈλ¦Όμ„ ν™œμš©ν•΄μ„œ λžŒλ‹€μ‹μ„ μš”μ†Œλ§ˆλ‹€ μ μš©μ‹œν‚΄. - μ»¬λ ‰μ…˜ λ‚΄λΆ€μ—μ„œ μš”μ†Œλ“€μ„ 반볡.. 2021. 7. 28.
[Java] μ œλ„€λ¦­(Generic) κ°œλ… 클래슀 λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  데이터 νƒ€μž…μ„ μ™ΈλΆ€μ—μ„œ μ§€μ •ν•˜λŠ” 기법이닀. μ™œ ν•„μš”ν• κΉŒ? 1. μ€‘λ³΅λ˜λŠ” μ†ŒμŠ€λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄ μ†ŒμŠ€μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ κ·ΉλŒ€ν™” ν•˜κΈ° μœ„ν•΄μ„œ 데이터 νƒ€μž…λ³„λ‘œ 클래슀λ₯Ό 생성할 ν•„μš” 없이 ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ—μ„œ 데이터 νƒ€μž…λ§Œ λ°”κΏ” μ‘°λ¦½ν•˜λ“― μ½”λ“œ μž¬ν™œμš©μ΄ κ°€λŠ₯ν•˜λ‹€. 2. 객체 μƒμ„±μ‹œ μ‚¬μš©ν•˜λ €κ³  ν•˜λŠ” λ°μ΄ν„°νƒ€μž…μ— λŒ€ν•œ μ œν•œμ„ 쀄 수 μžˆλ‹€. 효과 β†’ 컴파일 νƒ€μž„μ— νƒ€μž… 체크λ₯Ό ν•˜κΈ° μœ„ν•¨μ΄λ‚˜ νƒ€μž… μΊμŠ€νŒ…(ν˜•λ³€ν™˜)을 μ œκ±°ν•˜μ—¬ ν”„λ‘œκ·Έλž¨ μ„±λŠ₯ ν–₯상 β†’ ν˜•λ³€ν™˜μ΄ ν•„μš”μ—†κ³ , νƒ€μž…μ•ˆμ •μ„±μ΄ 보μž₯λœλ‹€. extends T(μƒν•œ 경계), ? super T(ν•˜ν•œ 경계), ?(μ™€μΌλ“œ μΉ΄λ“œ) 데이터 νƒ€μž…μ„ μ œν•œν•˜κ²Œ 되면 얻을 수 μžˆλŠ” 이점은 상속 κ΄€κ³„μ—μ„œ μžˆλ‹€. 상속 κ΄€κ³„μ—μ„œ μžμ‹μ€ λΆ€λͺ¨μ˜ λͺ¨λ“  것을 κ°€μ Έλ‹€ μ‚¬μš©ν•  수 μžˆλ‹€.. 2021. 7. 28.
[Java] μžλ°” 가상 λ¨Έμ‹ (Java Virtual Machine) JVM(Java Virtual Machine) Java둜 κ°œλ°œν•œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•œ 가상머신. μžλ°” 가상 머신을 λœ»ν•˜λŠ” 말둜 λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 주체이닀. 운영체제 μœ„μ—μ„œ λ™μž‘ν•˜λ―€λ‘œ ν”Œλž«νΌμ— λ…λ¦½μ μœΌλ‘œ Java ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 μžˆλ‹€. ν”„λ‘œκ·Έλž¨ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜κ³  μ΅œμ ν™”ν•˜λŠ” 것 물리적인 μ‹€μ œμ˜ 기계가 μ•„λ‹ˆλΌ 좔상적인 μž₯μΉ˜μ΄λ‹€. μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 클래슀 λ‘œλ”(Class Loader)λ₯Ό 톡해 읽어 λ“€μ—¬μ„œ μžλ°” API와 ν•¨κ»˜ μ‹€ν–‰ν•˜λŠ” 것 μžλ°” μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” μžλ°”μ—μ„œ javac λͺ…령을 톡해 λ°”μ΄νŠΈμ½”λ“œ(.class)λ₯Ό λ§Œλ“€κ³ , λ°”μ΄νŠΈμ½”λ“œλ₯Ό JVM이 인터프리터 λ°©μ‹μœΌλ‘œ κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­ν•˜λ©° μ‹€ν–‰ν•œλ‹€. JVM κ΅¬μ„±μš”μ†Œ 1. Class Loader JVM은 λŸ°νƒ€μž„μ‹œμ— 처음으둜 클래슀λ₯Ό μ°Έμ‘°ν•  λ•Œ ν•΄λ‹Ή.. 2021. 7. 28.