ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 2. 자료형과 연산자
    CSE/Java 2015. 8. 5. 15:55

    2.1 자바 프로그램 기본 구조

     2.1.1 간단한 기본 프로그램

      자바 프로그램의 구조는 다음과 같습니다.



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package exam1;
     
    public class Hello {
        public static void main(String[] args) {
            // 1. 입력(변수 선언 후 변수 값 저장 또는 키보드에서 입력, 파일등에서 읽어오기)
            // 2. 처리(연산 또는 메서드 정의하여 작업)
            // 3. 출력(처리 결과를 화면 등에 표시)
        }
    }
     
    cs



      모든 Java 파일을 실행하기 위해서는 main 메서드가 필요합니다. main 메서드가 존재하지 않으면 컴파일러는 에러 메시지를 발생시킵니다.




     [예제 1] 정수, 실수, 단일 문자를 저장할 3개의 변수를 만들고 값을 저장한 후, 정수와 실수를 덧셈하여 출력하라


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    package exam1;
     
    public class Hello {
        public static void main(String[] args) {
            
            int x; // 정수 값을 저장할 변수
            double y, z; // 실수 값을 저장할 변수 
            char ch; // 문자를 저장할 변수
            
            x = 312;
            y = 5.98;
            z = x + y; // 정수와 실수 값을 더한다
            ch = 'M';
            
            System.out.println("x는 " + x + " 입니다.");
            System.out.println("y는 " + y + " 입니다.");
            System.out.println("z는 " + z + " 입니다.");
            System.out.println("ch는 " + ch + " 입니다.");
        }
    }
     
    cs





    출력 결과.








    2.2 식별자

     2.2.1 식별자

      식별자(identifier)는 클래스, 변수, 메서드 등에 붙이는 이름입니다.

      식별자는 다음 규칙을 준수하여 작성합니다.



     1. 첫 번째 문자는 영문자나 밑줄(_) 또는 달러 기호($)로 시작해야 한다.

     2. 두 번째부터는 영문자, 숫자, 밑줄_문자, 달러 기호를 사용할 수 있다.

     3. 예약어(keyword)는 사용할 수 없다.

     4. true, false, null은 사용할 수 없다. 



      영문자의 대소문자를 구별합니다. 식별자는 해당 항목을 잘 표현할 수 있는 적합한 이름을 사용하도록 합니다. 

      변수 이름, 메서드 이름, 클래스 이름은 다음 사항을 권장합니다.

       

     

      1. 변수와 메서드 이름의 첫 글자는 소문자로 한다. 여러 단어로 복합된 경우 소문자 낙타표기법(camelcase)응 사용하는 것이 효율적이다.

      예를 들어, count_of_man 처럼 각 단어 사이에 _를 사용하여 두 단어를 분리하는 것 보다 CountOfMan처럼 각 단어의 첫 번째 글자를 대문자로 사용하는 것도 좋지만 소문자 낙타표기법은 countOfMan처럼 각 단어의 첫 번째 글자를 제외한 각 단어의 첫 글자를 대문자로 사용하는 것이다.


      2. 클래스 이름의 첫 글자는 대문자로 한다. 여러 단어로 복합된 경우 각 단어의 첫 글자를 대문자로 사용하여 가독성(readability)을 높인다.


      3. 상수 이름은 모두 대문자로 사용한다. 여러 단어로 이루어진 경우 '_' 로 구분한다.





     2.2.2 예약어(Keyword)

      예약어(keyword)는 미리 용도가 정해진 이름으로 아래 표처럼 제공되며 식별자로 사용할 수 없습니다.



    abstractcontinuefornewswitch
    assert***defaultgoto*packagesynchronized
    booleandoifprivatethis
    breakdoubleimplementsprotectedthrow
    byteelseimportpublicthrows
    caseenum****instanceofreturntransient
    catchextendsintshorttry
    charfinalinterfacestaticvoid
    classfinallylongstrictfp**volatile
    const*floatnativesuperwhile
    * not used
    ** added in 1.2
    *** added in 1.4
    **** added in 5.0







    2.3 자료형

     2.3.1 기본 자료형

      프로그램은 데이터를 가지고 작업을 합니다. 변수는 자료형(data type)을 선언하여 생성합니다. 컴파일러는 자료형에 따라 메모리 공간을 할당하게 됩니다.

      자바의 자료형은 크게 기본형(Primitive)과 참조형(Reference) 두 가지로 나눌 수 있습니다.

      




    분 류

    자 료 형 

    설   명 

     정수

    byte 

    8비트 정수, 값의 범위는 -128 ~ 127 까지     ex) byte num; 

    short 

    16비트 정수, 값의 범위는 -32,768 ~ 32,767 까지      ex) short num; 

    int 

    32비트 정수(4바이트) 값의 범위는 -2,147,483,646 ~ 2,147,483,647 까지    ex) int num; 

    long 

    64비트 정수( 값의 범위는 -9223372036854775808 ~ 9223372036854775807 ex) long num; 

     실수

    float 

    단정도 부동 소수점(소수점 이하 7자리까지), 32비트 실수

    값의 범위는 10^-37 ~ 10^38까지      

    double 

    배정도 부동 소수점(소수점 이하 15자리까지), 64비트 실수

    값의 범위는 10^-307 ~ 10^308까지   

     문자

    char 

    하나의 단일 문자(유니코드), 16비트 문자  

     논리

    boolean 

    8 비트 논리형 리터럴, true 또는 false 





     2.3.2 변수

      변수는 데이터를 저장하는 메모리 공간으로 한 개의 데이터를 표현합니다.



      

    1
    2
    3
    4
    5
    int data;        
     
    data = 24;
    data = 88;
     
    cs



     변수의 선언은 아래와 같이 두 가지 방식으로 선언이 가능합니다.



      자료형    변수 이름;                 ex)   int value;

      자료형    변수 이름 = 초기 값;      ex)   int value = 1000;







    2.4 정수형과 부동 소수점형

     2.4.1 정수형

      정수 데이터는 기본으로 int를 사용합니다. 정수 데이터를 저장하기 위한 자료형은 byte, short, int, long이 제공됩니다.

      부동소수점 수 데이터는 기본으로 double을 사용합니다. 부동소수점 수형은 float, double이 제공됩니다. float 보다 double이 더 정확합니다.

      숫자 뒤에 f나 F가 붙으면 float로 인식하고 d나 D가 붙으면 double로 인식합니다. 예로 8.9는 double 형이고, 8.9f는 float형 입니다.

      각 자료형마다 저장할 수 있는 작은 값 보다 적은 값을 저장할 때 언더플로우(underflow)가 발생하고 가장 큰 값보다 큰 값을 저장할 때 오버플로우(overflow)가 발생합니다.


      자바에서는 큰 수를 보기 편하도록 밑줄 문자(_)를 사용하여 다음과 같이 표현할 수 있습니다.


    1
    2
    3
     
    long number = 254_300_000;
     
    cs






    2.5 문자와 자료형

     2.5.1 문자와 자료형

       컴퓨터에서 사용하는 모든 문자와 숫자, 구두점(.)과 같은 기호들은 그대로 처리할 수 없기 때문에 문자는 코드 정수로 처리합니다.

       컴퓨터는 문자를 처리하기 위해 각 문자들을 정수로 대응하여 표현하도록 규정하여 사용합니다. 일반적으로 유니코드를 사용합니다.


       C 언어는 문자 인코딩 방식이 여러 가지이지만 자바는 유니코드 방식만을 사용합니다.

       문자 자료형은 char를 사용합니다.

       문자는 작은 따옴표(' ')안에 한 개의 문자를 넣어 표기합니다.



    1
    2
    3
     
    char character = 'A'// char 변수 character에 문자 A 저장
    String str = "A"// 큰 다옴표안에 표기 했으므로 문자열 A
    cs

      





     2.5.2 유니코드

       컴퓨터는 2진수를 이용해서 인식하므로 모든 문자나 숫자, 구두점(.)과 같은 기호들은 그대로 처리할 수 없습니다. 따라서 컴퓨터는 문자를 처리하기 위해 각 문자들을 정수로 대응(mapping)하여 표현하도록 규정하여 사용합니다.

       문자를 2진 표현으로 전환한느 하는 것을 인코딩(encoding)이라고 합니다.

       16비트 유니코드는 \u로 시작하며, '\u0000' 부터 '\u007F'까지 범위를 갖는 4개의 16진수로 표현된 두 바이트를 갖습니다.


       아래 표는 사용빈도가 높은 ASCII 코드표입니다.

    ASCII 코드 

    10 진수 

    내  용 

    0 ~ 9

    48 ~ 57 

    숫자 

    A ~ Z

    65 ~ 90 

    영문 대문자 

    a ~ z

    97 ~ 122 

    영문 소문자 












     2.5.3 특수 문자 표현: 이스케이프 표기법

       큰 따옴표는 문자열을 표현하는 데 쓰입니다. 만약 큰 따옴표 자체를 출력하고 싶다면 이 규칙을 피해갈 필요가 있습니다.


       아래 특수문자들을 입력할 방법으로 백슬래시(\) 바로 뒤에 약속한 제어 문자를 표시하는 확장열(escape sequence)이라는 표기법을 사용한다.




    시퀀스

    유니코드 

    내   용 

    \b

    \u0008 

     커서를 한 칸 뒤로 이동(Backspace) 

    \t

    \u0009  

     Tab키 기능만큼 커서 이동(Tab) 

    \n

    \u000A 

     커서를 다음 라인으로 이동(Line Feed) 

    \f

    \u000C  

     폼 피드(Form Feed), 다음 페이지로 이동 

    \r

    \u000B 

     커서를 줄의 처음 위치로 이동(CR: Carriage Return) 

    \"

    \u0022  

     큰 따옴표 " 

    \'

    \u0027  

     작은 따옴표 ' 

    \\

    \u005C  

     역슬래시(Backslash) 






     2.5.4 문자열과 자료형

       문자열(string)은 단어, 문장, 이름, 주소등과 같이 단일문자들이 두 개 이상 연속적으로 결합한 문자들의 집합입니다. 

       문자열은 따옴표(" ")속에 넣어 표시합니다.

       문자열 표현은 기본형 char을 사용할 수 없고 참조 자료형 String을 사용합니다.

    1
    String 변수 = "문자열"
    cs


       






    2.6 Scanner 클래스를 이용한 콘솔 입력

     2.6.1 Scanner 클래스

       Scanner 클래스는 단락 문자의 패턴(구문 분석하는 정규 표현)을 사용해 입력받아 토큰을 분할 할 수 있는 텍스트 스캐너입니다. 기본으로 공백 문자를 기준으로 토큰을 분리합니다. 

       자바에서 키보드로 입력하기 위해 다음과 같이 정의합니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import java.util.Scanner;
     
    Scanner scan = new Scanner(System.in);
     
    String s = scan.next();
    int data = scan.nextInt();
    long lo = scan.nextLong();
    float f = scan.nextFloat();
    double db = scan.nextDouble();
    String st = scan.nextLine(); // 키보드에서 한 라인 전체의 문자열(\n 포함) 입력
    cs



       객체는 new 연산자를 사용하여 생성합니다. 즉, Scanner 형의 객체가 만들어 집니다.

       Scanner input 구문은 Scanner형의 변수 input을 선언한 것입니다.


       Scanner는 키보드에서 입력한 데이터를 공백(스페이스바 키, Tab 키와 Enter 키) 단위로 구분하여 읽습니다.

       예를 들어, 키보드에 "I am a good boy"를 입력하면 공백으로 구분하므로 "I", "am", "a", "good", "boy"으로 5개의 데이터(토큰)으로 구분합니다.


        useDelimiter 메서드는 Scanner 클래스와 함께 사용하면 유용한 메서드 입니다.


       

     [예제 2] 스캐너에 문자열을 넣은 후 구분 문자로 토큰 분리하기



    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    package exam1;
     
    import java.util.Scanner;
     
    public class Hello {
        public static void main(String[] args) {
     
            String content = "<2015-08-01> Journey Day. <Journey Day>" + "<2015-08-15> 광복절 <독립기념일>";
     
            Scanner scan = new Scanner(content);
            Scanner sc = scan.useDelimiter("\\s*[<>]\\s*");
     
            while (sc.hasNext()) {
                System.out.printf("[%s|%s|%s]%n", sc.next(), sc.next(), sc.next());
     
                if (sc.hasNext())
                    sc.next();
            }
     
            sc.close();
     
            String text = "a -> b; \n" + "c -> d\n";
            Scanner sc2 = new Scanner(text).useDelimiter("\\s*->\\s*|;\\s*");
     
            while (sc2.hasNext()) {
                System.out.println(sc2.next());
            }
     
            sc2.close();
     
            String list = "Big Dream 888 99";
     
            Scanner s = new Scanner(list).useDelimiter("\\s+");
            System.out.printf("%s, %s, %d, %d\n", s.next(), s.next(), s.nextInt(), s.nextInt());
     
            s.close();
     
            scan.close();
     
        }
    }
     
    cs






     [예제 3] 키보드에서 입력한 데이터를 다양한 구분문자로 토큰 분리


    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    package exam1;
     
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
     
    public class Hello {
        public static void main(String[] args) {
            String name;
            int kor, eng;
            Scanner scan = new Scanner(System.in);
     
            System.out.println("이름, 국어, 영어");
     
            name = scan.next();
            kor = scan.nextInt();
            eng = scan.nextInt();
     
            System.out.println();
            System.out.print("이름: " + name);
            System.out.print(" 국어: " + kor);
            System.out.print(" 영어: " + eng);
            System.out.println();
            scan.close();
            
     
            String input = "9 8 7 6 5 4 3     2 1 0 good, Excellent, very good";
            Scanner sc = new Scanner(input).useDelimiter("(?<=\\d)[\\s,]+|\\s*,\\*");
            System.out.println("Token: ");
     
            while (sc.hasNext()) {
                System.out.print("  ." + sc.next() + ".");
            }
     
            System.out.println();
            sc.close();
     
            try {
                File csv = new File("C://work//java//data.csv");
                Scanner key = new Scanner(csv);
                key.useDelimiter("[,\\n]");
     
                while (key.hasNext()) {
                    System.out.printf("%s \t", key.next());
                    System.out.printf("%s \t", key.next());
                    System.out.printf("%d \t", key.nextInt());
                    System.out.printf("%.1f\n", Float.parseFloat(key.nextLine().replaceAll("[\n\r,]""")));
                }
                key.close();
                
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
     
    cs









     data.csv 파일 내용은 메모장을 사용하여 아래와 같이 입력하여 C:\work\java 폴더에 저장한 후 위 프로그램을 실행시킵니다.


    박근령,90,100,91.1

    박근혜,84,95,81.5

    박정희,100,100,100.0






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

    댓글

Designed by Tistory.