λͺ©λ‘πŸ’» Java Study/Java 이둠 정리 (26)

Coding Planet

λ©€ν‹°νƒœμŠ€ν‚Ήκ³Ό λ©€ν‹°μ“°λ ˆλ”©μ˜ 차이 - ν”„λ‘œμ„ΈμŠ€μ™€ μ“°λ ˆλ“œ

| ν”„λ‘œμ„ΈμŠ€μ™€ μ“°λ ˆλ“œ ν”„λ‘œμ„ΈμŠ€(process)λž€ κ°„λ‹¨νžˆ λ§ν•΄μ„œ 싀행쀑인 ν”„λ‘œκ·Έλž¨μ΄λ‹€. ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λ©΄ OSλ‘œλΆ€ν„° 싀행에 ν•„μš”ν•œ μžμ›(λ©”λͺ¨λ¦¬)λ₯Ό ν• λ‹Ήλ°›μ•„ ν”„λ‘œμ„ΈμŠ€κ°€ λœλ‹€. ν”„λ‘œμ„ΈμŠ€λŠ” ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ 데이터와 λ©”λͺ¨λ¦¬ λ“±μ˜ μžμ› 그리고 μ“°λ ˆλ“œλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. 이 λ•Œ ν”„λ‘œμ„ΈμŠ€μ˜ μžμ›μ„ μ΄μš©ν•΄μ„œ μ‹€μ œλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 것이 μ“°λ ˆλ“œμ΄λ‹€. κ·Έλž˜μ„œ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ—μ„œλŠ” μ΅œμ†Œν•œ ν•˜λ‚˜ μ΄μƒμ˜ μ“°λ ˆλ“œκ°€ μ‘΄μž¬ν•˜λ©°, λ‘˜ μ΄μƒμ˜ μ“°λ ˆλ“œλ₯Ό 가진 ν”„λ‘œμ„ΈμŠ€λ₯Ό λ©€ν‹°μŠ€λ ˆλ“œ ν”„λ‘œμ„ΈμŠ€λΌκ³  ν•œλ‹€. ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ˜ 곡μž₯이라면 μ“°λ ˆλ“œλŠ” 곡μž₯ λ‚΄λΆ€μ˜ λ…Έλ™μžμ΄λ‹€. | λ©€ν‹°νƒœμŠ€ν‚Ήκ³Ό λ©€ν‹°μ“°λ ˆλ”© ν˜„μž¬ μš°λ¦¬κ°€ μ‚¬μš©ν•˜κ³  μžˆλŠ” μœˆλ„μš°λ‚˜ μœ λ‹‰μŠ€λ₯Ό ν¬ν•¨ν•œ λŒ€λΆ€λΆ„μ˜ OSλŠ” λ©€ν‹°νƒœμŠ€ν‚Ή(multitasking, λ‹€μ€‘μž‘μ—…)을 μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ 개의..

[μžλ°”μ˜ 정석 ]λžŒλ‹€μ‹(Lambda Expressions) 1 - λžŒλ‹€μ‹ ꡬ쑰와 μž‘μ„±λ²•

μžλ°”μ˜ λžŒλ‹€μ‹(Lambda Expressions)은 Java 8λΆ€ν„° λ„μž…λœ κΈ°λŠ₯으둜, κ°„κ²°ν•˜κ²Œ ν•¨μˆ˜λ₯Ό ν‘œν˜„ν•  수 있게 ν•΄μ€€λ‹€. λžŒλ‹€μ‹μ΄λž€ λ§κ·Έλž˜λ„ λ©”μ„œλ“œλ₯Ό ν•˜λ‚˜μ˜ 식(expression)으둜 ν‘œν˜„ν•œ 것이닀. λžŒλ‹€μ‹μœΌλ‘œ ν‘œν˜„ν•˜λ©΄ λ©”μ„œλ“œμ˜ 이름과 λ°˜ν™˜κ°’μ΄ μ—†μ–΄μ§€λ―€λ‘œ λžŒλ‹€μ‹μ„ 읡λͺ…ν•¨μˆ˜λΌκ³ λ„ ν•œλ‹€. | 기본ꡬ쑰 νŒŒλΌλ―Έν„° : λ©”μ„œλ“œμ˜ νŒŒλΌλ―Έν„°μ™€ λ™μΌν•˜λ©° κ΄„ν˜Έ '()'μ•ˆμ— μ„ μ–Έν•œλ‹€. νŒŒλΌλ―Έν„°μ˜ νƒ€μž…μ„ λͺ…μ‹œν•  μˆ˜λ„ 있고 μƒλž΅ν•  μˆ˜λ„ μžˆλ‹€. ν™”μ‚΄ν‘œ : νŒŒλΌλ―Έν„°μ™€ 본문을 κ΅¬λΆ„ν•˜λŠ” 역할을 ν•œλ‹€. expression_body : ν•΄λ‹Ή ν•¨μˆ˜κ°€ μˆ˜ν–‰ν•  λ‘œμ§μ„ λ‹΄κ³  μžˆλ‹€. λ©”μ„œλ“œμ—μ„œ 이름과 λ°˜ν™˜νƒ€μž…μ„ μ œκ±°ν•˜κ³  λ§€κ°œλ³€μˆ˜ 선언뢀와 λͺΈν†΅ 사이에 ->λ₯Ό μΆ”κ°€ν•œ 것이닀. (parameters) -> expression_body | λžŒλ‹€μ‹..

