본문 바로가기
내일배움캠프(Sparta)/Java Handbook

[Java Handbook] Part 1-3

by mmm- 2023. 9. 11.

1. 변수

변수

: 단 하나의 값을 저장할 수 있는 메모리 공간

  • 가변적
  • 메모리 공간은 1Byte로 구성
  • 메모리 공간은 각각이 구분될 수 있도록 '메모리 주소'를 가짐
  • 특정 메모리 영역에 이름을 붙이고 주소 대신 이름 사용

  • 저장되는 값의 타입에 따라 메모리 공간 크기 결정

 

변수의 선언

  • 메모리에 값을 저장할 공간을 할당받기 위해 선언
public class Variable1_1 {
    boolean flag;
    char grade;
    byte val; // 1 byte = 8 bits
    short sval; // 2bytes = 16 bits
    int num; // 4 bytes = 32 bits
    long price; // 8 bytes = 64 bits
    float tax;
    double score;
}

 

변수 생성 규칙

  • 대소문자 구분
  • 길이 제한 X
  • 예약어 사용 불가
  • 숫자로 시작 불가
  • 특수문자 _와 $만 허용

변수의 여러가지 형태

  • Camel case
    • varTest
  • Snake case
    • var_test
  • Pascal case
    • VarTest
    • 자바에는 클래스 명만 대문자로 시작하자는 암묵적이 룰이 있음
  • Kebob case
    • var-test
    • 자바에서는 변수명에 - 기호 사용 불가

변수의 초기화

: 변수에 처음으로 값을 저장하는 것

public class Variable1_2 {
    public static void main(String[] args) {
        boolean flag = false;
        char grade = 'A';
        byte val = 127;
        short sval = 128;
        int num = 32768;
        long price = 2_145_7_483_648L;
        float tax = 3.14f;
        double score = 3.14159265358979;

        System.out.println("boolean = " + flag);
        System.out.println("char = " + grade);
        System.out.println("byte = " + val);
        System.out.println("short = " + sval);
        System.out.println("int = " + num);
        System.out.println("long = " + price);
        System.out.println("float = " + tax);
        System.out.println("double = " + score);
    }
}

변수의 종류

  • 클래스, 인스턴스, 지역 변수
public class Variable1_4 {
    static int classVal = 100; // 클래스 변수
    int instanceVal = 200; // 인스턴스 변수
    
    public static void main(String[] args) {
        int num; // 지역 변수
//        System.out.println(num); // 변수 초기화를 해주지 않았기 때문에 오류 발생.
        num = 300;
        System.out.println("int = " + num); // 300

        // 인스턴스 변수
//         System.out.println("instanceVal = " + instanceVal); // 객체를 생성해주지 않았기 때문에 에러 발생.
        Variable1_4 instance = new Variable1_4(); // 인스턴스 변수 사용을 위해 객체 생성
        System.out.println("instanceVal = " + instance.instanceVal); // 200
        
        // 클래스 변수
        // 같은 클래스 내부는 바로 접근 가능
        System.out.println("classVal = " + classVal);
        // 클래스명.클래스변수명 으로도 접근
        System.out.println("Main.classVal = " + Variable1_4.classVal);
    }
}

 


2. 상수와 리터럴

상수

: 값을 한 번만 저장할 수 있는 변수

  • 불변적
  • 코드 자체의 가독성을 늘리기 위해 사용
public class Variable2_1 {
    public static void main(String[] args) {
        int score = 100;
        System.out.println("score = " + score);
        score = 90; // score는 변수이므로 값 변경 가능
        System.out.println("score = " + score);

        final int finalScore = 100;
        System.out.println("finalScore = " + finalScore);
//        finalScore = 90; // 상수의 값을 바꾸려고 하면 에러 발생.
    }
}

 

리터럴

: 그 자체로의 값

 

변수, 상수, 리터럴 구별

  • score → 변수
  • finalScore → 상수
  • 100, 1000 → 리터럴
