JAVA/기본 이둠

3. μžλ£Œν˜•(DataType)

🐳 Laboon 2024. 1. 2. 21:23

이전 ν¬μŠ€νŠΈμ—μ„œ λ³€μˆ˜λ₯Ό μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€.

μžλ£Œν˜•μ΄λž€ λ³€μˆ˜μ— 값을 ν• λ‹Ήν•  λ•Œ, μ–΄λ–€ 값을 ν• λ‹Ήν•  것인지? 미리 μ•Œλ €μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

 

λ³€μˆ˜ 포슀트λ₯Ό 잘 생각해 λ΄…μ‹œλ‹€.

1. a = 10을 μž‘μ„±ν•˜κ³  λ°”λ‘œ λ‹€μŒμ— a = 22얡이라고 μž‘μ„±ν•΄ λ΄…μ‹œλ‹€.

2. Symbol Tableμ—μ„œ a의 μ£Όμ†Œκ°€ 0x0004라고 가정을 ν•©μ‹œλ‹€.

3. 0x0008 μ£Όμ†Œμ— 이미 λ‹€λ₯Έ 값이 μžˆλ‹€κ³  κ°€μ •ν•©μ‹œλ‹€.

4. 0x0004에 10을 μ €μž₯ν•  λ•ŒλŠ” 아무 λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

5. 0x0004에 22얡을 μ €μž₯ν•  λ•ŒλŠ” λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

μ΄μœ κ°€ λ­˜κΉŒμš”?

μ»΄ν“¨ν„°μ—μ„œ 기본적인 μ •μˆ˜λŠ” 4byte(32bit, λŒ€λž΅ 21μ–΅)κΉŒμ§€ ν‘œν˜„μ„ ν•˜κ³  곡간을 μ°¨μ§€ν•©λ‹ˆλ‹€.

aλΌλŠ” λ³€μˆ˜κ°€ 0x0004, 0x0005, 0x0006, 0x0007의 곡간을 μ°¨μ§€ν•˜λŠ” 것이죠.

nλΉ„νŠΈλ₯Ό ν‘œν˜„ν•  λ•Œ 2^(n-1)κΉŒμ§€ ν‘œν˜„

그런데 22얡을 μ €μž₯ν•  λ•ŒλŠ” 4byteλ₯Ό λ„˜μ–΄κ°‘λ‹ˆλ‹€. 0x0008의 κ³΅κ°„κΉŒμ§€ κ±΄λ“œλ¦¬κ²Œ λ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 있죠.

λ§Œμ•½ 0x0008에 μ€‘μš”ν•œ 값이 λ“€μ–΄ μžˆλ‹€λ©΄ λ¬Έμ œκ°€ λ°œμƒν•˜κ²Œ 되죠.

 

κ·Έλž˜μ„œ 미리 곡간을 ν™•λ³΄ν•˜κΈ° μœ„ν•΄ μžλ£Œν˜•μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

PDT(Primitive Data Type) - κΈ°λ³Έ μžλ£Œν˜•
데이터 νƒ€μž… 크기 μ’…λ₯˜ κΈ°λ³Έ κ°’
byte 1byte μ •μˆ˜ 0
short 2byte μ •μˆ˜ 0
int 4byte μ •μˆ˜ 0
long 8byte μ •μˆ˜ 0L
float 4byte μ‹€μˆ˜ 0.0f
double 8byte μ‹€μˆ˜ 0.0d
char 2byte 문자 null
boolean 1byte 뢈린 false

μžλ°”μ—μ„œλŠ” unicodeλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— charν˜•μ΄ 2byte의 크기λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.

 

μš°λ¦¬λŠ” 이런 μžλ£Œν˜•μ„ 톡해 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  ν• λ‹Ήν•˜κ²Œ λ©λ‹ˆλ‹€.

int myAge; // μ„ μ–Έ

myAge = 25; // ν• λ‹Ή

 

참고둜 charλŠ” 'A'와 같은 ν•˜λ‚˜μ˜ 문자만 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Ace와 같은 ν•˜λ‚˜μ˜ λ¬Έμžμ—΄μ„ ν‘œν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” Stringμ΄λΌλŠ” μžλ£Œν˜•μ„ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”λ°μš”.

String은 κΈ°λ³Έ μžλ£Œν˜•μ΄ μ•„λ‹ˆκ³  Javaμ—μ„œ 직접 λ§Œλ“  μžλ£Œν˜•μž…λ‹ˆλ‹€. 이런 것을 User Define Data Type이라고 ν•©λ‹ˆλ‹€.

