JAVA 변수와 자료형
프로그램에서 표현 가능한 데이터와 종류에 대한 이해
JAVA 변수와 자료형
#01. VSCode 설정
1) Extention 설치
이름 | 개발자 | 설명 |
---|---|---|
Extension Pack for Java | Microsoft | 자바 개발에 필요한 필수 익스텐션 모음 |
PlantUML | jebbs | 클래스 다이어그램 생성 도구 |
PlantUML Previewer | Mebrahtom Guesh | PlantUML로 작성된 다이어그램 뷰어 |
PlantUML Syntax | Quido Hoekman | PlantUML 문법 강조 도구 |
2) 프로젝트 생성
Ctrl+Shift+P
를 눌러 명령창을 연 후Java: Create Java Project
를 선택한다.- 다음 단계에서
No build tools
를 선택한다. - 프로젝트(각 단원별 폴더)가 생성될 작업 디렉토리를 지정한다.
- 프로젝트의 이름을 입력한다. (여기서는
02_변수와_자료형
)
3) 소스코드 작성
모든 소스코드는 src
폴더 안에서 작성되어야 한다.
4) 코드 실행 및 디버깅
F5
를 눌러서 코드를 실행한다.
BreakPoint가 설정되어 있는 경우 디버깅이 진행된다.
5) VSCode 디버깅 단축키
단축키 | 설명 |
---|---|
F9 | 중단점 설정/해제 |
F5 | 디버깅 시작 디버깅 중인 경우 - (다른 중단점이 존재할 경우) 다음 중단점으로 이동 - (다른 중단점이 없을 경우) 나머지 코드 일괄 실행 |
F10 | 다음 줄 실행 |
F11 | 메서드 호출 구문에서 해당 메서드 안으로 들어가기 |
#02. 메모리
데이터를 저장할 수 있는 물리적 장치
1) 휘발성 메모리
전원을 OFF하면 저장되어 있는 데이터가 모두 삭제된다.
- ex) RAM 카드
2) 비휘발성 메모리
전원을 OFF 하더라도 데이터가 삭제되지 않는다.
- ex) 하드 디스크, USB
#03. 컴퓨터의 데이터 단위
컴퓨터에 저장될 수 있는 데이터는 이진수 형태이므로 0
아니면 1
로만 구성된다.
1) bit
이진수 값 하나를 의미.
- 1bit는 두 개의 정보를 표현할 수 있다. (
0
혹은1
) - 2bit는 네 개의 정보를 표현할 수 있다. (
00
,01
,10
,11
) - nbit는 2의 n제곱 개의 정보를 표현할 수 있다.
- 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 …
2) 인코딩
- 글자를 부호화 하기 위한 규격.
- ex) 모스부호
ANSI
- 이진수를 사용해서 알파벳을 부호하 하기 위한 미국 표준 규격
- 7bit로 알파벳 한 글자를 표현한다.
- 미국 전용.
확장 ANSI
- ANSI에서 다른 언어를 표현하기 위한 1bit를 추가하여 8bit로 한 글자를 표현하는 방식
- 영어 + 1개국어 표현이 가능하기 때문에 언어별로 종류가 나누어진다.
- ex) euc-kr, euc-jp, euc-ch …
- 확장 ANSI가 국제표준으로 정해진 후 컴퓨터에서 데이터의 크기의 초소 단위를 8bit로 정하고 이를 1byte라고 부르기 시작함.
- 영어는 1byte로 한 글자를 표현 가능함.
- 한국어와 같은 조합형 글자는 두 개 이상의 byte가 모여야 한 글자를 구성할 수 있다.
UTF-8
- 확장 ANSI가 영어+1개국어 밖에 표현하는 한계를 개선하여 언어 종류에 상관 없이 3byte로 한 글자를 표현하는 방식.
- 한번에 모든 언어를 표현할 수 있다.
- 현재 사실상 산업 표준으로 사용되고 있다.
3) 컴퓨터의 용량 단위
- byte : 최소단위 (이진수 8개)
- kbyte : 1kb = 1024b
- mbyte : 1mb = 1024kb
- gbyte : 1gb = 1024mb
- tbyte : 1tb = 1024gb
#04. 변수
메모리에 저장된 데이터.
쉽게 생각하면 값을 대입하기 위한 메모리 영역이라고 할 수 있다.
1) 변수 사용하기
변수의 선언
변수에 저장할 수 있는 값의 종류를 명시하고 그 옆에 변수의 이름을 정의한 다음 세미콜론으로 명령을 종료한다.
int는 정수를 의미하고 4byte의 메모리 공간을 차지한다.
1
int num;
값의 할당
대입 연산자 =
을 사용해서 선언한 변수에 데이터를 저장하는 것.
항상 오른쪽에서 왼쪽으로 대입된다.
1
num = 100;
선언과 할당의 일괄 처리
1
int num = 100;
2) 데이터 타입 (Data Type)
메모리에 저장되어 있는 이진수들을 해석하기 위한 규칙들.
메모리에 저장할 수 있는 값의 종류를 의미한다.
종류 | 크기 | 설명 | 값 형태 |
---|---|---|---|
byte | 1byte | -128~127 까지의 범위를 갖는 정수 | ex) 1 |
short | 2byte | byte 보다 큰 범위를 저장할 수 있는 정수 | ex) 200 |
int | 4byte | short 보다 큰 범위를 저장할 수 있는 정수 | ex) 1234567 |
long | 8byte | int 보다 큰 범위를 저장할 수 있는 정수 | 생략 |
float | 4byte | 실수 | ex) 3.14 |
double | 8byte | float 보다 더 정밀하게 소수점 자리를 표현할 수 있는 실수 | ex) 3.141592… |
boolean | 2byte | 참/거짓을 표현하는 논리값 | true / false |
char | 2byte | 한 글자. 홑따옴표로 감싼다. | ‘a’ |
3) 변수 값 할용하기
같은 데이터 타입을 갖는 변수 여러 개를 한 번에 선언하기
1
2
3
int num1, num2;
num1 = 100;
num2 = 200;
이미 값이 할당된 변수는 다른 값으로 변경 가능
1
2
int pay = 100;
pay = 200;
변수 값을 다른 변수에 복사 가능
1
2
3
4
5
int x, y;
x = 50;
y = x;
int z = y;
변수의 이름 규칙
- 언더바(
_
), 숫자, 영어,$
기호만 사용 가능하다.- 관례상
$
는 잘 사용하지 않는다.
- 관례상
- 첫 글자는 숫자가 될 수 없다.
- 자바에서 사용하는 예약어를 사용할 수 없다.
- 첫 글자는 대부분 소문자로 시작한다.
두 개 이상의 단어를 조합하여 이름을 정의하는 경우
- 스네이크 표기법 : 띄어 쓰기를 언더바(
_
)로 표현
1
int my_age;
- 카멜 표기법 : 띄어쓰기가 시작되는 단어의 첫 글자를 대문자로 변경
1
int myAge;
문자열
쌍따옴표로 감싸진 문장을 저장할 수 있는 데이터 타입
1
String welcomeMessage = "Hello World";
4) 변수의 제약
선언되지 않은 변수는 사용할 수 없다.
1
2
3
int x;
x = 100; // 선언된 변수를 사용하므로 ok
y = 200; // 선언되지 않은 변수에 값을 대입하므로 에러
이미 선언된 변수를 중복 선언할 수 없다.
1
2
3
4
int z;
z = 200;
int z = 300; // 중복선언 에러
float 타입 사용시 주의사항
double 타입과의 구분을 위해 대입시 F
를 적용해야 한다. (필수)
1
float k = 12.345F;
long 타입 사용시 주의사항
int 타입과의 구분을 위해 대입시 L
을 적용해야 한다. (권장)
1
long k = 12345678L
변수 값 출력하기
1
2
3
4
int myAge = 100;
System.out.println(myAge); // 100이 출력된다.
System.out.println("myAge"); // myAge라는 문자열이 출력된다.
#05. 실습예제
📒 Ex01_변수의_사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Ex01_변수의_사용 {
public static void main(String[] args) {
/** 1) 선언(declaration)과 할당(정의,definition)을 분리 */
// 정수형 변수 a를 선언 --> 메모리의 특정 위치에 4칸을 점유
int a;
// a에 100을 할당(기록)
a = 100;
System.out.println(a);
/** 2) 선언과 할당을 통합 */
// 정수형 변수 b를 선언하고 a에 기록된 내용을 복사
int b = a;
System.out.println(b);
/** 3) 실수형 변수 */
// double 타입은 메모리의 8칸을 점유하고 소수점을 포함한 값을 저장한다.
double c = 3.14;
System.out.println(c);
/** 4) 논리형 변수 */
boolean d = true;
System.out.println(d);
}
}
📒 Ex02_리터럴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* 변수에 할당되기 위한 원초적인 값 형태
*
* int a = 100;
* 위의 코드에서 100이 리터럴
*
* 리터럴은 변수에 대입되거나 직접 출력할 수 있다.
*/
public class Ex02_리터럴 {
public static void main(String[] args) {
// 정수형태의 리터럴은 int로 인식된다.
System.out.println(100);
// 정수의 리터럴은 변수의 datatype에 따라 자동 식별된다.
int num1 = 100;
System.out.println(num1);
double num2 = 100;
System.out.println(num2);
// 실수의 리터럴은 값 뒤에 데이터 타입의 첫 글자(리터럴 문자)를 지정해서 구분해 함.
// --> 지정하지 않을 경우 double로 인식
// --> 첫 글자는 대소문자 구분 없음
float num3 = 3.14F;
System.out.println(num3);
double num4 = 3.14D;
System.out.println(num4);
// `int`형의 리터럴 문자는 없지만 double은 `D`라고 명시하는 것이 가능
double num5 = 100D;
System.out.println(num5);
}
}
📒 Ex03_상수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Ex03_상수 {
public static void main(String[] args) {
/** 1) 변수는 초기화 이후 다른 값으로 변경 가능함 */
int age = 20;
System.out.println(age);
age = 21;
System.out.println(age);
/** 2) 상수는 초기화 이후 값을 변경할 수 없는 형태 */
// 데이터 타입 앞에 `final`키워드를 적용하여 생성
// 선언과 할당이 통합된 형태로만 생성 가능함
// 상수의 이름은 모두 대문자로 지정하고 스네이크 표기법을 사용하는 것이 관례
final double PI = 3.14;
System.out.println(PI);
// 상수의 값을 변경하려고 시도 --> 이 위치에서 에러 발생함
//PI = 3.14159;
// 에러가 발생하는 위치에서 프로그램이 중단되기 때문에 아래 코드는 실행되지 않음
//System.out.println(PI);
}
}
📒 Ex04_문자열
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 문자열 : 문자(char타입)을 나열한 형태. 쌍따옴표를 사용함 --> 문장
* 기본 데이터 타입 8가지에 속하지 않음.
*
* 원래 문자열은 객체라는 형태의 특수한 변수이지만
* 아직 설명되지 않은 내용이므로 일반 변수와 구분하지 않는다.
*/
public class Ex04_문자열 {
public static void main(String[] args) {
/** 1) 문자열 변수의 선언과 할당 */
String name;
name = "자바학생";
System.out.println(name);
/** 2) 빈 문자열 */
// 내용이 없는 문자열 --> 따옴표를 열자마자 닫은 형태
// 내용은 없지만 메모리 공간은 차지하고 있다는 점에서 존재하는 변수임
String empty = "";
System.out.println(empty);
/** 3) 공백문자열 */
// 띄어쓰기도 엄연한 글자
String space = " ";
System.out.println(space);
/** 4) null값 */
// 나중에 할당하기 위해서 값을 비워 놓은 형태
// 빈 문자열이나 공백문자열은 메모리를 소비하지만 null은 메모리를 차지하지 않는다.
String nValue = null;
System.out.println(nValue);
}
}
This post is licensed under CC BY 4.0 by the author.