๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ ์ด์•ผ๊ธฐ/JAVA

Java - ๋ฐ์ดํ„ฐ ํƒ€์ž… (data type)

by 0_0๐Ÿ–ค 2023. 6. 29.
๋ฐ˜์‘ํ˜•

๋ฐ์ดํ„ฐ ํƒ€์ž…(data type)์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์•Œ๋ ค์ฃผ๋Š”๊ฒƒ, ๋ฐ์ดํ„ฐํƒ€์ž…์€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž… (primitive type) ๊ณผ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… (reference type) ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

๊ธฐ๋ณธ ํƒ€์ž… (primitive type)

์‹ค์ œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„, ์Šคํƒ(stack) ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค. ์ž๋ฐ”์—์„œ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ํƒ€์ž…์„ 8๊ฐœ๋กœ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์—ฌ ์ œ๊ณตํ•œ ๊ฒƒ์ด ๊ธฐ๋ณธ ํƒ€์ž…์ด๋‹ค.

 

 

1. ์ •์ˆ˜ํ˜• ํƒ€์ž…

- ์ž๋ฐ”์—์„œ์˜ ์ •์ˆ˜๋ž€ ๋ถ€ํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์†Œ์ˆ˜ ๋ถ€๋ถ„์ด ์—†๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธ ( byte / short / int / long )

- ์ •์ˆ˜ํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฒฐ์ • ์‹œ ๋ฐ˜๋“œ์‹œ ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•ด ๊ฒฐ์ •

- ํ•ด๋‹น ํƒ€์ž…์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ ์ €์žฅํ•˜๊ฒŒ ๋˜๋ฉด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(overflow)๊ฐ€ ๋ฐœ์ƒํ•ด ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฐ’์ด ์ €์žฅ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

overflow - ์ตœ์ƒ์œ„ ๋น„ํŠธ(MSB)๋ฅผ ๋ฒ—์–ด๋‚œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ธ์ ‘ ๋น„ํŠธ๋ฅผ ๋ฎ์–ด ์“ฐ๊ฒŒ ๋œ๋‹ค.

underflow - ํ•ด๋‹น ํƒ€์ž…์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋ฒ”์œ„๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

 

์ •์ˆ˜ํ˜• ํƒ€์ž… ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ฒ”์œ„
byte 1๋ฐ”์ดํŠธ -128 ~ 127
short 2๋ฐ”์ดํŠธ -215 ~ (215 - 1)
-32,768 ~ 32,767
int 4๋ฐ”์ดํŠธ -231 ~ (231 - 1)
-2,147,483,648 ~ 2,147,483,647
long 8๋ฐ”์ดํŠธ -263 ~ (263 - 1)
-9,223,372,036,854,775,808
~ 9,223,372,036,854,775,807

- ์ž๋ฐ”์—์„œ ์ •์ˆ˜ํ˜• ํƒ€์ž… ์ค‘ ๊ธฐ๋ณธ์ด ๋˜๋Š” ํƒ€์ž…์ด int. ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์ ์œผ๋กœ ์ •์ˆ˜ํ˜• ์ค‘์—์„œ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

int age = 30;  // '', "" ์“ฐ์ง€ ์•Š๊ณ  ์ •์ˆ˜ ์ž…๋ ฅ

 

 

 

 

 

2. ์‹ค์ˆ˜ํ˜• ํƒ€์ž…

- ์ž๋ฐ”์—์„œ ์‹ค์ˆ˜๋ž€ ์†Œ์ˆ˜๋ถ€๋‚˜ ์ง€์ˆ˜๋ถ€๊ฐ€ ์žˆ๋Š” ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

- ์ •์ˆ˜๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋„“์€ ํ‘œํ˜„ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ( float / double )

- ๊ณผ๊ฑฐ์—๋Š” floatํ˜•์„ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ์œผ๋‚˜ ํ•˜๋“œ์›จ์–ด ๋ฐœ๋‹ฌ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์ฆ๊ฐ€ํ•ด ํ˜„์žฌ๋Š” doubleํ˜•์„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ

   ( doubleํ˜•์ด floatํ˜•๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฐ ๋ฒ”์œ„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. )

- ํ‘œํ˜„ ๋ฒ”์œ„ ์ด์™ธ ์œ ํšจ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ณ ๋ คํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

