ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 변수(Variable) - 기본형
    Java 2022. 9. 4. 00:13

    변수란?


    값을 저장할 수 있는 메모리 공간을 확보하고, 사람이 식별할 수 있는 이름을 붙인 것

     

    메모리


    - 메모리셀의 집합체

    - 각 메모리셀에 데이터를 저장할 수 있다.

    - 각 메모리셀을 가르키는 주소가 있다(예: 0x38d2a6c)

     

    위의 예시처럼 주소를 만들 경우의 문제점

    1. 저장해야할 값이 많을 때, 사람이 식별하기 어렵다

    2. 시스템 운영에 꼭 필요한 데이터를 실수로 덮어쓸 가능성이 있다.

     

    -> 이를 해결해주는 것이 '변수' !

     

    class StaticExample{
        int num1 = 10; //static키워드가 없는 참조변수 num1
        static int num2 = -10; // static키워드가 있는 참조변수 num2
    }

     

    위 예제에서의 int는 데이터 타입으로 정수형을 의미한다. 위 예제에서 num1과 num2은 각각 10, -10을 의미한다. num1과 num2가 변수를 말한다. 

     

     

    변수 선언


    - 저장하고자 하는 값의 데이터 타입과 변수 이름 작성

    - 변수를 선언하면 컴퓨터는 값을 저장할 저장공간을 확보하고, 사용자가 정한 변수 이름으로 이름을 붙인다.

    - int num을 선언할 경우, int 형 값을 저장할 것이며 해당 데이터 타입의 크기인 4byte메모리 공간을 확보하며 해당 공간에 num 이라고 이름을 붙일 것이라는 걸 알 수 있다.

     

     

     

    값 할당


    - 변수에 값을 넣는 과정

     

    class calculator {
      public static void main(String[] args) {
        int num1;  //변수 할당
        num1 = 1;  //값 할당
      }
    }

     

    - 대입 연산자를 활용하여 값을 할당한다.

    - 좌항(변수) = 우항(값)

    - 우항의 값이 좌항의 변수에 할당

    - 초기화 : 변수 선언 후 처음으로 값을 할당하는 것

    - 재할당 : 초기화 이후 다시 값을 할당하는 것

     

    class calculator {
      public static void main(String[] args) {
        int num1;  //변수 할당
        num1 = 1;  //값 할당(초기화)
        num1 = 5;  //값 할당(재할당) -> 재할당 값으로 저장된다.
      }
    }

     

    class calculator {
      public static void main(String[] args) {
        int num1 = 10  // 선언과 동시에 초기화
      }
    }

     

     

    변수 명명 규칙


    1. 카멜 케이스(camelCase) -> 두 번째 단어부터 대문자로 시작

    2. 영문자, 숫자,  _ 를 사용할 수 있다. 대소문자 구분(다르게 인식함)

    3. 숫자로 시작x

    4. 이미 사용중인 예약어(reserved word) 사용x (ex. double, for, if, class, char 등)

    5. 사용 목적에 맞는 변수명

     

     

    상수(Constant)


    - 변하지 말아야할 데이터를 임시로 저장하기 위한 수단

    - 재할당 금지된 변수

    final 키워드를 사용해 선언

    - SCREAMING_SNAKE_CASE 사용(대문자에 언더바(_)를 넣어 구분

     

    final double NUM_WEIGHT = 49.5;

     

     

    상수를 사용하는 이유


    1. 프로그램 실행 시 값이 변하면 안되는 경우

    2. 코드 가독성 높이기

    3. 코드 유지관리 유용성

     

     

    타입


    - 어떤 값의 유형 및 종류 -> 타입에 따라 값이 차지하는 메모리 공간의 크기값이 저장되는 방식 결정

    1. 값이 차지하는 메모리 공간의 크기

    2. 값이 저장되는 방식

        ○ 기본타입 & 참조타입

     

     

    기본 타입과 참조 타입 (값이 저장되는 방식)


    ■ 기본 타입(primitive type)

    - 실제 값 저장

    - 정수타입, 실수 타입, 문자 타입, 논리 타입

     

    ■ 참조 타입(referenca type)

    - 데이터가 저장된 곳을 나타내는 주소값 저장

    - 기본형을 제외한 나머지 타입

    - 출력할 경우, 객체의 주소값이 @0x38d2a6c와 같은 형식으로 출력

     

     

    리터럴(Literal)


    - 문자가 가르키는 값

    - '값'이라는 표현대신 리터럴이라는 표현 사용

    - 변수 또는 상수에 할당

     

     

    기본 타입 - 정수 타입


     

    타입 메모리 표현 범위 기타
    byte 1byte -128(-27) ~ 127(27 - 1)  
    short 2byte -32,768(-215) ~ 32,767(215 - 1)  
    int 4byte -2,147,483,648(-231) ~ 2,147,483,647(231 - 1) 일반적으로 많이 사용
    long 8byte -9,223,372,036,854,775,808(-263) ~ 9,223,372,036,854,775,807(263 - 1) 뒤에 대문자 L을 붙인다.

     

    ■ 오버플로우

    - 표현 범위 중 최대값을 넘어서는 값이 될 경우 오버플로우가 발생한다.

    - 최대값을 넘어가면 최소값으로 값이 순환

     

    ■ 언더플로우

    - 표현 범위 중 최소값을 넘어서는 값이 될 경우 언더플로우가 발생한다. 

    - 최소값을 넘어가면 최대값으로 값이 순환

     

     

    기본 타입 - 실수 타입


    실수 : 소수점을 가지는 값

     

    타입 메모리 표현 범위  정밀도  기타
    float 4byte 음수 : -3.4 * 10³⁸  ~  1.4 * 10⁻⁴⁵
    양수 : 1.4 * 10⁻⁴⁵  ~  3.4 * 10³
    7자리 반드시 접미사 f를 붙여야 한다. 

    float num1 = 3.14f;
    double 8byte 음수 : -1.8 * 10³⁰⁸  ~  -4.9 * 10³²
    양수 : 4.9 * 10³²⁴  ~  1.8 * 10³⁰⁸
    15자리  접미사 d는 선택사항

    double형은 float형보다 정밀도가 더 높다.

     

    ■ double형은 float형보다 더 큰 실수를 저장할 수 있으며 더 정확하게 저장할 수 있다. 

     

    ■ 오버 플로우

    - 값이 음의 최소 범위 또는 양의 최대 범위를 넘어섰을 때 발생하며, 이때 값이 무한대가 된다. 

     

    ■ 언더 플로우

    - 값이 음의 최대 범위 또는 양의 최소 범위를 넘어섰을 때 발생하며, 이때 값이 0이 된다. 

     

     

    기본 타입 - 논리 타입


    boolean형

    - 참 또는 거짓을 저장할 수 있는 데이터 타입

    - true 혹은 false를 값으로 가진다.

    - 1byte(8bit) 크기

    - 조건문과 함께 사용

     

     

    기본 타입 - 문자 타입


    char형

    - 2byte 크기

    - 해당 변수에 하나의 문자형 리터럴 만을 저장

    - 작은따옴표( ' ' )를 사용

    - 큰 따옴표는 문자열 리터럴로 인식! -> 문자열과 문자형은 다름

     

    char character1 = 'a';
    char character2 = 'ab'; // error: 하나의 문자만 할당해야한다.
    char character3 = "a"; // error : 작은 따옴표를 사용해야한다.

     

    어떻게 저장?  ->  유니코드

    - 각 문자에 숫자 코드 번호를 부여

    - 문자형 리터럴을 문자형 변수에 할당하면 해당 영문자의 유니코드 숫자값이 저장된다. 

    - 숫자를 문자형 변수에 할당할 수 있다. 

     

    char character = 65;
    System.out.print(character); 
    
    // 출력 결과 : A

     

     

    타입 변환


    ■ 자동 타입 변환

    - 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때 ( byte -> int )

    - 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때 ( float -> double )

     

    byte(1)  ->  short(2)/char(2)  ->  int(4)  ->  long(8)  ->  float(4)  ->  double(8)

     

    - float이 표현할 수 있는 값이 모든 정수형 보다 더 정밀하기 때문에 int와 long보다 더 뒤쪽에 있다.

     

    ■ 수동 타입 변환

    - 더 큰 타입에서 작은 타입으로는 자동으로 타입 변환이 되지 않는다. 

    - 수동으로 타입을 변환하는 것을 캐스팅(casting)이라고 한다. 

    - 캐스팅 연산자 ()를 사용하여, 괄호 안에 변환하고자 하는 타입을 적어준다.

     

    int intNum = 128;
    byte byteNum = (byte)intNum;
    
    System.out.println(byteNum);

     

     

     

    형변환


    ■ char 을 int 형으로

    < 1 > 0 빼주기 

    아스키 코드 표 상에서 문자 0~9는 48~57의 순서로 되어있다. 

    문자 '1'의 아스키 코드에서 문자 '0'의 아스키 코드를 빼주면 원하는 숫자 1을 얻을 수 있다. 

     

    char c = '1';
    int n = c - '0'   // int n = (int)c - '0'  -> 49 - 48 = 1
    
    System.out.println(n)  // 1

     

     

    < 2 > Character.getNumericValue()

     

    char c = '1';
    int n = Charicter.getNumericValue(c);
    
    System.out.println(n) // 1

     

    ■ char형을 int형으로

     < 1 > 문자 '0' 더하기

    - 숫자 0 ~ 9 사이인 경우

     

    int n = 4;
    char c = (char)(n + '0')   // 4 + 48(아스키 코드 문자 '0') = 52 -> '4' (아스키 코드 변환)
    
    System.out.println(c);     //'4'

     

    int n = 8
    char c = (char)(n + '0')   // 8 + 48(아스키 코드 문자 '0') = 56 -> '8' (아스키 코드 변환)
    
    System.out.println(c);     // '8'

     

     

    < 2 > Character.forDigit(int digit, ind radix)

    - 지정된 기수의 특정 숫자에 대한 '문자'표현을 결정한다. 

    - 기수 또는 숫자 값이 유효하지 않으면 null 값을 반환한다. 

    - 10진수 16진수 표현과 관련된 메서드

     

    int n = 2;
    int radix = 10;                         // 10진수로 표현할지 16진수를 표현할지 설정
    result = Character.forDigit(n, radix);  //10진법에서 2번째 숫자를 문자로 리턴
    
    return result;                          //'2'

     

     

     

    'Java' 카테고리의 다른 글

    제어문  (0) 2023.04.26
    Java 연산자  (0) 2023.04.07
    변수(Variable) - String  (0) 2023.04.04
    JAVA의 매서드  (0) 2023.03.28
Designed by Tistory.