λͺ©λ‘πŸ’» Java Study (32)

Coding Planet

Jar 파일과 War νŒŒμΌμ΄λž€? 차이점도!

μ›Ή ν”„λ‘œκ·Έλž˜λ°μ„ κ³΅λΆ€ν•˜λ©΄μ„œ 질리게 λ“£κ²Œ λ˜λŠ” 파일 ν˜•μ‹μ΄λ‹€. JAR 파일과 WAR νŒŒμΌμ€ λ‘˜ λ‹€ Java 기반의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ νŒ¨ν‚€μ§•ν•˜κΈ° μœ„ν•œ 파일 포맷이닀. 1. Jar(Java ARchive)파일 μ •μ˜: JAR νŒŒμΌμ€ μ—¬λŸ¬ 개의 Java 클래슀 파일, 메타 데이터, λ¦¬μ†ŒμŠ€ 파일 등을 ν•˜λ‚˜μ˜ 파일둜 묢은 μ•„μΉ΄μ΄λΈŒ 파일 λͺ©μ : Java ν΄λž˜μŠ€μ™€ κ΄€λ ¨ λ¦¬μ†ŒμŠ€λ₯Ό νŒ¨ν‚€μ§•ν•˜μ—¬ μž¬μ‚¬μš© κ°€λŠ₯ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ μ‹€ν–‰ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 생성 μ‚¬μš©μ²˜: Java 라이브러리, μŠ€νƒ λ“œμ–Όλ‘  Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜, μ˜μ‘΄μ„± νŒ¨ν‚€μ§€ λ“± ν™•μž₯자: .jar 2. WAR (Web Application aRchive) 파일 μ •μ˜: WAR νŒŒμΌμ€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ νŒ¨ν‚€μ§•ν•˜κΈ° μœ„ν•œ 파일 포맷이닀. Java 클래슀, JSP, μ„œλΈ”λ¦Ώ, XML, ..

[μ΄νŽ™ν‹°λΈŒ μžλ°”]chapter2 : [μ•„μ΄ν…œ6] λΆˆν•„μš”ν•œ 객체 생성을 ν”Όν•˜λΌ

μ•„μ΄ν…œ6 : λΆˆν•„μš”ν•œ 객체 생성을 ν”Όν•˜λΌ λ˜‘κ°™μ€ κΈ°λŠ₯의 객체λ₯Ό 맀번 μƒμ„±ν•˜κΈ°λ³΄λ‹€λŠ” 객체 ν•˜λ‚˜λ₯Ό μž¬μ‚¬μš©ν•˜λŠ” 편이 λ‚˜μ„ λ•Œκ°€ λ§Žλ‹€. μž¬μ‚¬μš©μ€ λΉ λ₯΄κ³  μ„Έλ ¨λ˜λ‹€. 1. String Instance의 μ˜ˆμ‹œ (1) 'new' ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄ 객체λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 생성할 경우 λ¬Έμžμ—΄μ€ heap μ˜μ—¬κ²‘ μ €μž₯되며 μ•„λž˜ λ¬Έμž₯이 싀행될 λ•Œ λ§ˆλ‹€ String μΈμŠ€ν„΄μŠ€λ₯Ό μƒˆλ‘œ λ§Œλ“ λ‹€. String s = new String("Effective Java"); (2) String Constant Pool String Constant Pool은 Java의 λ©”λͺ¨λ¦¬ μ˜μ—­ 쀑 ν•˜λ‚˜λ‘œ, λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ„ μ €μž₯ν•˜λŠ” νŠΉλ³„ν•œ μ˜μ—­μ΄λ‹€. Javaμ—μ„œ λ¬Έμžμ—΄μ€ λΆˆλ³€(immutable)ν•˜κΈ° λ•Œλ¬Έμ—, 두 개 μ΄μƒμ˜ λ™μΌν•œ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ€ λ©”λͺ¨λ¦¬μ— ..

πŸ’» Java Study 2023. 8. 16. 20:52
지연 μ΄ˆκΈ°ν™” (Lazy Initialization)λž€?

