[Study #02] 변수와 데이터 타입

    반응형

     

    01. 변수

    • 의미 : 변하는 수, 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름
    • 프로그램이 진행할 때 중간의 값을 저장해 두기 위한 공간
    • 반대어 : 상수 (= 변하지 않는 수, 파이)
    • 예시 : 이름 = 상수, 계좌 잔액 = 변수
    • 하나의 변수에서 동시에 두가지 값을 저장할 수 없고, 하나의 값만 저장할 수 있음

     

    02. 변수 선언

    • 데이터를 저장할 타입(int)변수 이름(num)을 정해야 함
    int num = 101;
    타입 변수  리터럴=고정된 값
    • 변수에 값을 저장할 때에는 대입 연산자(=) 사용
    • 대입 기호 기준으로 양 변의 데이터 타입이 동일해야 함
    • 오른쪽의 값(101)을 왼쪽의 변수(num)에 저장한다는 의미
    • 같은 타입의 변수는 콤마(,)를 이용해서 한꺼번에 선언할 수 있음
    • 같은 타입의 변수는 한 라인에 세미콜론(;) 없이 계속 선언 가능
    • 변수는 한번 선언되면 그 변수를 포함하고 있는 중괄호{} 블록 내에선 절대 재선언 불가능
    • 변수에 값이 저장되지 않으면 변수를 활용할 수 없음
    • 지역 변수는 반드시 활용 전 초기화를 해야 함
    • 지역 변수 : 메소드 블록 내에서 선언된 변수
    • 변수 초기화 : 변수에 최초로 값이 저장될 때 변수가 생성되는 것
    public class Variable01 {
    	int num = 100;//변수 선언, 값 지정
    
    	public static void main(String[] args) {
    		int num = 100;// 지역 변수 = 메소드 속에서 생성
    		int num2, num3, num4, num5;// 선언만
    		num2 = 15;
    		int num6 = 10, num7 = 11, num8 = 12;// 초기화
    		System.out.println(num6);// 초기화o
    	}
    }

     

    03. 클래스명

    • 클래스는 지역변수를 제외한 클래스 변수, 메소드, 생성자들의 집합
    • 사용 가능한 문자 : 영어 소문자, 대문자, 숫자, $, _
      (단, 숫자는 이름 첫머리에 올 수 없음)
    • 첫 글자는 대문자로 시작
    • 두 단어 이상의 조합일 경우 : 새로운 단어 첫머리글자는 대문자
    • 파스칼 표기법 (ex. AppleKorea)

     

    04. 메소드명, 변수명

    • 메소드는 함수(function) 명령어들의 집합
    • 사용 가능한 문자 : 영어 소문자, 대문자, 숫자, $, _
      (단, 숫자는 이름 첫머리에 올 수 없음)
    • 첫 글자는 소문자로 시작
    • 두 단어 이상의 조합일 경우 : 뒤에 오는 첫 글자를 대문자
    • 카멜 표기법 (ex. appleKorea)

     

    05. 상수명

    • 사용 가능한 문자 : 영어 소문자, 대문자, 숫자, $, _
      (단, 숫자는 이름 첫머리에 올 수 없음)
    • 모든 단어를 대문자로 구성
    • 두 단어 이상의 조합일 경우 : 두 단어 사이에 _ 붙임
    • 스테이크 표기법 (ex. APPLE_KOREA)
    •  

    06. 사용할 수 없는 이름

    • 예약어는 사용 불가
    • 예약어 : 자바에서 프로그래밍 진행에 필요한 단어를 미리 등록한 단어
    • ex) boolean, byte, char, new, class,...

     

    07. 데이터 타입

    • 데이터 타입 : 프로그램에서는 변수, 상수에 값을 담기 위해서 반드시 그 타입에 맞는 변수를 사용해야 함
    • 데이터 타입은 크게 R타입(Reference Type, 참조 타입)과 P타입(Primitive Type, 기본 타입)이 있음
    • 기본 타입 8개 외에는 전부 R타입

    P 타입

    타입 타입 크기 범위
    정수타입 byte 8bit -128 ~ 127
    short 2byte -32,768 ~ 32,767
    int 4byte -2,147,483,648 ~ 2,147,483,647
    long 8byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    실수타입 float 4byte -1.4E-45 ~ 3.4028235E38
    double 8byte 4.9E-324 ~ 1.7976931348623157E308
    문자 타입 char 2byte 0 ~ 65535 하나의 단일문자(유니코드)
    논리 타입 boolean 1byte true or false
    • 정수의 기본타입 : int / 실수의 기본타입 : double
    • 데이터 타입 크기 비교 : byte < short < int < long < float < double
      (정수보다 실수를 더 큰 수로 인지)

    01) 프로모션

    • 변수를 대입할 때 작은 타입을 큰 타입에 대입하는 형태
    • 자바에서는 자동으로 대입

    [ 예시 ]

    int num;
    byte num1 = 10;
    
    num = num1;
    //byte를 int에 대입
    //byte보다 더 큰 int에 들어가므로 자동 대입
    System.out.println(num);//10
    
    int iNumber = 14;
    double dNumber = iNumber;//int를 double에 대입
    //int보다 더 큰 double에 들어가므로 자동 대입
    System.out.println(dNumber);//14.0
    //double 타입으로 자동 변환

    02) 캐스트

    • 큰 타입을 작은 타입에 대입할 때 범위를 초과하므로 'type'을 명기해서 값을 대입시킴
    • 상위 비트를 대입되는 타입에 맞게 잘라내기 때문에 값의 변화(값의 절삭)가 올 수 있음

    [ 예시 ]

    double dNum = 3.14;
    iNum1 = (int) dNum;//double타입을 int에 대입
    System.out.println(iNum1);//3.14인 값이 캐스트 되어 int타입인 3으로 출력
    
    double num1 = (int) 3.9315;//데이터 타입 변환
    //3.9315를 int 타입으로 변환해 3으로 변경 (값의 절삭)
    //3을 double 타입으로 변환해서 3.0이 출력

    [ 활용 ]

    byte bNumber = (byte) 128;
    System.out.println(bNumber);//-128
    //byte는 범위가 -128 ~ 127 이므로 그 범위 안에서 돌면서 출력
    
    short sNum = (short) (32767 + 1);
    System.out.println(sNum);//-32768
    //short의 범위가 -32,768 ~ 32,767 이므로 그 범위 안에서 돌면서 출력
    
    int iNum = (int) 2147483648;//컴파일 오류
    long lNum = 2147483649L;//오류 해결
    
    
    int iNum = 0;
    iNum = Integer.MAX_VALUE;//Integer의 최대값
    System.out.println(iNum);//2147483647
    iNum = Integer.MIN_VALUE;//Integer의 최저값
    System.out.println(iNum);//-2147483648
    
    long lNum = 9223372036854775807L;//int값을 벗어난 long 타입을 써줄 땐 뒤에 L을 써줘야 함
    System.out.println(lNum);//9223372036854775807
    System.out.println(Long.MIN_VALUE);//-9223372036854775808
    
    float fNum = 3.14F;//float 타입은 뒤에 F를 써주거나
    float fNum = (float) 3.14;//(float)로 캐스트 걸어주기
    System.out.println(fNum);//3.14

    [ 예제 ]

    과수원을 경영하고 있습니다. 키우는 과일은 사과, 배, 오렌지입니다. 하루 생산량은 각각 5, 7, 5개입니다. 위 값을 기준으로 하루에 총 생산되는 과일의 수를 출력시키고, 하루를 기준으로 시간당 몇 개의 과일이 생산되는지를 출력해 주세요.

     

    예) 총 생산 개수 : 17개

          시간당 생산 개수 : 0.00145

    int apple, pear, orange, total;
    float avg;
    
    apple = 5;//리터럴
    pear = 7;
    orange = 5;
    total = apple + pear + orange;
    
    avg = total / 24F;//방법 1
    avg = (float) (total / 24.0);//방법 2
    
    System.out.println("총 생산 개수 : " + total + "개");//총 생산 개수 : 17개
    System.out.println("시간 당 생산 개수 : " + avg + "개");//시간 당 생산 개수 : 0.7083333개

     

    03) 문자형 (char)

    • 문자 하나를 저장하기 위한 타입
    • 반드시 값으로는 문자 하나만 존재해야 하며 하나 이상일 경우엔 String(문자열)에 저장
    • 정수 타입으로 음수가 없는 유니코드 0  ~ 65,535의 범위를 가짐
    • 문자값을 표현할 때는 반드시 홀따옴표('') 사용
    • 정수 타입이기 때문에 int에 프로모션 됨

    [ 활용 ]

    char ch = '가';
    ch = 'A';
    ch = '家';
    ch = '\ub059';// 유니코드 표기
    System.out.println(ch);//끙
    
    char ch = '가';
    String str = ch + "";//데이터 타입을 스트링으로 변경
    System.out.println(str);//가
    
    str = "안녕하세요";
    System.out.println(str);//안녕하세요
    ch = str.charAt(4);//charAt 4번째의 있는 것을 뽑아주세요 라는 뜻
    System.out.println(ch);//요
    
    ch = '9';
    System.out.println(ch);//9
    
    ch = 9;//char 타입에 따옴표를 안 붙이면 아스키 코드가 나옴
    System.out.println(ch);//공백 (아스키 코드)
    
    ch = 33;
    System.out.println(ch);//! (아스키 코드)
    
    int num = 66;
    System.out.println(num);//66
    System.out.println((char) num);//B
    
    char c = 48;
    c = (char) (c + 9); //48+9 = 57 해서 아스키 코드 '57'인 9가 나옴
    System.out.println(c);//9
    
    System.out.println( (char) 65 ); //A
    System.out.println( (char) 66 ); //B
    System.out.println( (char) 67 ); //C
    System.out.println( (char) 68 ); //D
    		
    for (int i = 97; i < 123; i++) {//a~z가 나옴
        System.out.print((char) i);
    }

    03) 논리형 (boolean)

    • 저장할 수 있는 값 : trun 참 ON 1 / false 거짓 OFF 0
    boolean check =  1 + 2 > 3 ;//글자가 아닌 상태를 저장한 것
    //계산 순서 : 3    1      2
    
    System.out.println( check );//false
    
    boolean check1 =  !true ;
                    //! = 반전 not
    System.out.println( check1 );//false
    
    System.out.println( (char) 35376);

     

     

    참고자료
    신용권, '혼자 공부하는 자바'

     

    반응형

    댓글