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

STUDY/JAVA

jAVA - 데이터 νƒ€μž… λΆ„λ₯˜/λ©”λͺ¨λ¦¬ μ‚¬μš© μ˜μ—­

λ°˜μ‘ν˜•

μžλ°”μ˜ 데이터 νƒ€μž…

1. κΈ°λ³Ένƒ€μž…(primitive type) : μ •μˆ˜(byte, char, short, int, long), μ‹€μˆ˜(float, double), 논리(boolean)

2. μ°Έμ‘°νƒ€μž…(reference type) : λ°°μ—΄, μ—΄κ±°, 클래슀, μΈν„°νŽ˜μ΄μŠ€ >> 객체의 λ²ˆμ§€λ₯Ό μ°Έμ‘°ν•˜λŠ” νƒ€μž…

 

두 νƒ€μž…μ˜ 차이점 : μ €μž₯λ˜λŠ” κ°’

κΈ°λ³Ένƒ€μž…μ€ μ‹€μ œ 값을 λ³€μˆ˜ μ•ˆμ— μ €μž₯

μ°Έμ‘°νƒ€μž…μ„ μ΄μš©ν•΄ μ„ μ–Έλœ λ³€μˆ˜λŠ” λ©”λͺ¨λ¦¬μ˜ λ²ˆμ§€λ₯Ό κ°’μœΌλ‘œ κ°–λŠ”λ‹€.(λ²ˆμ§€λ₯Ό 톡해 객체λ₯Ό μ°Έμ‘°)

 

λ³€μˆ˜λŠ” μŠ€νƒμ˜μ—­μ— μƒμ„±λ˜κ³ , κ°μ²΄λŠ” νž™ μ˜μ—­μ— μƒμ„±λ˜λŠ”λ°,

예λ₯Ό λ“€μ–΄ μ΄λ ‡κ²Œ λ„€ 개의 λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ—ˆλ‹€κ³  ν•œλ‹€λ©΄,

int age = 40;
double price = 100.0;

String name = "홍길동"
String hobby = "Game"

age와 price λ³€μˆ˜λŠ” μ‹€μ œ 값인 40κ³Ό 100.0을 가진닀.

λ°˜λ©΄μ— nameκ³Ό hobbyλŠ” μ‹€μ œ 값이 νž™ μ˜μ—­μ— μ €μž₯λœλ‹€.

(ν™κΈΈλ™μ˜ μ£Όμ†Œκ°’μ΄ 100, Game의 μ£Όμ†Œκ°’μ΄ 200 이라고 ν•œλ‹€λ©΄) nameκ³Ό hobby에 μ €μž₯된 값은 100κ³Ό 200이닀.

λ©”λͺ¨λ¦¬ μ‚¬μš© μ˜μ—­

JVM(JAVA Virtual Machine)은 μš΄μ˜μ²΄μ œμ—μ„œ 할당받은 λ©”λͺ¨λ¦¬ μ˜μ—­(Runtime Data Area)λ₯Ό λ‹€μŒκ³Ό 같이 λ‚˜λˆ„μ–΄μ„œ μ‚¬μš©ν•œλ‹€.

 

1. λ©”μ†Œλ“œ(method) μ˜μ—­

    : μ½”λ“œμ—μ„œ μ‚¬μš©λ˜λŠ” 클래슀(~.class)듀을 읽어 ν΄λž˜μŠ€λ³„λ‘œ λŸ°νƒ€μž„ μƒμˆ˜ν’€, ν•„λ“œ(field)데이터, λ©”μ†Œλ“œ 데이터, λ©”μ„œλ„ μ½”λ“œ, μƒμ„±μž μ½”λ“œ         λ“±μ„ λΆ„λ₯˜ν•΄μ„œ μ €μž₯ν•œλ‹€.

    : JVM이 μ‹œμž‘ν•  λ•Œ μƒμ„±λ˜κ³  λͺ¨λ“  μŠ€λ ˆλ“œκ°€ κ³΅μœ ν•˜λŠ” μ˜μ—­

 

2. νž™(Heap)μ˜μ—­

   : 객체와 배열이 μƒμ„±λ˜λŠ” μ˜μ—­

   : νž™ μ˜μ—­μ— μƒμ„±λœ 객체와 배열은 JVM μŠ€νƒ μ˜μ—­μ˜ λ³€μˆ˜λ‚˜ λ‹€λ₯Έ 객체의 ν•„λ“œμ—μ„œ 참쑰함

   : μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜λ‚˜ ν•„λ“œκ°€ μ—†λ‹€λ©΄ μ˜λ―Έμ—†λŠ” 객체가 λ˜λ―€λ‘œ Garbage Collectorλ₯Ό μ‹€ν–‰μ‹œμΌœ μžλ™μœΌλ‘œ μ œκ±°ν•¨

   : 객체λ₯Ό μ œκ±°ν•˜κΈ° μœ„ν•΄ λ³„λ„μ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•  ν•„μš” x

 

