ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] μ—°μ‚°μž (μ‚°μˆ , λΉ„νŠΈ, 관계, 논리)
    Android/Java 2021. 1. 12. 21:08
    λ°˜μ‘ν˜•
    • 이 글은 "온라인 μžλ°” μŠ€ν„°λ”” λ‚΄μš©"을 μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.

    μ‚°μˆ  μ—°μ‚°μž

    • μ‚°μˆ  μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μž(κΈ°λ³Έ 데이터)에 λŒ€ν•΄ κ°„λ‹¨ν•œ μ‚°μˆ  연산을 μˆ˜ν–‰ν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆλŠ” μ—°μ‚°μžμž…λ‹ˆλ‹€.
    • 이 μ—°μ‚°μžλŠ” ν•˜λ‚˜ λ˜λŠ” λ‘κ°œμ˜ ν”Όμ—°μ‚°μžμ— μ μš©ν•  수 μžˆλŠ” μ—°μ‚°μžμž…λ‹ˆλ‹€.
    • intν˜• νƒ€μž…λ³΄λ‹€ λ²”μœ„κ°€ μž‘μ€ 데이터 μ—°μ‚° μ‹œ intν˜•μœΌλ‘œ λ³€ν™˜ ν›„ 연산을 ν•©λ‹ˆλ‹€.
    • intν˜• νƒ€μž…λ³΄λ‹€ 큰 λ²”μœ„μ˜ 데이터가 μžˆλ‹€λ©΄ μ—°μ‚° κ²°κ³ΌλŠ” intν˜• 보닀 큰 νƒ€μž…μ΄ λ°˜ν™˜λ©λ‹ˆλ‹€.

    https://www.geeksforgeeks.org/java-arithmetic-operators-with-examples/

    public class Main {
        public static void main(String[] args) {
    
            int num1 = 500;
            int num2 = 200;
    
            System.out.println(num1+num2);      // + operator -> 700
            System.out.println(num1-num2);      // - operator -> 300
            System.out.println(num1*num2);      // * operator -> 100000
            System.out.println(num1/num2);      // / operator -> 2
            System.out.println(num1%num2);      // % operator -> 100
    
            num1++;     // 501
            num2--;     // 199
    
            /**
            byte byte1 = 10;
            byte byte2 = 20;
    
            byte result = byte1+byte2;      // 컴파일 μ—λŸ¬ byte1κ³Ό byte2λŠ” int둜 λ³€ν™˜ ν›„ μ—°μ‚° μ‹€ν–‰
             **/
    
            int num3 = 10;
            float float1 = 20.0F;
    
            System.out.println(num3+float1);        // 30.0
            System.out.println(num3-float1);        // -10.0
            System.out.println(num3*float1);        // 200.0
            System.out.println(num3/float1);        // 0.5
            System.out.println(num3%float1);        // 10.0
        }
    }

    λΉ„νŠΈ μ—°μ‚°μž

    • λΉ„νŠΈ μ—°μ‚°μžλŠ” 데이터λ₯Ό λΉ„νŠΈ λ‹¨μœ„λ‘œ 연산을 ν•˜κΈ° λ•Œλ¬Έμ— 0κ³Ό 1둜 ν‘œν˜„μ΄ κ°€λŠ₯ν•œ μ •μˆ˜ νƒ€μž…λ§Œ λΉ„νŠΈ 연산이 κ°€λŠ₯ν•©λ‹ˆλ‹€
    • λΉ„νŠΈ μ—°μ‚°μžλŠ” κΈ°λŠ₯에 따라 λΉ„νŠΈ 이동 μ—°μ‚°μž, λΉ„νŠΈ λ…Όλ¦¬μ—°μ‚°μžλ‘œ κ΅¬λΆ„ν•©λ‹ˆλ‹€.
    • μ°Έμ‘°(https://coding-factory.tistory.com/521)

    λΉ„νŠΈ 이동 μ—°μ‚°μž

    • x << y : μ •μˆ˜ x의 각 λΉ„νŠΈλ₯Ό y만큼 μ™Όμͺ½μœΌλ‘œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

    • x >> y : μ •μˆ˜ x의 각 λΉ„νŠΈλ₯Ό y만큼 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

    • x >>> y : μ •μˆ˜ x의 각 λΉ„νŠΈλ₯Ό y만큼 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

      public class Main {
        public static void main(String[] args) {
      
            int num1 = 2;
            int num2 = 3;
      
            // 00000000 00000000 00000000 00000010      μ™Όμͺ½μœΌλ‘œ 3λΉ„νŠΈ 이동 (였λ₯Έμͺ½μ€ 0으둜 채움)
            // 00000000 00000000 00000000 00010000
            System.out.println(2<<3);       // 16
      
            // 00000000 00000000 00000000 00010000      였λ₯Έμͺ½μœΌλ‘œ 3λΉ„νŠΈ 이동 (μ™Όμͺ½μ€ μ΅œμƒμœ„ λΆ€ν˜ΈλΉ„νŠΈμ— 맞게 채움)
            // 00000000 00000000 00000000 00000010
            System.out.println(16>>3);      // 2
      
            // 11111111 11111111 11111111 11110000      였λ₯Έμͺ½μœΌλ‘œ 3λΉ„νŠΈ 이동
            // 11111111 11111111 11111111 11111110
            System.out.println(-16>>3);     // -2
      
            // 11111111 11111111 11111111 11110000      였λ₯Έμͺ½μœΌλ‘œ 3λΉ„νŠΈ 이동 (μ™Όμͺ½μ€ μ΅œμƒμœ„ λΆ€ν˜ΈλΉ„νŠΈκ°€ μ•„λ‹Œ 무쑰건 0으둜 채움)
            // 00011111 11111111 11111111 11111110
            System.out.println(-16>>>3);    // 536870910
        }
      }

    λΉ„νŠΈ 논리 μ—°μ‚°μž

    • &(AND) : 두 λΉ„νŠΈ λͺ¨λ‘ 1일 κ²½μš°μ—λ§Œ μ—°μ‚° κ²°κ³Όκ°€ 1

    • |(OR) : 두 λΉ„νŠΈ 쀑 ν•˜λ‚˜λ§Œ 1일 κ²½μš°μ—λ§Œ μ—°μ‚° κ²°κ³Όκ°€ 1

    • ^(XOR) : 두 λΉ„νŠΈμ€‘ ν•˜λ‚˜λŠ” 1이고 λ‹€λ₯Έ ν•˜λ‚˜κ°€ 0일 κ²½μš°μ—λ§Œ μ—°μ‚°κ²°κ³Όκ°€ 1

    • ~(NOT) : λΉ„νŠΈ λ°˜μ „(보수)

    public class Main {
        public static void main(String[] args) {
    
            int num1 = 15;      // 00001111
            int num2 = 25;      // 00011001
    
            System.out.println(num1&num2);      // AND μ—°μ‚°μž : 00001001 (9)
            System.out.println(num1|num2);      // OR μ—°μ‚°μž : 00011111 (31)
            System.out.println(num1^num2);      // XOR μ—°μ‚°μž : 00010110 (22)
            System.out.println(~num1);          // NOT μ—°μ‚°μž : 11110000 (-16)
        }
    }

    관계 μ—°μ‚°μž

    • μ’Œν•­κ³Ό μš°ν•­μ„ λΉ„κ΅ν•˜μ—¬ boolean 값을 λ°˜ν™˜ν•˜λŠ” μ—°μ‚°μžλ₯Ό 관계 μ—°μ‚°μžλΌκ³  ν•©λ‹ˆλ‹€.

    • > : μ’Œν•­μ΄ μš°ν•­λ³΄λ‹€ 크면 true, μ•„λ‹ˆλ©΄ false

    • < : μš°ν•­μ΄ μ’Œν•­λ³΄λ‹€ 크면 true, μ•„λ‹ˆλ©΄ false

    • >= : μ’Œν•­μ΄ μš°ν•­λ³΄λ‹€ ν¬κ±°λ‚˜ κ°™μœΌλ©΄ true, μ•„λ‹ˆλ©΄ false

    • <= : μš°ν•­μ΄ μ’Œν•­λ³΄λ‹€ ν¬κ±°λ‚˜ κ°™μœΌλ©΄ true, μ•„λ‹ˆλ©΄ false

    • == : μ’Œν•­κ³Ό μš°ν•­μ˜ 값이 κ°™μœΌλ©΄ true, μ•„λ‹ˆλ©΄ false

    public class Main {
        public static void main(String[] args) {
    
            int num1 = 10;
            int num2 = 20;
    
            if(num1>num2){
                System.out.println(num1);       // 좜λ ₯
            } else{
                System.out.println(num2);
            }
    
            if(num1 == num2){
                System.out.println("값이 κ°™μŠ΅λ‹ˆλ‹€");
            }else{
                System.out.println("값이 λ‹€λ¦…λ‹ˆλ‹€");      // 좜λ ₯ 
            }
        }
    }

    논리 μ—°μ‚°μž

    • && : 두 항이 λͺ¨λ‘ 참일 κ²½μš°μ—λ§Œ 참을 λ°˜ν™˜ν•©λ‹ˆλ‹€

    • || : 두 ν•­ 쀑 ν•˜λ‚˜λ§Œ 참이더라도 참을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

    • ! : 단항 μ—°μ‚°μžλ‘œ 참을 κ±°μ§“μœΌλ‘œ 거짓을 참으둜 λ°”κΏ‰λ‹ˆλ‹€.

    public class Main {
        public static void main(String[] args) {
    
            boolean check1 = true;
            boolean check2 = false;
    
            if(check1 && check2){
                System.out.println("λ‘˜λ‹€ μ°Έμž…λ‹ˆλ‹€");
            }
            else{
                System.out.println("λ‘˜μ€‘ ν•˜λ‚˜λŠ” 참이 μ•„λ‹™λ‹ˆλ‹€");       // 좜λ ₯
            }
    
            if(check1 || check2){
                System.out.println("λ‘˜μ€‘ ν•˜λ‚˜λŠ” μ°Έμž…λ‹ˆλ‹€");          // 좜λ ₯
            }
            else{
                System.out.println("λ‘˜λ‹€ 참이 μ•„λ‹™λ‹ˆλ‹€");
            }
    
            if(!check2){
                System.out.println("μ°Έμž…λ‹ˆλ‹€");                   // 좜λ ₯ 
            }
            else{
                System.out.println("κ±°μ§“μž…λ‹ˆλ‹€");
            }
        }
    }

    instancof

    • μ°Έμ‘°λ³€μˆ˜μ˜ μΈμŠ€ν„΄μŠ€μ˜ μ‹€μ œ νƒ€μž…μ„ μ²΄ν¬ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ—°μ‚°μžμž…λ‹ˆλ‹€.

    • (μ°Έμ‘°ν˜•λ³€μˆ˜ instance of νƒ€μž…)은 μ΄ν•­μ—°μ‚°μžλ‘œ μ—°μ‚°κ²°κ³ΌλŠ” boolean 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

    • 결과값이 True이면, ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

    class Parent{ }
    class Child extends Parent{ }
    
    public class Main {
        public static void main(String[] args) {
    
            // 클래슀 μ°Έμ‘°λ³€μˆ˜ 
            Parent parent = new Parent();
            Child child = new Child();
    
            System.out.println(parent instanceof Parent);       // true
            System.out.println(child instanceof Parent);        // true
            System.out.println(parent instanceof Child);        // false
            System.out.println(child instanceof Child);         // true
    
            // λ°°μ—΄ μ°Έμ‘°λ³€μˆ˜
            int[] arr = new int[5];
            System.out.println(arr instanceof int[]);
        }
    }

    λŒ€μž… μ—°μ‚°μž

    • = : μ™Όμͺ½μ˜ λ³€μˆ˜μ— 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžλ₯Ό λŒ€μž…ν•©λ‹ˆλ‹€.

    • += : μ™Όμͺ½μ˜ λ³€μˆ˜μ˜ κ°’κ³Ό 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžλ₯Ό λ”ν•œ ν›„, μ™Όμͺ½μ˜ λ³€μˆ˜μ— λŒ€μž…ν•©λ‹ˆλ‹€.

    • -= : μ™Όμͺ½μ˜ λ³€μˆ˜μ˜ κ°’μ—μ„œ 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžλ₯Ό λΊ€ ν›„, μ™Όμͺ½μ˜ λ³€μˆ˜μ— λŒ€μž…ν•©λ‹ˆλ‹€.

    • /= : μ™Όμͺ½μ˜ λ³€μˆ˜μ˜ κ°’μ—μ„œ 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžλ₯Ό λ‚˜λˆˆ ν›„, μ™Όμͺ½μ˜ λ³€μˆ˜μ— λŒ€μž…ν•©λ‹ˆλ‹€.

    • κ·Έ 밖에도 %= , &= , |= , ^\ , <<= , >>= , >>>= λ‹€μ–‘ν•œ λŒ€μž… μ—°μ‚°μžκ°€ μžˆμŠ΅λ‹ˆλ‹€.

    public class Main {
        public static void main(String[] args) {
    
            int num1 = 10;       // λŒ€μž… μ—°μ‚°μž
            int num2 = 20;
    
            num1+=num2;
            System.out.println(num1);       // 30
    
            num1-=num2;
            System.out.println(num1);       // 10
    
            num1*=num2;
            System.out.println(num1);       // 200
    
            num1/=num2;
            System.out.println(num1);       // 10
        }
    }

    λžŒλ‹€μ‹μ΄λž€?

    • λžŒλ‹€μ‹μ΄λž€ "μ‹λ³„μž 없이 μ‹€ν–‰κ°€λŠ₯ν•œ ν•¨μˆ˜"둜 ν•¨μˆ˜λ₯Ό λ”°λ‘œ λͺ…μ‹œν•˜μ—¬ λ§Œλ“€μ§€ μ•Šκ³  μ½”λ“œν•œμ€„μ— ν•¨μˆ˜λ₯Ό μ¨μ„œ ν˜ΈμΆœν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
    • Java8 λΆ€ν„° ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄ λžŒλ‹€μ‹μ„ λ„μž…ν•˜μ˜€κ³  그둜 인해 기쑴의 μ½”λ“œ νŒ¨ν„΄μ΄ 많이 λ‹¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€.
    • (λ§€κ°œλ³€μˆ˜, ... ) -> { μ‹€ν–‰λ¬Έ ..} λ‹€μŒκ³Ό 같이 λžŒλ‹€μ‹μ„ 주둜 μ‚¬μš©ν•˜κ³  λ§€κ°œλ³€μˆ˜μ—λŠ” λ”°λ‘œ νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.
    • μžλ°”λŠ” 독립적인 λ©”μ†Œλ“œλ§Œμ„ μƒμ„±ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ— 읡λͺ…객체λ₯Ό μ΄μš©ν•΄μ„œ λ§Œλ“­λ‹ˆλ‹€. κ·Έλž˜μ„œ 읡λͺ… ν΄λž˜μŠ€λΌκ³ λ„ λΆ€λ¦…λ‹ˆλ‹€.
    • μ°Έμ‘°(https://coding-factory.tistory.com/265)
    @FunctionalInterface
    interface MyInterface{
        void print(String name);
    }
    public class Main {
        public static void main(String[] args) {
    
            // Java8 이전 기쑴의 읡λͺ… 클래슀 생성 방식
            MyInterface mi = new MyInterface() {
                @Override
                public void print(String name) {
                    System.out.println("Java8 μ΄μ „μ˜ "+name+"μž…λ‹ˆλ‹€.");
                }
            };
            mi.print("읡λͺ… 클래슀");
    
            MyInterface mi2 = (name)->{System.out.println("Java8 μ΄ν›„μ˜ "+name+"μž…λ‹ˆλ‹€");};
            mi2.print("λžŒλ‹€μ‹");
        }
    }
    • @FunctionalInterface λ‹€μŒ Annotation은 ν•¨μˆ˜κ°€ ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•˜λŠ” Interfaceλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

    μ‚Όν•­μ—°μ‚°μž

    • if, else ꡬ문으둜 λΆˆν•„μš”ν•˜κ²Œ μ½”λ“œκ°€ κΈΈμ–΄μ§€λŠ” 단점을 ν•΄κ²°ν•˜κΈ° μœ„ν•œ μ—°μ‚°μžμž…λ‹ˆλ‹€.
    • (쑰건문) ? μ°Έ : 거짓 λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜μ—¬ 쑰건문이 참일 경우 μ™Όμͺ½μ˜ μ½”λ“œκ°€, 거짓일 λ•ŒλŠ” 였λ₯Έμͺ½μ˜ μ½”λ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
    • μ‚Όν•­μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œμ˜ 라인 μˆ˜λŠ” μ€„μ–΄λ“€μ—ˆμ„μ§€ λͺ°λΌλ„ 컴파일 속도가 λΉ¨λΌμ§€λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.
    • μ‚Όν•­μ—°μ‚°μžλ₯Ό λ‚¨λ°œν•˜κ²Œ 되면 μ½”λ“œμ˜ 가독성이 떨어지기 λ•Œλ¬Έμ— μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    public class Main {
        public static void main(String[] args) {
    
            int num1 = 20;
            int num2 = 10;
    
            // μ‚Όν•­μ—°μ‚°μž μ‚¬μš© μ•ˆν•¨ 
            int num3;
            if(num1>num2){
                num3 = num1;
            }
            else{
                num3 = num2;
            }
    
            // μ‚Όν•­μ—°μ‚°μž μ‚¬μš©
            int num4 = (num1>num2)?num1 : num2;
        }
    }

    μ—°μ‚°μž μš°μ„ μˆœμœ„

    https://toma0912.tistory.com/66/


    Java13 switch λ³€ν™”

    • break μœ„μΉ˜ 결과에 따라 μ‹€ν–‰κ²°κ³Όκ°€ λ‹¬λΌμ§€λŠ”λ° μ‹€μˆ˜ νŒλ‹¨μ€ μ–΄λ €μš΄ 점을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ°•ν™”λœ switch ν‘œν˜„μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
    • μ—¬λŸ¬ 쑰건에 따라 ','둜 κ΅¬λΆ„ν•˜μ—¬ ν•œ λ²ˆμ— μ²˜λ¦¬ν•  수 있으며, 기쑴의 : λŒ€μ‹  Java 12λΆ€ν„°λŠ” -> 둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • ν‘œν˜„μ‹μœΌλ‘œ λ³€κ²½λ˜μ—ˆκΈ° 떄문에 결과값을 λ°˜ν™˜ λ°›λŠ” ν˜•μ‹μœΌλ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • yield ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°˜ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    public class Main {
        public static void main(String[] args) {
    
            String today = "MON";
            switch (today){
                case "MON":
                case "TUE":
                case "WED":
                case "THUR":
                case "FRI":
                    System.out.println(today+" is Weekday");
                    break;
                case "SAT":
                case "SUN":
                    System.out.println(today+" is Weekend");
                    break;
            }
    
            // 결과값을 받을 수 μžˆλ‹€. 
            String day = switch (today){
                    case "MON","TUE","WED","THUR","FRI"->"Weekday";
                    case "SAT","SUN"->"Weekend";
                default -> throw new IllegalStateException("Unexpected value: " + today);
            };
            System.out.println();
        }
    }
    λ°˜μ‘ν˜•
Designed by Tistory.