본문 바로가기
자바(Java)/자바 AP

[자바AP.04] Primitive Types(2) Variables and Data Types

by 긱펀 2024. 2. 28.
반응형

[자바AP.04] Primitive Types(2) Variables and Data Types

 

Topic 1.2.Variables and Data Types

 

[1] 학습목표

  • 자바에서 Type의 뜻을 안다.
  • Data Type(자료형)이 "primitive type"과 "reference type" 2가지로 나뉘는 것을 이해한다.
  • Primitive type은 숫자와 boolean값으로 어떤 연산(operation)을 하는 데 사용될 수 있다.

 

[2] 필수 지식

  • 자바에서 데이터 타입은 Primitive Type(원시 타입) 과 Reference Type(참조 타입) 2개로 나뉜다.
  • 원시 타입은 int, long, double, float, boolean, byte, short, char(정수, 실수, 문자, 논리 리터럴) 등의 실제 데이터 값을 저장하는 타입이다.
  • 참조 타입은 객체(Object)를 참조(주소를 저장) 하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입이다.
  • 참조 타입의 객체로는 Integer, Long, Double, Float, Boolean, Byte, Short, Char가 있다.

 

<Variable>

  • 변수란, 하나의 값을 저장할 수 있는 메모리 공간이다.
  • 변수에는 한 가지 Type의 값만 저장할 수 있다. 예를 들어 정수 타입에는 정수값만 저장할 수 있고, 실수 타입에는 실수값만 저장할 수 있다.

 

  • Type은 변수에 저장되는 값의 종류와 범위를 결정짓는 요소이기 때문에 어떤 값을 변수에 저장할 지 잘 생각해야 한다.
  • 같은 타입의 변수는 콤마(,)를 이용해서 한꺼번에 선언할 수도 있다.
int x, y, z;

 

  • 변수 이름은 메모리 주소에 붙여진 이름이다.
  • 자바에서 변수 이름을 붙이는 규칙은 아래와 같다.
변수 이름 규칙 예시
첫 번째 글자는 문자이거나 $, _ 이어야 하고 숫자로 시작할 수 없다. (O): price, $price, _name,
(X): 1dollar, #name, $*!value
영어 대소문자가 구분된다. firstvalue와 firstValue는 서로 다른 변수
문자 수(길이)의 제한은 없다.  
자바 예약어는 사용할 수 없다 int, byte, boolean, class, if, for, while, true, false 등

 

<자바 Data 값 범위>

 

 

<Primitive Type>

  • int, long, double, float, boolean, byte, short, char 총 8 가지의 primitive type을 Java 에서 미리 정의하고 제공한다.
  • Java에서 기본 자료형은 반드시 사용하기 전에 선언(Declared) 되어야하며, 자료형의 길이는 운영체제에 독립적이며 변하지 않는다.
  • 스택(stack) 메모리 에 저장된다.

 

<Reference Type>

  • 원시 타입을 제외한 타입들*(문자열, 배열, 열거, 클래스, 인터페이스)*을 말한다.
  • 즉, 참조 타입(Reference type)은 Java에서 최상위 클래스인 java.lang.Object 클래스를 상속하는 모든 클래스들을 말한다.
  • Java에서 실제 객체 는 힙(heap) 메모리에 저장되며 참조 타입 변수 는 스택 메모리 에 실제 객체들의 주소를 저장하여, 객체를 사용할때 마다 참조 변수에 저장된 객체의 주소를 불러와 사용하는 방식이다.
  • 이후 Garbage Collector가 돌면서 메모리를 해제한다.

 

<Primitive Type과 Reference Type의 차이점>

원시 타입과 참조 타입의 기능적 차이는 크게 2가지가 있다.

 

  • 원시 타입은 null을 담을 수 없다. 반면에 참조 타입은 null을 입력값으로 받을 수 있다.
int i = null; // 불가능
Integer integer = null; // 가능

 

  • 원시 타입은 제네릭 타입에서 사용할 수 없다. 반면에 참조 타입은 제네릭 타입에서 사용할 수 있다.
List<int> i; // 불가능
List<Integer> integer; // 가능
  • Primitive Type은 스택 메모리에 존재하고, 참조 타입은 Stack 메모리에는 참조 값만 있고, 실제 값은 Heap 영역에 존재한다.
  • Reference Type 은 최소 2번 메모리 접근을 해야하므로 Primitive 타입과 비교해 접근 속도가 느리다.

 

 

[예제1] 자바에서 변수의 값 범위 표를 참고하여, 각 Data Type 변수에 범위를 벗어나는 값을 넣을 때 어떤 에러 메세지가 뜨는지 확인해 보자.

 

public class Main {
  public static void main(String[] args) {  
    byte v1 = -129;
    short v2 = 32768;
    System.out.println(v1);
    System.out.println(v2);
  }
}

 

실행결과 "더보기"클릭

 

[예제2] 다음의 변수를 만들고 출력하는 것을 따라해보자.

 

public class Main {
  public static void main(String[] args) {  
    byte byte1 = 10;
    int int1 =  3500;
    char char1 = 'A';
    int int2 = char1; // unicode 저장

    System.out.println(byte1);
    System.out.println(int1);
    System.out.println(char1);
    System.out.println(int2); // unicode 출력
    
  }
}

 

실행결과

 

 

[예제3] 아래의 문자와 문자열 출력을 따라해 보자.

public class Main {
  public static void main(String[] args) {  
    // char char1 = ''; // 빈 문자 초기화시 컴파일 에러 발생
    char char2 = ' '; // char는 빈칸(unicode 32) 하나라도 들어가게 초기화
    String string1 = ""; // 빈 문자 초기화 가능

    System.out.println(char2);
    System.out.println(string1);    
  }
}

 

 

[유제1] 아래의 변수를 만들고, println()으로 변수들을 한 줄에 하나씩 출력해 보세요.

  • byte형 변수, 값 50
  • int 형 변수, 값 3200
  • char형 변수, 문자 K
  • String형 변수, 문자열 Happy
  • short형 변수, 값 100

 

 

[예제 4] Long 타입 변수를 초기화 할 때 int 타입의 저장범위를 넘어서는 큰 정수는 반드시 소문자 'l' or 대문자 'L'을 붙여야 한다.

public class Main {
  public static void main(String[] args) {  
    long v1 = 10;
    long v2 = 20L;
    // long v3 = 100000000000000; // 컴파일 에러
    long v4 = 10000000000000L;
  }
}

 

 

[예제5] 자바에서는 실수 리터럴의 기본 타입이 double이다. 그래서 실수 리터럴을 float 타입 변수에 저장하려면 리터럴 뒤에 소문자 'f'나 대문자 'F'를 붙여야 한다.

public class Main {
  public static void main(String[] args) {  
    double v1 = 3.14;
    float v2 = 3.14F;
    //float v3 = 3.14; // 컴파일 에러
  }
}

 

 


 

 

 

[유제 6] 다음의 실수값 변수를 만들고, println()으로 변수들을 한 줄에 하나씩 출력하세요.

  • float형 변수, 값 2.123
  • double형 변수, 값 3.1415169
  • double형 변수, 값 0.123456789
  • float형 변수, 값 0.1234567

 

 

 

728x90
반응형

댓글