지연 μ΄ˆκΈ°ν™” (Lazy Initialization)λŠ” 객체, 데이터 λ˜λŠ” 계산 λΉ„μš©μ΄ 큰 λ¦¬μ†ŒμŠ€μ˜ μ΄ˆκΈ°ν™”λ₯Ό 그것이 μ‹€μ œλ‘œ ν•„μš”ν•  λ•ŒκΉŒμ§€ μ§€μ—°μ‹œν‚€λŠ” ν”„λ‘œκ·Έλž˜λ° κΈ°λ²•μž…λ‹ˆλ‹€. 즉, κ°μ²΄λ‚˜ 데이터λ₯Ό μƒμ„±ν•˜λŠ” μž‘μ—…μ΄ λ°œμƒν•˜λŠ” μˆœκ°„μ΄ μ•„λ‹ˆλΌ, 그것이 μ‹€μ œλ‘œ μ ‘κ·Όλ˜κ±°λ‚˜ μ‚¬μš©λ  λ•ŒκΉŒμ§€ μ΄ˆκΈ°ν™”λ₯Ό μ—°κΈ°ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 지연 μ΄ˆκΈ°ν™”μ˜ μ£Όμš” λͺ©μ  μ„±λŠ₯ μ΅œμ ν™”: 초기 λ‘œλ”© μ‹œκ°„μ„ λ‹¨μΆ•ν•˜κ±°λ‚˜, λΆˆν•„μš”ν•œ λ¦¬μ†ŒμŠ€ 생성을 λ°©μ§€ν•˜μ—¬ μ‹œμŠ€ν…œμ˜ μ „λ°˜μ μΈ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€. λ¦¬μ†ŒμŠ€ μ ˆμ•½: μ‹€μ œλ‘œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” κ°μ²΄λ‚˜ 데이터λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„ λ©”λͺ¨λ¦¬λ‚˜ 기타 λ¦¬μ†ŒμŠ€λ₯Ό μ ˆμ•½ν•  수 μžˆλ‹€. 지연 μ΄ˆκΈ°ν™”μ—λŠ” μ£Όμ˜μ‚¬ν•­ μŠ€λ ˆλ“œ μ•ˆμ „μ„±: μ—¬λŸ¬ μŠ€λ ˆλ“œμ—μ„œ λ™μ‹œμ— 지연 μ΄ˆκΈ°ν™” λ‘œμ§μ— μ ‘κ·Όν•  경우 동기화 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ μ ˆν•œ..

[μ΄νŽ™ν‹°λΈŒ μžλ°”]chapter2 : [μ•„μ΄ν…œ5] μžμ›μ„ λͺ…μ‹œν•˜μ§€ 말고 의쑴 객체 μ£Όμž…μ„ μ‚¬μš©ν•˜λΌ

