Java

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

newkr 2022. 9. 4. 18:00
728x90

πŸ‘€ 데이터 νƒ€μž…μ΄ 뭐야?

 λ°μ΄ν„° νƒ€μž…μ€ 말 κ·ΈλŒ€λ‘œ μ–΄λ– ν•œ 데이터가 λ™μž‘ν•˜λŠ” 방식에 따라 λ‚˜λ‰˜λŠ” νƒ€μž…μ„ λ§ν•œλ‹€. 보톡은 int, char, String λ“± μ—¬λŸ¬ 데이터 νƒ€μž…μ„ μ˜λ―Έν•˜μ§€λ§Œ, λ‚΄κ°€ 였늘 ν•˜κ³  싢은 μ΄μ•ΌκΈ°λŠ” 이 λͺ¨λ“  데이터 νƒ€μž…μ„ ν¬ν•¨ν•˜λŠ” 넓은 의미의 데이터 νƒ€μž…μ— λŒ€ν•œ 이야기λ₯Ό ν•˜κ³ μž ν•œλ‹€.

πŸ€ͺ μ›μ‹œ? μ°Έμ‘°?

 μžλ°”λŠ” 총 2κ°€μ§€μ˜ 큰 데이터 νƒ€μž…μœΌλ‘œ λ‚˜λ‰œλ‹€. 1) μ›μ‹œ 데이터 νƒ€μž…(Primitive), 2) μ°Έμ‘° 데이터 νƒ€μž…(Reference) 이 두 κ°€μ§€κ°€ 그것이닀. μ›μ‹œ 데이터 νƒ€μž…μ€ 총 8개의 νƒ€μž…μ„ μ œκ³΅ν•˜λ©°, μš°λ¦¬κ°€ ν”νžˆ μ•Œκ³  μžˆλŠ” int, char, boolean 등을 ν¬ν•¨ν•˜κ³  μžˆλ‹€.

더보기

μžλ°”μ˜ μ›μ‹œ 데이터 νƒ€μž… 8κ°€μ§€

1) byte
2) short
3) int
4) long
5) char
6) float
7) double
8) boolean

 μ›μ‹œ 데이터 νƒ€μž…μ€ 기본값이 μ •ν•΄μ Έ μžˆμ–΄μ„œ null이 μ‘΄μž¬ν•  수 μ—†λ‹€. κ°€μž₯ 큰 νŠΉμ§•μ€ 데이터λ₯Ό λ³€μˆ˜κ°€ 직접 κ°€μ§€κ³  μžˆλŠ” κ΅¬μ‘°λΌμ„œ int a = b와 같이 값을 λ³΅μ‚¬ν–ˆμ„ λ•Œ, a와 b의 값은 μ„œλ‘œ λ³„κ°œλ‘œ 반영이 λœλ‹€. μ•„λž˜ μ˜ˆμ‹œλ₯Ό 보면 이 λ¬Έμž₯을 μ΄ν•΄ν•˜κΈ° μ‰¬μšΈ 것이닀.

public class Test {
	public static void main(String[] args) {
    	int x = 0;
        int y = x;
        for (int i = 0; i < 10; i++) {
            x++;
        }
        System.out.println(x); // 10
        System.out.println(y); // 0
    }
}

 μ›μ‹œ 데이터 νƒ€μž…μ΄ 이처럼 μž‘λ™ν•˜λŠ” μ΄μœ λŠ” μ›μ‹œ νƒ€μž…μ˜ λ³€μˆ˜λŠ” λ©”μ„œλ“œκ°€ μ‹€ν–‰λ˜λ©΄ μƒκΈ°λŠ” λ©”μ„œλ“œ μŠ€νƒμ— 값이 μ§μ ‘μ μœΌλ‘œ μ €μž₯되기 λ•Œλ¬Έμ΄λ‹€.