3. JVM μŠ€νƒ(Stack)μ˜μ—­

   : 각 μŠ€λ ˆλ“œλ§ˆλ‹€ ν•˜λ‚˜μ”© μ‘΄μž¬ν•˜λ©°, μŠ€λ ˆλ“œκ°€ μ‹œμž‘λ  λ•Œ 할당됨

   : μžλ°” ν”„λ‘œκ·Έλž¨μ—μ„œ μΆ”κ°€μ μœΌλ‘œ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, main μŠ€λ ˆλ“œλ§Œ μ‘΄μž¬ν•˜λ―€λ‘œ JVMμŠ€νƒλ„ ν•˜λ‚˜

   : λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ ν”„λ ˆμž„μ„ μΆ”κ°€(push)ν•˜κ³ , λ©”μ†Œλ“œκ°€ μ’…λ£Œλ˜λ©΄ ν•΄λ‹Ή ν”„λ ˆμž„μ„ 제거(pop)ν•˜λŠ” λ™μž‘μ„ μˆ˜ν–‰

 

κΈ°λ³Ένƒ€μž… λ³€μˆ˜λŠ” μŠ€νƒμ— 직접 값을 가지고 μžˆμ§€λ§Œ,
μ°Έμ‘°νƒ€μž… λ³€μˆ˜λŠ” 값이 μ•„λ‹ˆλΌ νž™ μ˜μ—­μ΄λ‚˜ λ©”μ†Œλ“œ μ˜μ—­μ˜ κ°μ²΄μ£Όμ†Œλ₯Ό 가진닀.

int[] score = {10,20,30} 이라고 ν•  λ•Œ,
λ°°μ—΄ λ³€μˆ˜ scoreλŠ” μŠ€νƒμ˜μ—­μ— μƒμ„±λ˜μ§€λ§Œ, μ‹€μ œ 10, 20, 30 을 κ°–λŠ” λ°°μ—΄ μžμ²΄λŠ” νž™ μ˜μ—­μ— 생성됨

 

μ°Έμ‘° λ³€μˆ˜μ˜ ==. != μ—°μ‚°

μ°Έμ‘° νƒ€μž… λ³€μˆ˜λ“€ κ°„μ˜ ==, != 연산은 κ²°κ΅­ μ£Όμ†Œ 값을 λΉ„κ΅ν•˜λŠ” 것

값이 λ™μΌν•œμ§€ λΉ„κ΅ν•˜λ €λ©΄ λ³€μˆ˜1.equals(λ³€μˆ˜2) 을 μ‚¬μš©ν•΄μ•Όν•œλ‹€.

 

null

null둜 μ΄ˆκΈ°ν™”λœ μ°Έμ‘°λ³€μˆ˜λŠ” μŠ€νƒ μ˜μ—­μ— 생성됨

  => μ°Έμ‘°νƒ€μž… λ³€μˆ˜κ°€ null값을 κ°€μ§€λŠ”μ§€ ν™•μΈν•˜λ €λ©΄ ==, !=연산을 μˆ˜ν–‰ν•˜λ©΄ 됨

 

String

String name;
name = "홍길동";
String hobby = "Game";

μœ„μ™€ 같이 name, hobby λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  각각 "홍길동"κ³Ό "Game" μž…λ ₯ν–ˆλ‹€.

μ΄λ•Œ name, hobby λ³€μˆ˜λŠ” μŠ€νƒμ˜μ—­μ— μƒμ„±λ˜κ³ , "홍길동"κ³Ό "Game"은 νž™ μ˜μ—­μ— String 객체둜 μƒμ„±λœλ‹€.

name, hobbyμ—λŠ” String 객체의 μ£Όμ†Œ 값이 μ €μž₯됨

 

μžλ°”λŠ” λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ΄ λ™μΌν•˜λ‹€λ©΄ String 객체λ₯Ό κ³΅μœ ν•¨(같은 μ£Όμ†Œλ₯Ό μ‚¬μš©ν•¨)

String name1 = "홍길동";
String name2 = "홍길동";

name1 == name2;

이 λ•Œ 같은 μ£Όμ†Œκ°’μ„ 가지고 μ£Όμ†Œκ°’μ„ λΉ„κ΅ν•˜λ―€λ‘œ name1 == name2 의 κ²°κ³ΌλŠ” true이닀.

 

일반적으둜 λ³€μˆ˜μ— λ¬Έμžμ—΄μ„ μ €μžν•  λ•ŒλŠ” μœ„μ™€κ°™μ΄ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜μ§€λ§Œ,

new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ„œ 직접 String 객체λ₯Ό μƒμ„±μ‹œν‚¬ μˆ˜λ„ μžˆλ‹€.

String name1 = new String("홍길동");
String name2 = new String("홍길동");

name1 == name2;

이 경우 name1κ³Ό name2λŠ” μ„œλ‘œ λ‹€λ₯Έ String 객체λ₯Ό μ°Έμ‘°ν•˜λ―€λ‘œ name1 == name2 의 κ²°κ³ΌλŠ” false이닀.

 

 

λ°˜μ‘ν˜•