κΈ°λ³Έ μžλ£Œν˜• μ™Έ μ‚¬μš©μžμ—κ²Œ λ”μš± νŽΈλ¦¬ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. API(Application Programing Interface)라고도 ν•˜μ£ .

APIμ—λŠ” 좔후에 λ‹€λ£° μ˜ˆμ •μ΄κ³  Interface에 λŒ€ν•œ 글은 μ—¬κΈ°μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ»΄ν“¨ν„°μ—μ„œ Interfaceλž€?

λ¨Όμ €, Interface의 λœ»μ€ μƒν˜Έ μž‘μš©μ΄λΌκ³  ν•©λ‹ˆλ‹€. (Google λ²ˆμ—­κΈ°) μƒν˜Έ μž‘μš©μ΄λΌκ³  ν•˜λ©΄ A와 Bκ°€ μ„œλ‘œ 물건을 μ£Όκ³  λ°›λ“ , λŒ€ν™”λ₯Ό ν•˜λ“  싸움을 ν•˜λ“ (?) 두 개 μ΄μƒμ˜ 무언가가 μ„œλ‘œ 무언가λ₯Ό ν•˜λŠ” 것이

dev-dot.tistory.com

 

UDDT(User Define Data Type) - μ‚¬μš©μž μ •μ˜ μžλ£Œν˜•

UDDTλŠ” Reference Data Type (μ°Έμ‘°ν˜•) 이라고 λΆ€λ₯Ό μˆ˜λ„ μžˆλŠ”λ° ν΄λž˜μŠ€λ‚˜ λ°°μ—΄ λ“±μ—μ„œ μ‚¬μš©λ˜λŠ” κ°œλ…μž…λ‹ˆλ‹€.

λ‚˜μ€‘μ— 더 μžμ„Ένžˆ λ‹€λ£¨κ² μ§€λ§Œ PDT(κΈ°λ³Έ μžλ£Œν˜•) λ˜λŠ” 또 λ‹€λ₯Έ UDDT(μ‚¬μš©μž μ •μ˜ μžλ£Œν˜•)의 μ§‘ν•©μœΌλ‘œ 이루어진 μžλ£Œν˜•μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ String은 λ¬Έμžμ—΄μ„ ν‘œν˜„ν•˜λŠ”λ° λ¬Έμžμ—΄μ€ ν•˜λ‚˜μ˜ λ¬Έμžλ“€λ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 말은 char μžλ£Œν˜•μœΌλ‘œ String μžλ£Œν˜•μ„ λ§Œλ“€μ–΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

java.base/java/lang/String.java
λ§€κ°œλ³€μˆ˜κ°€ char μžλ£Œν˜•μž„.

 

μ—¬λŸ¬ PDTλ₯Ό κ°€μ§€κ³  μžˆλŠ” String UDDT

 

UDDTλŠ” Classλ₯Ό κ³΅λΆ€ν•˜κ²Œ 되면 쑰금 더 μ‰½κ²Œ μ•Œ 수 μžˆμœΌλ―€λ‘œ μ§€κΈˆμ€ μ—¬κΈ°κΉŒμ§€λ§Œ μ•Œμ•„λ‘λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€.

 


이제, μš°λ¦¬λŠ” PDT, UDDT, Variable, Assign을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

컴퓨터에 값을 μ €μž₯ν•˜κ³  좜λ ₯ν•˜λŠ” 것이죠.

좜λ ₯에 λŒ€ν•΄μ„œλŠ” 아직 μž‘μ„±ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ 기본적으둜 맛은 λ΄μ•Όν•˜λ‹ˆκΉŒ

System.out.println(value); 둜 μžκΈ°μ†Œκ°œλ₯Ό 좜λ ₯해보면 μžλ£Œν˜•μ— λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œ 수 μžˆκ² λ„€μš” 

public static void main(String[] args) {	
    String name = "dot";
    int age = 25;
    char gender = 'M';
    boolean girlFriend = false;
    
    System.out.println("이름 : " + dot);
    System.out.println("λ‚˜μ΄ : " + age);
    System.out.println("성별 : " + gender);
    System.out.println("μ—¬μžμΉœκ΅¬ μ—¬λΆ€ : " + girlFriend);
}

 

μžλ£Œν˜•μ— λŒ€ν•œ λ…Έμ…˜ μ •λ¦¬μž…λ‹ˆλ‹€.

https://www.notion.so/24jihwan/295b00df286d4f3f92d72119afd997ee

 

μžλ£Œν˜• | Notion

μžλ£Œν˜•μ˜ μ’…λ₯˜ μ•Œμ•„λ³΄κΈ°

24jihwan.notion.site