반응형
[자바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
반응형
'자바(Java) > 자바 AP' 카테고리의 다른 글
[자바AP연습문제]02.Using Objects (0) | 2024.03.21 |
---|---|
[자바AP 연습문제] 01.Primitive Types (0) | 2024.03.21 |
[자바AP.03] APCSA 공부자료 (0) | 2024.02.25 |
[자바AP.02] Primitive Types(1) (0) | 2024.02.23 |
[자바 AP.01] AP Computer Science A 소개 (0) | 2024.02.23 |
댓글