์‹ค์ˆ˜ํ˜• ํƒ€์ž… ์ง€์ˆ˜์˜ ๊ธธ์ด ๊ฐ€์ˆ˜์˜ ๊ธธ์ด ์œ ํšจ ์ž๋ฆฟ์ˆ˜
float 8๋น„ํŠธ 23๋น„ํŠธ ์†Œ์ˆ˜ ๋ถ€๋ถ„ 6์ž๋ฆฌ๊นŒ์ง€ ์˜ค์ฐจ์—†์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
double 11๋น„ํŠธ 52๋น„ํŠธ ์†Œ์ˆ˜ ๋ถ€๋ถ„ 15์ž๋ฆฌ๊นŒ์ง€ ์˜ค์ฐจ์—†์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
์‹ค์ˆ˜ํ˜• ํƒ€์ž… ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ ๋ฐ์ดํ„ฐ์˜ ํ‘œํ˜„ ๋ฒ”์œ„ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… ์ ‘๋ฏธ์‚ฌ
float 4๋ฐ”์ดํŠธ (3.4 X 10-38) ~ (3.4 X 1038) F ๋˜๋Š” f
double 8๋ฐ”์ดํŠธ (1.7 X 10-308) ~ (1.7 X 10308) D ๋˜๋Š” d (์ƒ๋žต ๊ฐ€๋Šฅ)

 

double pi = 3.14; // ์ ‘๋ฏธ์‚ฌ d ์ƒ๋žต ๊ฐ€๋Šฅ
float rate = 0.5f; // ์ ‘๋ฏธ์‚ฌ f ์ž‘์„ฑ

 

 

 

 

 

3. ๋ฌธ์žํ˜• ํƒ€์ž…

- ์ž‘์€ ์ •์ˆ˜๋‚˜ ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… (char)

- ์ปดํ“จํ„ฐ๋Š” 2์ง„์ˆ˜๋ฐ–์— ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๋ฌธ์ž๋„ ์ˆซ์ž๋กœ ํ‘œํ˜„ํ•ด์•ผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๋ฌธ์ž๋ฅผ ์–ด๋–ค ์ˆซ์ž์— ๋Œ€์‘์‹œํ‚ฌ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์•ฝ์†์ด ํ•„์š”ํ•ด์ง.

- C์–ธ์–ด์™€ C++์—์„œ๋Š” ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋‚˜ ์ž๋ฐ”์—์„œ๋Š” ์œ ๋‹ˆ์ฝ”๋“œ(unicode) ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ž๋ฅผ ํ‘œํ˜„ํ•จ.

- ์œ ๋‹ˆ์ฝ”๋“œ๋Š” ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ 16๋น„ํŠธ๋กœ ํ‘œํ˜„ํ•ด ์ด 65,536๊ฐœ์˜ ๋ฌธ์ž๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.

 

๋ฌธ์žํ˜• ํƒ€์ž… ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ ๋ฐ์ดํ„ฐ์˜ ํ‘œํ˜„ ๋ฒ”์œ„
char 2๋ฐ”์ดํŠธ 0 ~ 216

 

char gender = '๋‚จ'; // ๋ฆฌํ„ฐ๋Ÿด ' ' ์‚ฌ์šฉ

 

 

 

 

 

4. ๋…ผ๋ฆฌํ˜• ํƒ€์ž…

- ์ฐธ(true) ํ˜น์€ ๊ฑฐ์ง“ (false) ์ค‘ ํ•œ ๊ฐ€์ง€ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ถˆ๋ฆฐ(boolean) ํƒ€์ž…

- boolean์˜ ๊ธฐ๋ณธ ๊ฐ’์€ false ์ด๋ฉฐ, ๊ธฐ๋ณธ ํƒ€์ž… ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ํฌ๊ธฐ์ธ 1๋ฐ”์ดํŠธ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

๋…ผ๋ฆฌํ˜• ํƒ€์ž… ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ ๋ฐ์ดํ„ฐ์˜ ํ‘œํ˜„ ๋ฒ”์œ„
boolean 1๋ฐ”์ดํŠธ true ๋˜๋Š” false

 

boolean isTrue = true; // ์ฐธ ๊ฐ’ 
boolean isFalse = false; // ๊ฑฐ์ง“ ๊ฐ’ ( 0 )

 

 

 

 

 

 

์ฐธ์กฐ ํƒ€์ž… (Reference type)

์‹ค์ œ ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๋Š”, ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณณ์˜ ์ฃผ์†Ÿ๊ฐ’์œผ๋กœ ๋น„์–ด์žˆ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ null ๊ฐœ๋…์ด ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ฐธ์กฐ ํƒ€์ž… ๋ฐ์ดํ„ฐ๋Š” ํž™(Heep) ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค. ๋ฐฐ์—ด, ์—ด๊ฑฐ, ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

 

