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

곡뢀 기둝/JAVA

230927 μžκ°ν”„ week4

μƒμ„±μž

: μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œλ§ˆλ‹€ ν˜ΈμΆœλ˜λŠ” 'μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λ©”μ†Œλ“œ'

- λͺ¨λ“  ν΄λž˜μŠ€μ— λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ μƒμ„±μž ν•„μš”

- μƒμ„±μžμ˜ 이름 = 클래슀의 이름

- 리턴 νƒ€μž… μ—†μŒ (void 쓰지 μ•ŠμŒ)

 

1) κΈ°λ³Έ μƒμ„±μž : λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” μƒμ„±μž

- ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ ν•˜λ‚˜λ„ μ—†μœΌλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μž μΆ”κ°€(μžλ™μƒμ„±)

  Card () {  }

 

2) λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž

  Card (String c, String g, iny d) {  }

 

class Data1{ // μ‚¬μš©μžκ°€ λ”°λ‘œ μƒμ„±μžλ₯Ό λ§Œλ“€μ§€ μ•ŠμŒ -> μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μž μžλ™μƒμ„±
	int value;
}
class Data2{
	int value;
	Data2(int x){ // μ‚¬μš©μžκ°€ λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό λ§Œλ“€μ—ˆμŒ -> κΈ°λ³Έμƒμ„±μžλŠ” μƒμ„±λ˜μ§€ μ•ŠμŒ
		value = x;
	}
}
public class lecture_ex {
	public static void main(String[] args) {
		Data1 d1 = new Data1(); // κΈ°λ³Έμƒμ„±μž 호좜
		Data2 d2 = new Data2(); // μ—λŸ¬!! => κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™μƒμ„±λ˜μ§€ μ•Šμ•˜μ„ λ•Œ κΈ°λ³Έμƒμ„±μžλ₯Ό μ΄μš©ν•΄ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Όν•¨.😒 
	}
}

 

     Card c = new Card();

 

β‘  μ—°μ‚°μž new에 μ˜ν•΄ λ©”λͺ¨λ¦¬(heap)에 Card 클래슀의 κ°μ²΄(μΈμŠ€ν„΄μŠ€)κ°€ μƒμ„±λœλ‹€.

β‘‘ μƒμ„±μž Card()κ°€ ν˜ΈμΆœλ˜μ–΄ μˆ˜ν–‰λœλ‹€.

β‘’ μ—°μ‚°μž new의 결과둜 μƒμ„±λœ Card μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œκ°€ λ°˜ν™˜λ˜μ–΄ μ°Έμ‘°λ³€μˆ˜ c에 μ €μž₯λœλ‹€.

 

 

this() μ΄μš©ν•œ 호좜

: 같은 클래슀의 λ‹€λ₯Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©

 λ‹€λ₯Έ μƒμ„±μž ν˜ΈμΆœμ€ μƒμ„±μžμ˜ 첫 λ¬Έμž₯μ—μ„œλ§Œ κ°€λŠ₯

μ™Όμͺ½λ³΄λ‹€ 였λ₯Έμͺ½μ΄ 훨씬 더 쒋은 μ½”λ“œ!

 

 

 

 

 

>> μƒμ„±μžμ—μ„œ μ°Έμ‘°λ³€μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„μ„œ μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ“€μ˜ 값을 볡사

 

>> λ˜‘κ°™μ€ 속성값을 κ°–λŠ” 독립적인 μΈμŠ€ν„΄μŠ€κ°€ ν•˜λ‚˜ 더 λ§Œλ“€μ–΄μ§

 

 


 

λ³€μˆ˜ μ’…λ₯˜

1) 클래슀 λ³€μˆ˜ : 같은 클래슀의 λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ“€μ΄ κ³΅μœ ν•˜λŠ” λ³€μˆ˜ (static)

- μΈμŠ€ν„΄μŠ€ 생성없이 'ν΄λž˜μŠ€μ΄λ¦„.ν΄λž˜μŠ€λ³€μˆ˜λͺ…'으둜 μ ‘κ·Ό

 

2) μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ : 각 μΈμŠ€ν„΄μŠ€μ˜ κ°œλ³„μ μΈ μ €μž₯곡간

- μΈμŠ€ν„΄μŠ€ 생성 ν›„, 'μ°Έμ‘°λ³€μˆ˜.μΈμŠ€ν„΄μŠ€λ³€μˆ˜λͺ…'으둜 μ ‘κ·Ό

- μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ μƒμ„±λ˜κ³ , μ°Έμ‘°λ³€μˆ˜κ°€ 없을 λ•Œ garbage collector에 μ˜ν•΄ μžλ™μ œκ±°λ¨

 

3) 지역 λ³€μˆ˜ : λ©”μ„œλ“œ 내에 μ„ μ–Έλ˜λ©°, λ©”μ„œλ“œμ˜ μ’…λ£Œμ™€ ν•¨κ»˜ μ†Œλ©Έ

- 쑰건문, 반볡문의 λΈ”λŸ­{ } 내에 μ„ μ™Όλœ μ§€μ—­λ³€μˆ˜λŠ” λΈ”λŸ­μ„ λ²—μ–΄λ‚˜λ©΄ μ†Œλ©Έ

 


 

JVM = Java Virtual Machine, μžλ°” 가상 λ¨Έμ‹ 

 

 JVM의 λ™μž‘ 방식

1. μžλ°”λ‘œ 개발된 ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λ©΄ JVM은 OSλ‘œλΆ€ν„° λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•œλ‹€.

2. μžλ°” 컴파일러(javac)κ°€ μžλ°” μ†ŒμŠ€μ½”λ“œ(.java)λ₯Ό μžλ°” λ°”μ΄νŠΈμ½”λ“œ(.class)둜 μ»΄νŒŒμΌν•œλ‹€.

3. Class Loaderλ₯Ό 톡해 JVM Runtime Data Area둜 λ‘œλ”©ν•œλ‹€.

4. Runtime Data Area에 λ‘œλ”© 된 .class듀은 Execution Engine을 톡해 ν•΄μ„ν•œλ‹€.

5. ν•΄μ„λœ λ°”μ΄νŠΈ μ½”λ“œλŠ” Runtime Data Area의 각 μ˜μ—­μ— λ°°μΉ˜λ˜μ–΄ μˆ˜ν–‰ν•˜λ©° 이 κ³Όμ •μ—μ„œ Execution Engine에 μ˜ν•΄ GC의 μž‘λ™κ³Ό μŠ€λ ˆλ“œ 동기화가 이루어진닀.

 

 

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

 

- Method Area : 클래슀 정보와 클래슀 λ³€μˆ˜ μ €μž₯

 

- Call Stack : λ©”μ„œλ“œκ°€ ν˜ΈμΆœμ‹œλ§ˆλ‹€ λ©”μ†Œλ“œ μˆ˜ν–‰μ— ν•„μš”ν•œ λ©”λͺ¨λ¦¬κ³΅κ°„을 ν• λ‹Ή.

그리고 λ©”μ„œλ“œ μ•ˆμ—μ„œ μ‚¬μš©λ˜λŠ” 값듀을 μ €μž₯ν•˜κ³ , 호좜된 λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜, μ§€μ—­λ³€μˆ˜, 리턴 κ°’ 및 μ—°μ‚° μ‹œ μΌμ–΄λ‚˜λŠ” 값듀을 μž„μ‹œλ‘œ μ €μž₯. λ©”μ„œλ“œ μˆ˜ν–‰μ΄ λλ‚˜λ©΄ ν”„λ ˆμž„λ³„λ‘œ μ‚­μ œ, λ©”λͺ¨λ¦¬ λ°˜ν™˜.

 

- Heap : μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜λŠ” 곡간. newμ—°μ‚°μžμ— μ˜ν•΄ μƒμ„±λ˜λŠ” λ°°μ—΄κ³Ό 객체가 λͺ¨λ‘ 여기에 생성됨.