public class Variable2_2 {
    public static void main(String[] args) {
        int score = 100;
        final int finalScore = 1000;
    }
}

리터럴의 접두사와 접미사

리터럴의 타입 구분한 표

  • 정수형
    • byte, short, int, long
    • 정수형의 기본형 - int 이기 때문에
      long 타입의 경우 구분을 위해 100L과 같이 리터럴 마지막에 접미사로 L을 붙임
    • byte, short 타입은 연산에 이용하기보다는 저장 목적인 경우가 많아 Java의 내장 변환모듈이 자동으로 형 변환 시켜줌
  • 실수형
    • float, double
    • float의 리터럴에는 f, double의 리터럴에는 d가 붙음
    • double은 기본형이기 때문에 접미사 생략 가능
  • 0b, 0x와 같은 진수를 나타내는 접두사는 대소문자 구별 X
public class Variable2_3 {
    public static void main(String[] args) {
        // boolean flag1 = 22; // 22는 정수이므로 Error 발생
        boolean flag2 = false; // true, false 만 가능

        // char grade1 = 'AA'; // char은 문자만 들어갈 수 있으므로 한 문자만 표현할 수 있음.
        //char grade2 = "A"; // ""은 문자열을 의미하기 때문에 Error 발생
        char grade3 = 'A'; // 한 문자만 가능
        char ch = '\n'; // 개행문자(\n, \t 등) 가능

        // String name1 = 'C'; // String은 문자열 타입이므로 ""로 선언해줘야 하기 떄문에 Error 발생
        // String name2 = 'Choi';
        // 문자열은 한 문자이든, 여러 문자이든 가능
        String str = "C";
        String name3 = "choi";

        // byte val1 = 128; // 오버플로우
        byte val2 = 127; // int 와 같은 리터럴로 저장하지만 범위가 지정되어 있음. -128 ~ 127

        short sval = 128;
        
        // int의 진수 표현
        int ob = 0b0101; // 2진수, 접두사 0b
        int i = 100; // 10진수
        int oct = 0100; // 8진수, 접두사 0
        int hex = 0x100;

        long price = 2_147_483_648L; // _를 사용하여 숫자 표현 가능
        // long l1 = 2_147_483_648; // int 범위가 넘었으므로 접미사 L 필수.
        long l2 = 100; // int의 범위가 넘지 않았으므로 접미사 L 생략 가능

        // float tax1 = 3.14;
        float tax2 = 3.14f;

        double score1 = 3.14159265358979; // d 생략 가능
        double score2 = 3.14159265358979d;

        float f1 = 10f; // 10.0f
        double d1 = 10.; // 10.0
        double d2 = .10; // 0.10
        double d3 = 1e3; // 1000.0, e3 = 10의 3제곱
        double d4 = -1e3; // -1000.0
    }
}

변수와 리터럴의 타입 불일치

  • 범위가 '변수 > 리터럴'인 경우: OK
    • int i = 'A'; int > char, 'A' = 65
    • long l = 123; long > int
    • double l = 3.14f; double > float
  • 범위가 '변수 < 리터럴'인 경우: Error
    • int i = 30_0000_0000; int의 범위(대략 20억)를 넘음
    • long l = 3.14f; long < float
      • long(8byte)이 float(4byte)보다 바이트 수가 커서 가능할 것 같지만 실수형은 정수형보다 저장 범위가 훨씬 더 넓기 때문에 Error 발생
    • float f = 3.14; float < double;
  • byte, short 변수에 int 리터럴 저장 : OK
    • 단, 변수 타입의 범위 이내
 
 

'내일배움캠프(Sparta) > Java Handbook' 카테고리의 다른 글

[Java Handbook] Part 2-2  (0) 2023.09.12
[Java Handbook] Part 2-1  (0) 2023.09.12
[Java Handbook] Part 1-4  (0) 2023.09.11
[Java Handbook] Part 1-2  (0) 2023.09.11
[Java Handbook] Part 1-1  (0) 2023.09.11