1. ๋ฐฐ์—ด (Array)

- ๋ฐฐ์—ด์€ ๋™์ผํ•œ ํƒ€์ž…์˜ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ž๋ฐ”์—์„œ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

/*
    ๊ธฐ๋ณธํ˜•ํƒœ
    ๋ฐ์ดํ„ฐํƒ€์ž…[] ์‹๋ณ„์ž = {};
    ๊ธฐ๋ณธ๊ฐ’ : null
*/

public class Example {
    public static void main(String[] args) {
        // ์ •์ˆ˜ํ˜• ๋ฐฐ์—ด ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”
        int[] numbers = { 1, 2, 3, 4, 5 };
        
        // ๋ฌธ์ž์—ด ๋ฐฐ์—ด ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”
        String[] names = { "Alice", "Bob", "Charlie" };
        
        // ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ์ถœ๋ ฅ
        System.out.println("numbers ๋ฐฐ์—ด ์š”์†Œ:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }
        
        System.out.println("names ๋ฐฐ์—ด ์š”์†Œ:");
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
    }
}

 

 

 

2. ์—ด๊ฑฐ (Enumeration)

- enum์€ ์ œํ•œ๋œ ์„ ํƒ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์œ ์šฉํ•˜๋ฉฐ, ๊ฐ€๋…์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

// ํ‚ค์›Œ๋“œ enum ์‚ฌ์šฉ
// ๊ธฐ๋ณธ๊ฐ’ null
enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class Example {
    public static void main(String[] args) {
        // enum ๊ฐ’ ์‚ฌ์šฉ
        Day today = Day.WEDNESDAY;
        
        // switch ๋ฌธ์œผ๋กœ enum ๊ฐ’์— ๋”ฐ๋ฅธ ๋™์ž‘ ์ˆ˜ํ–‰
        switch (today) {
            case MONDAY:
                System.out.println("์›”์š”์ผ์ž…๋‹ˆ๋‹ค.");
                break;
            case TUESDAY:
                System.out.println("ํ™”์š”์ผ์ž…๋‹ˆ๋‹ค.");
                break;
            case WEDNESDAY:
                System.out.println("์ˆ˜์š”์ผ์ž…๋‹ˆ๋‹ค.");
                break;
            case THURSDAY:
                System.out.println("๋ชฉ์š”์ผ์ž…๋‹ˆ๋‹ค.");
                break;
            case FRIDAY:
                System.out.println("๊ธˆ์š”์ผ์ž…๋‹ˆ๋‹ค.");
                break;
            case SATURDAY:
                System.out.println("ํ† ์š”์ผ์ž…๋‹ˆ๋‹ค.");
                break;
            case SUNDAY:
                System.out.println("์ผ์š”์ผ์ž…๋‹ˆ๋‹ค.");
                break;
        }
    }
}

 

 

 

3. ํด๋ž˜์Šค (class)

- Class ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•˜์—ฌ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

// ๊ธฐ๋ณธ๊ฐ’ : null

public class ex { // ex ํด๋ž˜์Šค ์ƒ์„ฑ
	
    // .. ์ฝ”๋“œ ์ž‘์„ฑ 
    
}

 

 

 

4. ์ธํ„ฐํŽ˜์ด์Šค (interface)

- ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜(๊ตฌ์กฐ)๋งŒ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„์„ ๊ฐ–์ง€ ์•Š๋Š” ์ถ”์ƒํ™”๋œ ๊ฐœ๋…์ด๋‹ค.

- ๋‹คํ˜•์„ฑ(polymorphism) ๊ณผ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์–ด ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋“ค์„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹คํ˜•์„ฑ ์ด๋ž€ ? : [JAVA] - Java - ๊ฐœ์š” (๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

// ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ
// ๊ธฐ๋ณธ๊ฐ’ : null
interface Animal { // Animal ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ
    void makeSound();
}

// ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค
class Dog implements Animal {
    @Override : ์œ„์—์„œ ์„ ์–ธ๋œ makeSound์˜ ๊ฐ’ ๋ณ€๊ฒฝ
    public void makeSound() {
        System.out.println("๋ฉ๋ฉ!");
    }
}

class Cat implements Animal {
    @Override : ์œ„์—์„œ ์„ ์–ธ๋œ makeSound์˜ ๊ฐ’ ๋ณ€๊ฒฝ
    public void makeSound() {
        System.out.println("์•ผ์˜น!");
    }
}

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•