String, StringBuffer, StringBuilder의 차이점과 μ‚¬μš©λ°©λ²•, μœ μš©ν•œ λ©”μ„œλ“œ

`String`, `StringBuffer`, `StringBuilder`λŠ” λͺ¨λ‘ Javaμ—μ„œ λ¬Έμžμ—΄μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ ν΄λž˜μŠ€μ΄λ‹€. 각 클래슀의 νŠΉμ§•κ³Ό 차이점에 λŒ€ν•΄ κ³΅λΆ€ν–ˆλ‹€. | String λΆˆλ³€μ„± (Immutability): String 클래슀의 κ°€μž₯ 큰 νŠΉμ§•μ€ ν•œ 번 μƒμ„±λœ String κ°μ²΄λŠ” λΆˆλ³€μ΄λ‹€. 즉, String에 μ–΄λ–€ λ³€ν™”λ₯Ό μ£Όλ €κ³  μƒˆλ‘œμš΄ String 객체가 μƒμ„±λœλ‹€. μ΄λŸ¬ν•œ λΆˆλ³€μ„±μ€ νŠΉμ • μƒν™©μ—μ„œλŠ” μ•ˆμ •μ„±μ„ μ œκ³΅ν•˜μ§€λ§Œ, λ¬Έμžμ—΄ μ‘°μž‘ μž‘μ—…μ΄ λΉˆλ²ˆν•˜κ²Œ 일어날 λ•ŒλŠ” μ„±λŠ₯ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. μ˜ˆμ‹œ: λ¬Έμžμ—΄ μ—°κ²° (+ μ—°μ‚°μž μ‚¬μš©)을 ν•  λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ String 객체가 μƒμ„±λœλ‹€. | StringBuffer κ°€λ³€μ„± (Mutability): StringBufferλŠ” λ¬Έμžμ—΄μ„ λ³€κ²½ν•˜κ±°λ‚˜ μ‘°μž‘ν•  ..

Wrapper 클래슀의 κΈ°λŠ₯κ³Ό μ˜ˆμ‹œ

| Wrapper ν΄λž˜μŠ€λž€? Javaμ—μ„œλŠ” κΈ°λ³Έ 데이터 νƒ€μž…(primitive data types)κ³Ό 그에 ν•΄λ‹Ήν•˜λŠ” 래퍼(Wrapper) 클래슀λ₯Ό μ œκ³΅ν•œλ‹€. 래퍼 ν΄λž˜μŠ€λŠ” κΈ°λ³Έ 데이터 νƒ€μž…μ˜ 값을 객체둜 κ°μ‹ΈλŠ” 역할을 ν•œλ‹€. 이λ₯Ό 톡해 κΈ°λ³Έ 데이터 νƒ€μž… 값에 λŒ€ν•œ 객체 연산을 μˆ˜ν–‰ν•  수 μžˆλ‹€. λ˜ν•œ μ œλ„ˆλ¦­κ³Ό 같은 κΈ°λŠ₯μ—μ„œ κΈ°λ³Έ 데이터 νƒ€μž…μ„ 직접 μ‚¬μš©ν•  수 없을 λ•Œ 래퍼 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆλ‹€. | μ£Όμš” 래퍼 ν΄λž˜μŠ€μ™€ ν•΄λ‹Ή κΈ°λ³Έ 데이터 νƒ€μž… | 래퍼 클래슀의 μ£Όμš” κΈ°λŠ₯κ³Ό μ˜ˆμ‹œ 1. κ°’ λ³€ν™˜ λ¬Έμžμ—΄μ„ ν•΄λ‹Ή 래퍼 클래슀의 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜κ±°λ‚˜, ν•΄λ‹Ή νƒ€μž…μ˜ 값을 λ‹€λ₯Έ νƒ€μž„μœΌλ‘œ λ³€ν™˜ν•  수 μžˆλ‹€. int i = Integer.parseInt("123"); String s = Integer.toStrin..

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

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

지연 μ΄ˆκΈ°ν™” (Lazy Initialization)λž€?

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

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

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

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

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