ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 변수(Variable)
    언어/JAVA 2022. 9. 7. 17:00

    -프로그램 실행 중 발생/입력되는 데이터를 저장할 목적으로 만든 임시 저장장소

    -프로그램 실행명령시 생성되고, 프로그램 종료시 소멸됨

    변수의 이름을 만드는 규칙

    1. 인터넷 사이트 회원가입시 만드는 아이디 이름 규칙과 비슷

    2. 영문과 숫자, 그리고 일부 특수문자(_)를 섞어서 사용가능함

    3. 첫글자는 반드시 영문

    4. 중간에 공백이 있을 수 없음

    5. 너무 짧지 않게 약간의 의미를 부여해서 이름 생성하는 편

    6. 변수의 이름 너무 짧으면 변수 갯수가 많아졌을 때 서로 용도를 구분하기 어려움

    7. 변수의 이름 너무 길면 사용할 때마다 긴 이름을 타이핑해야하는 불편함이 있음

    8. 두가지 의미의 단어가 조합되어 변수 이름이 만들어 진다면 첫단어는 소문자로, 두번째 단어 첫글자 대문자로 생성

        ex)덧셈의 결과 총 저장할 변수 이름: plusResult

    9. 변수는 자료형(정수, 실수, 문자)에 따라 만드는 명령이 달라짐

    -int: 정수, double: 실수, String: 문자 등

    -int a; → 정수형 변수 a가 생성

    -double b; → 실수형 변수 b

    -String c; → 문자형 변수 c

    int a; //a라는 이름의 변수를 생성(int->정수를 저장하기 위한 변수)
    int b;
    int plusResult, minuResult, multiplyResult; //한번에 여러변수를 생성(정수를 저장하기 위한 변수)
    double divideResult; //실수를 저장할 변수
    
    // a=10.24; 실수->정수형 변수에 저장하면서 데이터 손실을 유발하므로 에러
    divideResult =100;  //정수->실수형 변수에 저장하는건 데이터 손실이 없으므로 정상 실행
    
    boolean b1; // 참(true)또는 거짓(false) 중 하나를 저장하는 자료형(변수)
    b1=true; // 또는 false를 저장할 수 있음
    
    System.out.printf("변수 b1의 값: %b\n", b1);
    System.out.println("변수 b1의 값: "+b1);
    // boolean 자료를 printf로 출력할 때 %b를 사용함

     

    변수 특징
    int 정수형 자료형 4Byte형 정수
    long 정수형 자료형 8Byte형 정수
    float 실수형 자료형 4Byte형 실수
    double 실수형 자료형 8Byte형 실수
    (저장공간, 연산속도가 다름 → 정수, 실수 구분하는 이유)
    char
    문자(글자)자료형 2Byte ex) 'a', 'b'
    String과는 다름
    string 문자열 자료형 "", "a", "abc" 0글자에서 글자갯수 제한 없이 저장할 수 있는 자료형
    현재는 자료형이라고 부르지만 엄밀히 자료형이라기보다 클래스(객체)라고 부르는게 정확한 표현

     

    종류 변수
    정수형 byte(1), short(2), int(4-기본형), long(8)
    실수형 float(4), double(8-기본형)
    문자형 char(2), string(정해진 크기 없음)
    진위형 boolean(1-true/false의 값만 저장)

     

    -1byte=8bit

    00000000~11111111

    00000000 → A, 00000001 → B .... 256개 문자 중 하나를 저장 가능

    -예전 시스템 int는 2byte (-32,768~32,767) → 현재 시스템 int는 4byte (-2,147,483,648~2,147,483,647)

    -double 0.0002 → 0.2x10의-4승(변수에 저장되는 값은 2와 -4)

    -10의 -308승~308승

     

    -정수와 정수의 사칙연산은 결과도 정수임

    -피연산자 둘 중 하나만 실수이면 연산의 결과는 실수가 됨

    a=16; b=52;
    plusResult=a+b;
    minuResult=a-b;
    multiplyResult=a*b;
    divideResult=a/b;
    
    c='+';
    System.out.printf("%d %c %d = %d\n", a, c, b, plusResult);
    c='-';
    System.out.printf("%d %c %d = %d\n", a, c, b, minuResult);
    c='*';
    System.out.printf("%d %c %d = %d\n", a, c, b, multiplyResult);
    c='/';
    System.out.printf("%d %c %d = %.2f\n", a, c, b, divideResult);
    
    divideResult =a/(double)b;
    // 현재 위치에서만 잠시 double로 변환. 이 명령이 지나면 다시 int형으로

     

    변수의 사용자 입력

    -programming 하다보면 외부의 라이브러리 또는 API를 불러다 사용해야할 경우가 있는데 사용자로부터 화면 입력을 받는 도구는 외부 라이브러리에 있는 걸 불러와서 사용해야 함

    System.out.printf("정수를 입력하세요 ");
    // 원활한 입력을 위해 안내 명령은 입력 명령보다 반드시 위에 써줌
    
    Scanner sc=new Scanner(System.in); // 화면입력을 위한 준비코드
    integer1=sc.nextInt(); 
    // 화면으로 사용자가 정수를 입력하면 입력받아 integer1 변수에 저장
    
    // 컴파일러가 sc.nextInt() 명령을 만나면 커서를 깜빡이면서 
    // 사용자에게서 입력이 있을때까지 무한정 대기함
    
    System.out.println("입력한 정수는 "+number1+"입니다"); //입력 후 출력

     

    변수의 생성 방법

    // 1. 변수 선언 후 값을 할당(대입)
    int n1;
    n1=10;
    		
    // 2. 변수의 선언과 값의 대입을 동시에 처리
    int n2=20;
    		
    /* 실행 보류
    // int n3=sc.nextInt(); -> 변수 값을 입력해줘야해서 실행 중 에러 발생
    // start program, 변수를 선언하는 명령만 따로 모아서 
    //                변수들을 관리하는 테이블에 넣고 시작
    // 이때 입력명령이 섞어 있는 변수선언은 에러를 발생하게 됨. 
    // 문법상 빨간줄/엑스가 표시되지는 않지만 실행시 에러 발생시킴(런타임에러)
    */
    		 
    // 3. 여러개의 변수를 한번에 선언(동일한 자료형만 가능)
    int n3,n4,n5;
    		
    // 4. 여러개의 변수를 값 대입하면서 생성
    int n6=60, n7=70;
    		
    // 5. 처음부터 모든 변수에 값을 대입할 필요 없음
    int n8,n9=90,n10;

     

    변수 선언

    -변수 사용 전에는 위치에 관계없이 변수 선언 가능

    -변수는 반드시 선언(생성) 후 사용 가능, 선언 전 사용하는 변수는 오류

    -변수 선언 이후라도 값이 대입되지 않으면 사용 불가

    -변수의 값은 여러번 대입 가능

    -저장되는 값은 가장 최근/마지막에 저장한 값이 사용됨

    -이전에 저장되는 값은 소멸. 한번에 하나씩만 저장할 수 있는 단점이 있음

     

    char형 데이터

    -컴퓨터 저장장치에 저장될 때, 이진수 코드로 저장됨

    -문자를 저장하기 위한 코드체계에 의해 조합된 코드(ASCII code)임

    -이를 십진수로 변환하면 정수로도 변환 가능

    -위의 내용을 기초로 한 결과, 정수와 문자간 호환성 발생됨

    char ch='A';
    int intchar=ch;
    System.out.printf("ch->integer variable save %d\n", intchar);
    System.out.printf("ch->%c\n",ch);
    System.out.printf("ch->정수형 변수값으로 임시변환 %d\n", (int)ch);
    
    ch='B';
    System.out.printf("'B'->정수값으로 캐스팅: %d\n", (int)ch);
    System.out.printf("'B'->정수값으로 캐스팅: %d\n", (int)'B');
    
    System.out.printf("'Z'->정수값으로 캐스팅: %d\n", (int)'Z');
    System.out.printf("'z'->정수값으로 캐스팅: %d\n", (int)'z');
    System.out.printf("'0'-> %d, '9'-> %d\n", (int)'0', (int)'9');
    
    // 대문자 B값에 32를 더하여 소문자 b로 변경
    System.out.printf("%c+32-> %c\n", ch,ch+32);
    
    // 아라비아 기호 '8'에서 아라비아 기호 '0'을 빼면 정수 8이 결과로 나옴
    System.out.printf("'8'-'0'-> %d\n", '8'-'0');
    System.out.println();
     

    실수형 변수의 초기화

    -자바에서 모든 실수들은 별도의 표기가 없으면 기본적으로 double타입으로 인식

    -float 타입으로 값을 저장하기 위해서 float형 변수를 선언하고 float형 데이터를 저장

    // float 변수에 double형 데이터 입력-> 에러
    // float f1=1.123; -> error
    
    // float 변수에 float형 데이터 입력-> 정상실행
    float f2=1.123f; 
    
    // float 변수에 캐스팅 연산을 적용한 double형 데이터 입력-> 정상실행
    double f3=1.123;
    float f4=(float)f3;
    		
    // 용량이 큰 자료형(double)에 작은 자료형(float) 데이터 대입-> 정상실행
    float f5=123.123F;
    double f6=f5; // 캐스팅(형변환) 연산이 필요 없음

     

    정수들의 값 대입

    -용량이 큰 변수값을 용량이 작은 변수값으로 넣으려고 하면 캐스팅 연산 필요

    -반대의 경우 문제없이 모든 실행 가능

    int a=100;
    byte b1=(byte)a;
    
    // byte b2=a; -> 변수를 이용한 값의 대입은 캐스팅이 필요
     
    byte b2=123; // 일반값에 의한 대입은 캐스팅이 필요가 없음
                 // (정수데이터에 한해서만 허용)
    a=b2; // 용량이 작은 자료형을 큰 자료형에 대입은 정상실행

    '언어 > JAVA' 카테고리의 다른 글

    [JAVA] 자료형변환(Casting)  (0) 2022.09.07
    [JAVA] 연산자(Operator)  (0) 2022.09.07
    [JAVA] println  (0) 2022.09.07
    [JAVA] 출력(자리수 조절)  (0) 2022.09.07
    [JAVA] 주석, class  (0) 2022.09.07

    댓글

Designed by Tistory.