ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 2-1. 자료형과 연산자
    CSE/Java 2015. 8. 6. 14:10

    2.7 콘솔 입력 

     2.7.1 BufferedReader 클래스 

      자바에서 입력 콘솔(키보드)은 System.in을 통해 입력을 합니다.

      BufferedReader 클래스는 문자 단위로 입력할 수 있는 문자 스트림을 생성합니다.



       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


      

      BufferedReader와 Scanner의 차이는 무엇일까요? 입력 값을 읽는 것은 같지만 자바 초창기부터 제공한 BufferedReader 클래스의 read 메서드나 readLine 메서드로 읽는 값을 무조건 String으로 반환합니다.

      BufferedReader 클래스의 기능을 업그레이드한 자바 1.5 이후부터 제공하는 Scanner 클래스는 입력한 자료형대로 읽습니다. BufferedReader 보다 훨씬 간단 명확하게 입력을 받을 수 있습니다.




     2.7.2 콘솔에서 문자읽기 Read 메서드

      BufferedReader 클래스는 read 메서드를 사용하여 한 개의 문자를 읽어 정수 값을 반환합니다.





        int read() throws IOException    // 오류가 발생할 때 IOException 던짐





     [예제 4] 키보드를 통해 문자 입력하기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    package exam1;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
    public class Hello {
        public static void main(String[] args) throws IOException {
            char c;
            int i;
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("문자 입력:('q' 입력하면 종료)");
            
            do {
                i = br.read();
                c = (char) i;
                System.out.print("입력한 문자: " + c + " ");
                System.out.println("입력한 문자의 정수 값: " + i);
            } while(c != 'q');
            
        }
    }
     
    cs








     2.7.3 콘솔에서 문자열 읽기 ReadLine 메서드

      BufferedReader 클래스는 readLine() 메서드를 사용하여 한 라인의 텍스트를 String으로 반환합니다.




       String readLine() throws IOException     





     [예제 5] 키보드를 통해 문자 입력하기

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    package exam1;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
    public class Hello {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String str;
            
            System.out.print("문자열 입력");
            str = br.readLine();
            System.out.println(str);
        }
    }
     
    cs









    2.8 연산자

     2.8.1 연산자

      연산자(operator)는 컴파일러에 의해 값을 평가하는 기능이 정의된 기호나 특수문자입니다.

      연산자에 사용하는 상수나 변수같은 데이터를 피연산자(operand)라고 부릅니다.


      자바는 아래와 같은 연산자를 제공합니다.



     우선순위

     기능별 분류 

     연산자 

     1 

    1차 연산자

     ()  []  .  -> 

    2

    단항 연산자

     -  ++  --  ~  !,  *  &  (자료형) 

     3 

    산술 연산자

     *  /  % 

     4 

     +  -

    5

    쉬프트 연산자

     <<  >>   >>> 

    6

    관계 연산자

     <  <=  >  >= 

    7

     ==   !=

    8

    비트 단위 연산자

     & 

    9

     ^

    10

     | 

    11

    논리 연산자

     && 

    12

     ||

    13

    조건 연산자

     ?: 

    14

    대입 연산자

     =  +=  -=  *=  /=  %=  >>=  <<=  &=  ^= 

    15

    콤마 연산자

     , 





     2.8.2 표현식(Expression)

      표현식은 어떤 값을 정의하고 표현하거나 약속된 기호로 피연산자와 연산자를 조합한 문장입니다.


      예문.

    1
    2
    = 5 + 9;
     
    cs



      위 표현식에서 +와 =는 연산자(operator)라고 부르며, 정수 5와 9, 변수 x를 피연산자(operand)라고 합니다. 위 표현식은 5와 9를 더한 값을 변수 x에 저장합니다. 모든 표현식은 최종 결과가 하나의 값을 갖습니다.







     2.8.3 대입 연산자(Assign Operator)

      대입 연산자는 등호(=) 기호로 표시하여, 기호 왼쪽에 있는 변수에 값을 대입(저장, 보관)합니다.


      예문.

    1
    2
    3
     
    int number = 114;
     
    cs

      



      위 예문에서 변수 number에 114를 대입합니다. 대입 연산자 = 의 왼쪽편에 오는 대상인 number를 lvalue라고 합니다.
      lvalue는 Left Value를 줄열서 표현한 것으로 데이터 값을 저장할 수 있는 명칭이여야 합니다.
      일반적으로 변수를 사용합니다. 상수는 값을 저장(대입)할 수 없으므로 사용할 수 없습니다.
      대입 연산자는 다중 대입이 가능하며, 이 경우 오른쪽에서 왼쪽으로 차례대로 처리하고 가장 늦게 수행합니다.








       예문.

    1
    2
    3
    4
     
    int a, b, c;
    = b = c = 15;
     
    cs







     2.8.4 산술 연산자(Arithmetic Operator)
      산술 연산자는 아래 표처럼 기본적인 사칙 연산자(+, -, *, /, %)를 제공합니다.

      

    연산자

    기능 

    예 

    설 명 

    +

      덧셈 

    x + y 

     x와 y를 더하기 

    -

      뺄셈 

    x - y 

     x와 y를 빼기 

    *

      곱셈 

    x * y 

     x와 y를 곱하기 

    /

      나눗셈 

    x / y 

     x와 y를 나눈 값 

    %

      나눗셈(나머지 값) 

    x % y 

     x를 y로 나눈 나머지 값 






      수식에서 b와 c를 곱하려면 bc로 표기하지만 프로그램에서는 bc로 표기하면 하나의 변수 bc로 인식합니다.
      이를 해결하기 위해 곱셈 연산자를 반드시 붙여줘야 합니다.



     [예제 6] 부동 소수점에서 BigDecimal 사용


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    package exam1;
     
    import java.math.BigDecimal;
     
    public class Hello {
        public static void main(String[] args) {
            System.out.println(3.00 - 2.10);
     
            BigDecimal b = new BigDecimal("3.00");
            BigDecimal b2 = new BigDecimal("2.10");
     
            System.out.println(b.toString());
            System.out.println(b2.toString());
     
            BigDecimal result = b.subtract(b2);
            double d = result.doubleValue();
     
            System.out.println(d);
     
            result = b.divide(b2, 3, BigDecimal.ROUND_CEILING);
            System.out.println("3.00 / 2.10 = " + result);
     
        }
    }
     
    cs








    2.8.5 축약 대입 연산자(Shorthand assignment operator)
     축약 대입 연산자는 아래 표처럼 연산자와 대입 연산자를 조합한 연산자입니다.
     변수의 현재 저장된 값은 사용하고 변경된 값을 동일한 변수에 다시 대입하는 경우가 많다. 이런 경우 대입 연산자 등호(=) 기호를 기준으로 좌측과 우측에 사용하는 변수가 같을 때 사용합니다.



    연산자

    기능 

    예 

    *=

    x *= y 

    x = x * y 

    /=

    x /= y 

    x = x / y 

    %=

    x %= y 

    x = x % y 

    +=

     x += y 

    x = x + y 

    -=

    x -= y 

    x = x - y 








     [예제 7] 축약 대입 연산자 사용



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package exam1;
     
    public class Hello {
        public static void main(String[] args) {
            int sum = 5;
            
            sum += 3;        // sum = sum + 3 과 동일
            
            System.out.println("결과 = " + sum);
     
        }
    }
     
    cs











    2.8.6 증가 연산자와 감소 연산자
     증감 연산자는 변수에 저장된 값을 1증가 또는 감소시키는 경우에 사용하며, 아래 표처럼 한 개의 피연산자만 가지며 피연산자의 앞이나 뒤에 올 수 있습니다.



    증감 연산자

    형  식 

    예 

    내  용 

    증가 연산자

    변수++ 

    x++ 

      연산을 처리한 후 x = x + 1 

    ++변수 

    ++x 

      x = x + 1을 처리 한 후 연산 처리 

    감소 연산자

    변수-- 

    y-- 

      연산을 처리한 후 y = y - 1 

    --변수 

    --y 

      y = y - 1을 처리 한 후 연산처리 






     증감 연산자는 변수 이름 앞에 붙는 전위 방식(prefix)과 변수 이름 뒤에 붙이는 후위 방식(postfix)로 구분됩니다.
     

     [예제 8] 증감 연산자 사용

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    package exam1;
     
    public class Hello {
        public static void main(String[] args) {
     
            int a = 0;
            System.out.println(++a);
            System.out.println(+++ ++a);
            
            int b = 0;
            System.out.println(b++);
            System.out.println(b++ + b++);
     
        }
    }
     
    cs














    2.8.7 캐스트 연산자
     캐스트 연산자는 어떤 자료형의 값을 다른 자료형의 값으로 강제로 변환합니다.




     (자료형) 변수 또는 상수
      ex)  (float)  div






     소괄호 속에 변환할 자료형을 명시(explicit)하면 명시한 자료형의 값으로 변환합니다.
     캐스트 연산자는 자료형끼리 자동으로 자료형 변환할 수 없거나, 강제적으로 자료형을 변환시켜야 할 필요가 있을 때 사용합니다.
     즉, 변수의 자료형을 마음대로 변환할 수 있으므로 편리하고 유연한 코드 작성을 할 수 있습니다.




     [예제 9] 캐스트 연산자 사용



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    package exam1;
     
    public class Hello {
        public static void main(String[] args) {
     
            int x = 6;
            int y = 4;
            double div;
            char ch = (char97.29;
            
            System.out.println(ch);
            
            div = x / y;
            
            System.out.println((double) x / (double) y);
            System.out.println(x % y);
            System.out.printf("%d / %d = %.3f\n", x, y, (double) x / (double) y);
            System.out.printf("%d / %d = %.2f\n", x, y, div);
            
        }
    }
     
    cs











     2.8.8 비트 단위 논리 연산자
      비트(bit)는 2 진수를 의미하며 비트 단위 연산자는 각 비트끼리 연산하기 위한 연산자입니다.
      숫자를 0과 1로 구성된 2진수로 표현한 후 각 자릿수의 비트 단위로 논리 조작하여 결과가 0 또는 1이 되는 연산자 비트 단위로 표현한 것입니다.
      왜 비트 단위 조작 연산자가 필요할까요? 그 이유는 임베디드 시스템, 게임, 글꼴 제작용 편집기, 암호, 하드웨어 디바이스를 제어하기 위해서 입니다. 하드웨어 제어용 바이트는 각 비트마다 특별한 기능을 처리하는 정보가 들어있게 됩니다. 이를 조작하므로 여러 기능을 처리할 수 있습니다.

      비트 단위 논리 연산자는 아래 표처럼 비트 단위 보수(~), 곱(&), 합(|), 베타적 논리 합(^)을 제공합니다.




    비트 연산자

    예 문 

    내  용 

    ~

    ~x 

       1의 보수

       연산 결과는 x 가 0이면 1, 1이면 0으로 변경 

    &

    x & y 

       x와 y의 비트 단위 곱(AND)

       연산 결과는 모두 1이면 1, 그 이외는 0 

    |

    x | y 

       x와 y의 비트 단위 합(OR)

       연산 결과는 모두 0이면 0, 그 이외는 1 

    ^

    x ^ y 

       x와 y의 비트 단위 베타적 논리 합(XOR)

       연산 결과는 각 비트가 다르면 1 
















     2.8.9 shift 연산자
      shift 연산자는 아래 표처럼 <<와 >>, >>> 을 사용합니다. 정수 값을 2 진수로 변환한 후 각 자릿수의 비트 단위로 왼쪽이나 오른쪽으로 이동시킵니다.


    연 산 자

    예 문 

    내  용 

    <<

    x << n 

       x의 값을 2진수로 변환한 후 n 비트 왼쪽으로 이동

       이동된 빈자리는 0으로 채움 

    >>

    x >> n 

       x의 값을 2진수로 변환한 후 n 비트 오른쪽으로 이동

       최상위 비트는 시피트 전의 값을 채우고, 이동된 빈자리는 0으로 채움 

    >>>

    x >>> n 

       x의 값을 2진수로 변환한 후 n 비트 오른쪽으로 이동

       최상위 비트는 0을 채우고, 이동된 빈자리는 0으로 채움 









     [예제 10] 비트연산과 시프트 연산자 사용


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    package exam1;
     
    public class Hello {
        public static void main(String[] args) {
     
            byte x = 35;
            byte y = 37;
            
            System.out.println(x & y);
            System.out.println(x | y);
            System.out.println(x ^ y);
            System.out.printf("%x\n", ~x);
            
            byte a = 15;
            byte b = -16;
            
            System.out.println(a << 2);
            System.out.println(a >> 2);
            System.out.printf("%x\n", b >> 2);
            System.out.printf("%x\n", b >>> 2);
        }
    }
     
    cs
     







    * 이 포스팅은 강성수 저 'Java 홀릭'을 참고하여 작성했습니다.


    댓글

Designed by Tistory.