μ•„μ΄ν…œ5: μžμ›μ„ λͺ…μ‹œν•˜μ§€ 말고 의쑴 객체 μ£Όμž…μ„ μ‚¬μš©ν•˜λΌ 이전에 μ‚΄νŽ΄λ³Έ 정적 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λ‚˜ μ‹±κΈ€ν„΄ 방식은 μ‚¬μš©ν•˜λŠ” μžμ›μ— 따라 λ™μž‘μ΄ λ‹¬λΌμ§€λŠ” ν΄λž˜μŠ€μ—λŠ” μ ν•©ν•˜μ§€ μ•Šλ‹€. 정적 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λŠ” μƒνƒœλ₯Ό κ°€μ§ˆ 수 μ—†λ‹€. 즉 μžμ›μ— 따라 λ™μž‘μ„ λ³€κ²½ν•˜λŠ” 것이 μ–΄λ ΅λ‹€. 싱글턴은 μ „μ—­ μƒνƒœλ₯Ό κ°€μ§€κ²Œ λ˜λ―€λ‘œ μ—¬λŸ¬ μžμ›μ„ κ΄€λ¦¬ν•˜κ±°λ‚˜ λ™μž‘μ„ λ™μ μœΌλ‘œ λ³€κ²½ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“ λ‹€. λ˜ν•œ 정적 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λ‚˜ 싱글턴은 상속을 ν†΅ν•œ ν™•μž₯이 μ–΄λ ΅κ³  ν…ŒμŠ€νŠΈλ„ μ–΄λ ΅λ‹€λŠ” 단점이 μžˆλ‹€. λ”°λΌμ„œ β‘ ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ μžμ› μΈμŠ€ν„΄μŠ€λ₯Ό μ§€μ›ν•΄μ•Όν•˜κ³ , β‘‘ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›ν•˜λŠ” μžμ›μ„ μ‚¬μš©ν•΄μ•Όν•˜λŠ” 쑰건을 λ§Œμ‘±ν•˜λ €λ©΄ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ μƒμ„±μžμ— ν•„μš”ν•œ μžμ›μ„ λ„˜κ²¨μ£ΌλŠ” 방식인 의쑴 객체 μ£Όμž…μ΄ μ ν•©ν•˜λ‹€. 1. 의쑴 객체 μ£Όμž…(Dependency I..

[μ΄νŽ™ν‹°λΈŒ μžλ°”]chapter2 : [μ•„μ΄ν…œ4] μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰μœΌλ €κ±°λ“  private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λΌ

μ•„μ΄ν…œ4: μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰μœΌλ €κ±°λ“  private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λΌ μΈμŠ€ν„΄μŠ€ν™”(instance instantiation)λŠ” 클래슀의 μ •μ˜λ₯Ό 기반으둜 μ‹€μ œ 객체λ₯Ό λ©”λͺ¨λ¦¬μ— μƒμ„±ν•˜λŠ” 과정이닀. 클래슀의 μΈμŠ€ν„΄μŠ€ν™”λ₯Ό λ§‰κΈ°μœ„ν•΄ private μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 클래슀λ₯Ό μ™ΈλΆ€μ—μ„œ μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•œ ν…Œν¬λ‹‰μ΄λ‹€. ν΄λž˜μŠ€μ— μ •μ˜λœ μƒμ„±μžκ°€ λͺ¨λ‘ 'private'으둜 μ„ μ–Έλ˜λ©΄, κ·Έ ν΄λž˜μŠ€λŠ” μ™ΈλΆ€μ—μ„œ 객체λ₯Ό 생성할 수 μ—†κ²Œ λœλ‹€. μ΄λŸ¬ν•œ μ ‘κ·Ό μ œν•œμžλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 주둜 μœ ν‹Έλ¦¬ν‹° ν΄λž˜μŠ€λ‚˜ μƒμˆ˜λ§Œμ„ ν¬ν•¨ν•˜λŠ” ν΄λž˜μŠ€μ™€ 같이 μΈμŠ€ν„΄μŠ€ν™”λ  ν•„μš”κ°€ μ—†λŠ” ν΄λž˜μŠ€λ“€μ— μ μš©λœλ‹€. 1. 정적 λ©”μ„œλ“œμ™€ 정적 ν•„λ“œλ§Œμ„ 담은 μœ ν‹Έμ„± ν΄λž˜μŠ€λŠ” λ§Œλ“œλŠ” 경우 κΈ°λ³Έ νƒ€μž… κ°’μ΄λ‚˜ λ°°μ—΄ κ΄€λ ¨ λ©”μ„œλ“œλ“€μ„ λͺ¨μ•„놓을 λ•Œ : java.lang..

[μ΄νŽ™ν‹°λΈŒ μžλ°”]chapter2 : [μ•„μ΄ν…œ3] private μƒμ„±μžλ‚˜ μ—΄κ±° νƒ€μž…μœΌλ‘œ μ‹±κΈ€ν„΄μž„μ„ λ³΄μ¦ν•˜λΌ

μ•„μ΄ν…œ3: private μƒμ„±μžλ‚˜ μ—΄κ±° νƒ€μž…μœΌλ‘œ μ‹±κΈ€ν„΄μž„μ„ λ³΄μ¦ν•˜λΌ μ‹±κΈ€ν„΄(sigleton)μ΄λž€ μΈμŠ€ν„΄μŠ€λ₯Ό 였직 ν•˜λ‚˜λ§Œ 생성할 수 μžˆλŠ” 클래슀λ₯Ό λ§ν•œλ‹€. μ‹±κΈ€ν„΄μ˜ μ „ν˜•μ μΈ μ˜ˆλ‘œλŠ” ν•¨μˆ˜μ™€ 같은 λ¬΄μƒνƒœ κ°μ²΄λ‚˜ 섀계상 μœ μΌν•΄μ•Όν•˜λŠ” μ‹œμŠ€ν…œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ“€ 수 μžˆλ‹€. 그런데 클래슀λ₯Ό μ‹±κΈ€ν„΄μœΌλ‘œ λ§Œλ“€λ©΄ 이λ₯Ό μ‚¬μš©ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ°κ°€ μ–΄λ €μ›Œμ§ˆ 수 μžˆλ‹€. νƒ€μž…μ„ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•œ λ‹€μŒ κ·Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•΄μ„œ λ§Œλ“  싱글턴이 μ•„λ‹ˆλΌλ©΄ μ‹±κΈ€ν„΄ μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ§œ(mock)κ΅¬ν˜„μœΌλ‘œ λŒ€μ²΄ν•  수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€. 즉, 클래슀λ₯Ό μ‹±κΈ€ν„΄μœΌλ‘œ λ§Œλ“€ 경우 ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ μ‹œμŠ€ν…œ 전체에 ν•˜λ‚˜μ΄κΈ° λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈμ™€ μ‹€μ œ ν™˜κ²½μ—μ„œμ˜ λ™μž‘μ΄ κ°•ν•˜κ²Œ 결합될 수 μžˆλ‹€. 싱글턴을 λ§Œλ“œλŠ” 방법은 보톡 두가지이닀. 두 방식 λͺ¨λ‘ μƒμ„±μžλŠ” ..

[JAVA] 직렬화 (Serialization), 역직렬화 (Deserialization)

1. μ§λ ¬ν™”λž€ (Serialization)? 직렬화 (Serialization)λŠ” 객체의 μƒνƒœλ₯Ό λ°”μ΄νŠΈ 슀트림으둜 λ³€ν™˜ν•˜λŠ” 과정을 μ˜λ―Έν•œλ‹€. 이 λ°”μ΄νŠΈ μŠ€νŠΈλ¦Όμ€ 파일둜 μ €μž₯ν•˜κ±°λ‚˜ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 λ‹€λ₯Έ μ‹œμŠ€ν…œμ— 전솑할 수 μžˆλ‹€. λ°˜λŒ€λ‘œ, 역직렬화 (Deserialization)λŠ” λ°”μ΄νŠΈ μŠ€νŠΈλ¦Όμ„ λ‹€μ‹œ μ›λž˜μ˜ 객체둜 λ³€ν™˜ν•˜λŠ” 과정을 μ˜λ―Έν•œλ‹€. 2. μ§λ ¬ν™”μ˜ λͺ©μ  μ˜μ†μ„± (Persistence): 객체의 μƒνƒœλ₯Ό 영ꡬ μ €μž₯ 맀체 (예: 파일)에 μ €μž₯ν•˜κ³  λ‚˜μ€‘μ— λ‹€μ‹œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 객체λ₯Ό 볡원할 수 μžˆλ‹€. 원격 ν”„λ‘œμ‹œμ € 호좜 (Remote Procedure Call): 객체λ₯Ό λ„€νŠΈμ›Œν¬λ₯Ό 톡해 λ‹€λ₯Έ JVM λ˜λŠ” μ‹œμŠ€ν…œμœΌλ‘œ μ „μ†‘ν•˜λ €λ©΄ κ·Έ 객체λ₯Ό λ°”μ΄νŠΈ 슀트림으둜 λ³€ν™˜ν•΄μ•Ό ν•œλ‹€. 객체의 κΉŠμ€ 볡사 (Deep Copy)..

[μ΄νŽ™ν‹°λΈŒ μžλ°”]chapter2 : [μ•„μ΄ν…œ2] μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ

μ•„μ΄ν…œ2 : μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ 정적 νŒ©ν† λ¦¬μ™€ μƒμ„±μžμ—λŠ” λ˜‘κ°™μ€ μ œμ•½μ΄ ν•˜λ‚˜ μžˆλ‹€. 선택적 λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ 경우 적절히 λŒ€μ‘ν•˜κΈ°κ°€ μ–΄λ ΅λ‹€λŠ” 것이닀. 기쑴에 λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ 경우 κ³ λ €ν•  수 μžˆλŠ” λ°©μ•ˆμ€ λ‹€μŒκ³Ό κ°™λ‹€. λŒ€μ•ˆ1. 점측적 μƒμ„±μž νŒ¨ν„΄ 점측적 μƒμ„±μž νŒ¨ν„΄(telescoping constructor pattern)μ΄λž€ 객체 생성 μ‹œ ν•„μš”ν•œ 쑰합에 따라 λ‹€μ–‘ν•œ μƒμ„±μžλ₯Ό μ œκ³΅ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. ν•„μˆ˜ λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ”μƒμ„±μžλ₯Ό λ¨Όμ € μƒμ„±ν•˜κ³  λ§€κ°œλ³€μˆ˜ 1개λ₯Ό μΆ”κ°€λ‘œ λ°›λŠ” μƒμ„±μž, 선택 맀개 λ³€μˆ˜ 2개λ₯Ό μΆ”κ°€λ‘œ λ°›λŠ” μƒμ„±μž λ“±μ˜ ν˜•νƒœλ‘œ λ§€κ°œλ³€μˆ˜ 개수만큼 μƒμ„±μžλ₯Ό λŠ˜λ €κ°€λŠ” 방식이닀. 이 νŒ¨ν„΄μ˜ μ£Όμš”ν•œ λ¬Έμ œλŠ” 선택적 λ§€κ°œλ³€μˆ˜μ˜ μˆ˜κ°€ λ§Žμ•„μ§ˆμˆ˜λ‘ μƒμ„±μžμ˜ μˆ˜κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ λŠ˜μ–΄λ‚˜κ²Œ 되며, 클..

[μ΄νŽ™ν‹°λΈŒ μžλ°”]chapter2 : [μ•„μ΄ν…œ1] μƒμ„±μž λŒ€μ‹  정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œλ₯Ό κ³ λ €ν•˜λΌ

μ•„μ΄ν…œ1 : μƒμ„±μž λŒ€μ‹  정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œλ₯Ό κ³ λ €ν•˜λΌ μƒμ„±μž λŒ€μ‹  λ°˜λ“œμ‹œ 정적 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λΌλŠ” μ˜λ―ΈλŠ” μ•„λ‹ˆλ‹€. λ•Œμ— 따라 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œκ°€ λ”μš± μœ μš©ν•œ 경우 μ‚¬μš©μ„ κ³ λ €ν•˜λΌλŠ” λœ»μ΄λ‹€. 1. 정적 λ©”μ„œλ“œμ˜ μž₯점 이름을 κ°€μ§ˆ 수 μžˆλ‹€. 정적 νŒ©ν† λ¦¬μ˜ 이름을 톡해 λ°˜ν™˜λ  객체의 νŠΉμ„±μ„ μ‰½κ²Œ λ¬˜μ‚¬ν•  수 μžˆλ‹€. 이름을 톡해 λͺ…μ‹œμ  선언이 κ°€λŠ₯ν•΄ μ§€λŠ” 것이닀. μƒμ„±μžμ˜ μ‹œκ·Έλ‹ˆμ²˜κ°€ μ€‘λ³΅λ˜λŠ” 경우 μœ μš©ν•˜λ‹€. 호좜 될 λ•Œλ§ˆλ‹€ μΈμŠ€ν„΄μŠ€λ₯Ό μƒˆλ‘œ μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. λΆˆλ³€ 클래슀인 κ²½μš°λ‚˜ 맀번 μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“€ ν•„μš”κ°€ μ—†λŠ” κ²½μš°μ— 미리 λ§Œλ“€μ–΄λ‘” μΈμŠ€ν„΄μŠ€ λ˜λŠ” μΊμ‹œν•΄λ‘” μΈμŠ€ν„΄μŠ€λ₯Ό λ³€κ²½ν•  수 μžˆλ‹€. λ°˜ν™˜ νƒ€μž…μ˜ ν•˜μœ„ νƒ€μž… 객체λ₯Ό λ°˜ν™˜ν•  수 μžˆλ‹€. 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œλŠ” μƒμ„±μžμ™€ 달리, 호좜될 λ•Œ λ°˜ν™˜ νƒ€μž…μ΄ κ³ μ •λ˜μ§€ ..