ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] μžλ°” 데이터 νƒ€μž…, λ³€μˆ˜ 그리고 λ°°μ—΄
    Android/Java 2021. 1. 11. 22:36
    λ°˜μ‘ν˜•
    • 이 글은 "온라인 μžλ°” μŠ€ν„°λ”” λ‚΄μš©"을 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

    κΈ°λ³Έν˜• νƒ€μž… (Primitive type)

    • μžλ°”λŠ” 총 8κ°€μ§€μ˜ κΈ°λ³Έν˜• νƒ€μž…μ„ 미리 μ •μ˜ν•˜μ—¬ μ œκ³΅ν•©λ‹ˆλ‹€.

    • 각 νƒ€μž…μ—λŠ” 기본값듀이 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— Null 값이 μ‘΄μž¬ν•  수 μ—†κ³ , Null값을 λ„£κ³  μ‹Άλ‹€λ©΄ Wrapper 클래슀λ₯Ό ν™œμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    • 기본값은 μ‹€μ œ κ°’μœΌλ‘œ μŠ€νƒ λ©”λͺ¨λ¦¬μ— μ €μž₯λ©λ‹ˆλ‹€.

    • κΈ°λ³Έν˜• νƒ€μž…μ˜ νŠΉμ§•μ€ CPUλ‚˜ μš΄μ˜μ²΄μ œμ— 따라 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€.


    μ°Έμ‘°ν˜• νƒ€μž… (Reference type)

    • κΈ°λ³Έν˜• νƒ€μž…μ„ μ œμ™Έν•œ νƒ€μž…λ“€μ€ λͺ¨λ‘ μ°Έμ‘°ν˜• νƒ€μž…μœΌλ‘œ new ν‚€μ›Œλ“œλ‘œ 객체λ₯Ό μƒμ„±ν•˜μ—¬ 데이터가 μƒμ„±λœ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•˜λŠ” νƒ€μž…μž…λ‹ˆλ‹€.

    • μ°Έμ‘° νƒ€μž…μ˜ λ°μ΄ν„°μ˜ 크기가 가변적, 동적이기 λ•Œλ¬Έμ— 동적 데이터λ₯Ό κ΄€λ¦¬ν•˜λŠ” νž™ λ©”λͺ¨λ¦¬μ— μ €μž₯λ©λ‹ˆλ‹€.

    • μ°Έμ‘° νƒ€μž…μ˜ μ’…λ₯˜λ‘œλŠ” 클래슀(class), λ°°μ—΄(array), μΈν„°νŽ˜μ΄μŠ€(interface), μ—΄κ±°(Enumeration) μž…λ‹ˆλ‹€.


    μƒμˆ˜(constant)와 λ¦¬ν„°λŸ΄(literal)

    μƒμˆ˜

    • μƒμˆ˜λŠ” λ³€μˆ˜μ™€ 같이 값을 μ €μž₯ν•˜λŠ” 곡간을 μ˜λ―Έν•˜μ§€λ§Œ ν•œ 번 μ €μž₯ν•˜λ©΄ λ‹€λ₯Έ κ°’μœΌλ‘œ λ³€κ²½ν•  수 μ—†λ‹€λŠ” νŠΉμ§•μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.

    λ¦¬ν„°λŸ΄

    • λ³€μˆ˜κ°€ μ•„λ‹Œ κ·Έ 자체둜 값을 μ˜λ―Έν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ex) 2021, 100 ...
    • λ¦¬ν„°λŸ΄μ˜ μ’…λ₯˜μ—λŠ” μ •μˆ˜ν˜•, μ‹€μˆ˜ν˜•, λ¬Έμžν˜•, λ…Όλ¦¬ν˜•μœΌλ‘œ μ‘΄μž¬ν•©λ‹ˆλ‹€.

    λ³€μˆ˜ μ„ μ–Έ 및 μ΄ˆκΈ°ν™”

    public class Main {
        public static void main(String[] args) {
            // 각 νƒ€μž… μ„ μ–Έ
            boolean boolean_var;
            byte byte_var;
            int int_var;
            short short_var;
            long long_var;
            float float_var;
            double double_var;
            char char_var;
    
            // 각 νƒ€μž… μ΄ˆκΈ°ν™” 
            boolean_var = true;
            byte_var = 1;
            int_var = 100;
            short_var = 32000;
            long_var = 123456789L;
            float_var = 0.0F;
            double_var = 0.0;
            char_var = 'A';
        }
    }

    λ‹€μŒ μ½”λ“œμ™€ 같이 각 νƒ€μž…μ— 맞게 μ„ μ–Έν•˜κ³  μ΄ˆκΈ°ν™”λ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”λ₯Ό ν•œκΊΌλ²ˆμ—λ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.


    λ³€μˆ˜μ˜ μŠ€μ½”ν”„μ™€ λΌμ΄ν”„νƒ€μž„

    public class ScopeClass {
    
        int instance__var = 10;        // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
        static int class_var = 2021;        // 클래슀 λ³€μˆ˜ or 정적 λ³€μˆ˜
    
        void changeVar(int argument_var){
            int local_var = 20;        // 지역 λ³€μˆ˜
            if(argument_var>local_var){
                instance__var = argument_var;
            }
            else{
                instance__var = local_var;
            }
        }
    }

    μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ (Instance Variables)

    • 클래슀 λ‚΄λΆ€μ—μ„œ μ„ μ–Έλ˜μ–΄ 일뢀 λ©”μ†Œλ“œ 블둝 λ‚΄μ—μ„œ λ˜λŠ” 블둝 λ°–μ—μ„œλ„ μ“Έ 수 μžˆλŠ” λ³€μˆ˜λ₯Ό μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λΌκ³  ν•©λ‹ˆλ‹€.
    • Scope : static λ©”μ†Œλ“œλ₯Ό μ œμ™Έν•œ 클래슀 전체
    • Lifetime : 클래슀의 객체가 λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•  λ•ŒκΉŒμ§€

    클래슀 λ³€μˆ˜ (Class Variables)

    • 클래슀 λ‚΄λΆ€μ—μ„œ static ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λ₯Ό 클래슀 λ³€μˆ˜λΌκ³  ν•©λ‹ˆλ‹€.
    • Scope : 클래슀 전체
    • Lifetime : ν”„λ‘œκ·Έλž¨μ΄ 끝날 λ•ŒκΉŒμ§€

    지역 λ³€μˆ˜ (Local Variables)

    • μΈμŠ€ν„΄μŠ€, 클래슀 λ³€μˆ˜κ°€ μ•„λ‹Œ λͺ¨λ“  λ³€μˆ˜λ“€μ„ 지역 λ³€μˆ˜λΌκ³  ν•©λ‹ˆλ‹€.
    • Scope : μ„ μ–Έλœ 블둝 λ‚΄
    • Lifetime : λ³€μˆ˜κ°€ μ„ μ–Έλœ 블둝을 벗어났을 λ•ŒκΉŒμ§€

    νƒ€μž… λ³€ν™˜, μΊμŠ€νŒ…, νƒ€μž… ν”„λ‘œλͺ¨μ…˜

    μžλ™ νƒ€μž… λ³€ν™˜ (Promotion)

    • νƒ€μž… ν”„λ‘œλͺ¨μ…˜μ΄λΌκ³ λ„ λΆˆλ¦¬λŠ” μžλ™ νƒ€μž… λ³€ν™˜μ€ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 μžλ™μœΌλ‘œ μΌμ–΄λ‚©λ‹ˆλ‹€.
    • μž‘μ€ λ²”μœ„ νƒ€μž…μ˜ λ³€μˆ˜κ°€ 큰 λ²”μœ„ νƒ€μž…μ˜ λ³€μˆ˜μ— μ €μž₯될 λ•Œ λ°œμƒν•©λ‹ˆλ‹€.
    • byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
    • 단, μŒμˆ˜κ°€ μ €μž₯될 수 μžˆλŠ” byte, short λ“±μ˜ νƒ€μž…μ΄ char으둜 μžλ™ νƒ€μž… λ³€ν™˜ν•  수 μ—†μŠ΅λ‹ˆλ‹€. (컴파일 μ—λŸ¬)

    κ°•μ œ νƒ€μž… λ³€ν™˜ (Casting)

    • 큰 λ²”μœ„ νƒ€μž…μ€ μž‘μ€ λ²”μœ„ νƒ€μž…μœΌλ‘œ μžλ™λ³€ν™˜ ν•  수 μ—†κΈ° λ•Œλ¬Έμ— νƒ€μž…μ„ λ°”κΎΈκΈ° μœ„ν•΄μ„œλŠ” κ°•μ œ νƒ€μž… λ³€ν™˜μΈ μΊμŠ€νŒ…μ„ ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • 큰 λ²”μœ„ νƒ€μž…μ˜ λ³€μˆ˜μ˜ 값이 μž‘μ€ λ²”μœ„λ₯Ό λ„˜μ–΄κ°ˆ 경우 μ›λž˜μ˜ 값을 보쑴할 수 μ—†μ§€λ§Œ μž‘μ€ λ²”μœ„ μ•ˆμ—λ„ μžˆμ„ 수 μžˆλŠ” λ³€μˆ˜λΌλ©΄ 값을 보쑴할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • μžλ°”μ—μ„œ 데이터 κ°’ 검사λ₯Ό μœ„ν•΄ 각 νƒ€μž…μ˜ μ΅œλŒ€κ°’, μ΅œμ†Œκ°’ μƒμˆ˜λ₯Ό μ œκ³΅ν•œλ‹€. Ex) Int.MAX_VALUE, Int.MIN_VALUE..
    public class Main {
        public static void main(String[] args) {
    
            // Promotion Example
            char char_var = 'A';
            int int_var = char_var;         // char ->  int μžλ™ ν˜•λ³€ν™˜
            System.out.println(int_var);    // 65
    
            /**
            byte byte_var = 1;
            char char_var2 = byte_var;      // 컴파일 μ—λŸ¬
            **/
    
            int int_var2 = 200;
            float float_var = int_var2;         // int -> float μžλ™ ν˜•λ³€ν™˜
            System.out.println(float_var);      // 200.0
    
    
            // Casting Example
            double double_var = 13.264;
            int int_var3 = (int)double_var;     // double -> int κ°•μ œ ν˜•λ³€ν™˜
            System.out.println(int_var3);       // 13
    
            /**
            float float_var2 = 20.0F;
            int int_var4 = float_var2;          // 컴파일 μ—λŸ¬
            **/
        }
    }

    λ°°μ—΄

    • λ°°μ—΄μ΄λž€ λ™μΌν•œ μžλ£Œν˜•μ˜ λ³€μˆ˜λ₯Ό λ‘˜ 이상 ν• λ‹Ήν•œ κ²ƒμœΌλ‘œ 각각의 λ©”λͺ¨λ¦¬ 곡간을 λ‚˜λž€νžˆ λ‚˜μ—΄ν•œ 것을 λ§ν•©λ‹ˆλ‹€.
    • 배열은 데이터λ₯Ό 인덱슀λ₯Ό 톡해 탐색할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ°°μ—΄μ˜ μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€.

    1차원 λ°°μ—΄

    public class Main {
        public static void main(String[] args) {
    
            // 1차원 λ°°μ—΄ μ„ μ–Έ 3가지 방법
            int[] arr = new int[5];
            int[] arr2 = new int[]{1,2,3};
            int[] arr3 = {4,5,6};
    
    
            // 1차원 λ°°μ—΄ μ΄ˆκΈ°ν™”
            arr[0] = 0;
            arr[1] = 1;
            arr[2] = 2;
            arr[3] = 3;
            arr[4] = 4;
    
            int sum = getSum(arr);
            System.out.println(sum);        // 10
        }
    
        public static int getSum(int[] arr){
            int sum = 0;
            for(int elem : arr){
                sum+=elem;
            }
            return sum;
        }
    }
    • 배열은 레퍼런슀 νƒ€μž…μœΌλ‘œ 데이터 크기가 κ°€λ³€μ μœΌλ‘œ λ³€ν•©λ‹ˆλ‹€.
    • λ˜ν•œ, new ν‚€μ›Œλ“œλ‘œ μƒμ„±ν•œ ν›„ 데이터가 μ €μž₯된 μ£Όμ†Œλ‘œ μ°Έμ‘°ν•˜λŠ” 데이터 νƒ€μž…μž…λ‹ˆλ‹€.

    2차원 λ°°μ—΄

    public class Main {
        public static void main(String[] args) {
    
            // 2차원 λ°°μ—΄ μ„ μ–Έ
            int[][] arr = new int[3][3];
    
            // 2차원 λ°°μ—΄ μ΄ˆκΈ°ν™”
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    arr[i][j] = 3*i+j;
                }
            }
    
            // 0 1 2
            // 3 4 5
            // 6 7 8
            for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                    System.out.print(arr[i][j]+" ");
                }
                System.out.println();
            }
        }
    }

    νƒ€μž… μΆ”λ‘ 

    • Java 10μ—μ„œ var ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ Local Variable Type Inferenceκ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    • νƒ€μž… 좔둠은 νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•Šμ•„λ„ μ»΄νŒŒμΌλŸ¬κ°€ λ³€μˆ˜μ˜ νƒ€μž…μ„ μœ μΆ”ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.
    • 기쑴의 μžλ°”μ—μ„œλŠ” 일반 λ³€μˆ˜μ—μ„œλŠ” νƒ€μž… 좔둠이 μ§€μ›λ˜μ§€ μ•Šκ³ , generic와 lambda μ‹μ—μ„œλ§Œ νƒ€μž…μΆ”λ‘ μ„ μ§€μ›ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
    • var ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— μ΄ˆκΈ°ν™”κ°€ ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λ©λ‹ˆλ‹€.
    public class Main {
        public static void main(String[] args) {
    
            // Java10 이후 νƒ€μž… μΆ”λ‘  지원
            var no_type_var = "string_var";
            System.out.println(no_type_var);
    
            // κΈ°μ‘΄ Java9 μ΄μ „μ—λŠ” νƒ€μž… λͺ…μ‹œ
            String string_var = "string_var";
            System.out.println(string_var);
    
        }
    }
    λ°˜μ‘ν˜•
Designed by Tistory.