μ›μ‹œ 데이터 νƒ€μž…μ˜ 데이터 μ €μž₯ 방식

 μ°Έμ‘° 데이터 νƒ€μž…μ€ μ›μ‹œ 데이터 νƒ€μž…κ³ΌλŠ” 큰 차이가 λ‚œλ‹€. μ°Έμ‘° νƒ€μž… λ³€μˆ˜μ˜ 경우 데이터가 μ‘΄μž¬ν•˜λŠ” μœ„μΉ˜λ₯Ό μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— 두 개의 λ³€μˆ˜κ°€ λͺ¨λ‘ ν•˜λ‚˜μ˜ μœ„μΉ˜λ₯Ό 가리킬 수 μžˆλ‹€. 즉, x = y 이후 x에 λŒ€ν•œ μ—°μ‚° κ²°κ³Όκ°€ y에도 λ°˜μ˜λ˜λŠ” 식이닀.

// μ°Έμ‘° 데이터 νƒ€μž… μ˜ˆμ‹œ μ†ŒμŠ€μ½”λ“œ
public class Test {
	public static void main(String[] args) {
    	int[] arr1 = {0,0,0,0,0};
        int[] arr2 = arr1;
        for (int i = 0; i < arr1.length; i++) {
            arr1[i] += 1;
            System.out.print(arr1[i] + " "); // arr1의 μš”μ†Œκ°’ 1 1 1 1 1
        }
        System.out.println();
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i] + " "); // arr2의 μš”μ†Œκ°’ 1 1 1 1 1
        }
    }
}

 μœ„λ₯Ό 보면 λΆ„λͺ…νžˆ arr1의 μš”μ†Œλ“€λ§Œ 1을 더해쀬을 뿐인데, arr2의 μš”μ†Œλ“€λ„ λͺ¨λ‘ 1 1 1 1 1둜 λ°”λ€Œμ—ˆλ‹€. μ΄λ ‡κ²Œ λ™μž‘ν•˜λŠ” μ΄μœ λŠ” μžλ°”μ˜ μ°Έμ‘° νƒ€μž…μ€ λ³€μˆ˜ μžμ²΄λŠ” μŠ€νƒμ— μ €μž₯λ˜μ§€λ§Œ μŠ€νƒ λ‚΄ λ°μ΄ν„°λŠ” μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜κ²Œ λ˜λŠ”λ°, 이 κ°μ²΄λŠ” νž™μ΄λΌλŠ” 곡간에 μƒˆλ‘­κ²Œ μ €μž₯λœλ‹€. 그리고 이 κ°μ²΄λŠ” νž™μ΄λΌλŠ” κ³΅κ°„μ—μ„œ μƒˆλ‘œμš΄ μŠ€νƒμ„ λ§Œλ“€κ³  κ·Έ μŠ€νƒμ— 데이터 값을 μ €μž₯ν•˜κ²Œ λ˜λŠ” 것이닀. 그리고 arr2κ°€ arr1의 데이터가 μ‘΄μž¬ν•˜λŠ” νž™μ˜ μ£Όμ†Œκ°’μ„ 볡사해왔기 λ•Œλ¬Έμ΄λ‹€.

μ°Έμ‘° 데이터 νƒ€μž…μ˜ 데이터 μ €μž₯ 방식

 μžλ°”λŠ” λŒ€λΆ€λΆ„μ˜ 데이터가 μ°Έμ‘° νƒ€μž…μ΄λ‹€. κ·Έ μ΄μœ λŠ” 객체 = μ°Έμ‘° νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ΄λ‹€. μ°Έμ‘° 데이터 νƒ€μž…μ˜ μ˜ˆμ‹œλ‘œλŠ” String, Array, Class 등을 ν¬ν•¨ν•œ λͺ¨λ“  객체 데이터 μš”μ†Œλ“€μ΄ μ°Έμ‘° νƒ€μž…μ΄λ‹€.

 

μ˜€λŠ˜μ€ μ—¬κΈ°κΉŒμ§€λ§Œ μ•Œμ•„λ³΄μž! πŸ˜‡

728x90