λ©”μ†Œλ“œ μ˜μ—­μ— λ‘œλ“œλœ 클래슀만 생성이 κ°€λŠ₯ν•˜κ³  Garbage Collectorκ°€ μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό ν™•μΈν•˜κ³  μ œκ±°ν•˜λŠ” μ˜μ—­

 


 

λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”

- λ©€λ²„λ³€μˆ˜(μΈμŠ€ν„΄μŠ€λ³€μˆ˜, ν΄λž˜μŠ€λ³€μˆ˜)와 배열은 각 νƒ€μž…μ˜ κΈ°λ³Έκ°’μœΌλ‘œ μžλ™μ΄ˆκΈ°ν™”λ˜λ―€λ‘œ μ΄ˆκΈ°ν™” μƒλž΅ κ°€λŠ₯

- μ§€μ—­λ³€μˆ˜λŠ” μžλ™μ΄ˆκΈ°ν™” μ•ˆλ˜λ―€λ‘œ μ‚¬μš©μ „μ— λ°˜λ“œμ‹œ μ΄ˆκΈ°ν™” ν•„μš”

 

> λ©€λ²„λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”

β‘  λͺ…μ‹œμ  μ΄ˆκΈ°ν™”

 

β‘‘ μƒμ„±μž μ‚¬μš©

 

β‘’ μ΄ˆκΈ°ν™” λΈ”λŸ­

- μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λΈ”λŸ­: {  } 

    - μƒμ„±μžμ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μˆ˜ν–‰λ˜λŠ” μž‘μ—…μ— μ‚¬μš©

    - μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œλ§ˆλ‹€ (μƒμ„±μžλ³΄λ‹€ λ¨Όμ €) 싀행됨

- 클래슀 μ΄ˆκΈ°ν™” λΈ”λŸ­: static {  }

    - ν΄λž˜μŠ€λ³€μˆ˜μ˜ λ³΅μž‘ν•œ μ΄ˆκΈ°ν™”μ— μ‚¬μš©λ˜λ©° ν΄λž˜μŠ€κ°€ λ‘œλ”©λ  λ•Œ 싀행됨

 


 

λ©”μ„œλ“œ μ’…λ₯˜

1) μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ

- μΈμŠ€ν„΄μŠ€ 생성 ν›„, 'μ°Έμ‘°λ³€μˆ˜.λ©”μ„œλ“œμ΄λ¦„()'으둜 호좜

- μΈμŠ€ν„΄μŠ€λ³€μˆ˜λ‚˜ μΈμŠ€ν„΄μŠ€λ©”μ„œλ“œμ™€ κ΄€λ ¨λœ μž‘μ—…μ„ ν•˜λŠ” λ©”μ„œλ“œ

 

2) 클래슀 λ©”μ„œλ“œ (static λ©”μ„œλ“œ)

- 객체 생성없이 'ν΄λž˜μŠ€μ΄λ¦„.λ©”μ„œλ“œμ΄λ¦„()'으둜 호좜

- λ©”μ„œλ“œ λ‚΄μ—μ„œ μΈμŠ€ν„΄μŠ€λ³€μˆ˜ μ‚¬μš©λΆˆκ°€

- this μ‚¬μš© λΆˆκ°€

- static λ©”μ„œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μ ‘κ·Ό λΆˆκ°€ (static λ©€λ²„λ§Œ μ ‘κ·Ό κ°€λŠ₯)

- μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œ static λ³€μˆ˜, static λ©”μ†Œλ“œ μ ‘κ·Ό κ°€λŠ₯

 

 

λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”© : ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ μ •μ˜ν•˜λŠ” 것

- λ§€κ°œλ³€μˆ˜μ˜ 개수 or νƒ€μž…μ΄ 달라야 ν•œλ‹€.

- λ¦¬ν„΄νƒ€μž…μ€ 관계없닀.

'곡뢀 기둝 > JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μ˜ˆμ™Έμ²˜λ¦¬  (0) 2023.11.28
week3_4 과제  (0) 2023.09.30
230925 JAVA  (0) 2023.09.25
μžκ°ν”„ week3 ν΄λž˜μŠ€μ™€ 객체  (0) 2023.09.24
230923 JAVA  (0) 2023.09.24