nueijeel
[Java 이론] 0426 변수와 자료형, 연산자 본문
2023.04.26
1. 상수
상수
: 프로그램 상에서 의미가 변하지 않는 값
숫자 상수와 문자 상수(=문자열)는 메모리에 값을 기억시켰다가, 값이 쓰일 때 CPU에 의해 값을 가져와 사용한다.
숫자 상수는 메모리에 기억된 값을 변경할 수 없다.
RAM : 처리 속도가 빠른 기억장치로 휘발성이다.
HDD/SSD : 처리 속도가 느린 기억장치로 비휘발성이다.
CPU가 기억장치로부터 데이터를 불러와 처리한다. 그래서 데이터를 처리하기 전에 메모리에 데이터가 저장되어 있어야한다.
RAM은 보조기억장치에 있는 데이터를 불러와 CPU가 빠른 처리를 할 수 있게 해준다.
2. 변수
변수
: 프로그램에서 값이 수시로 변경될 수 있는 메모리상의 저장공간
변수는 선언과 동시에 메모리상의 기억공간이 마련되는데, 그러면 해당 공간에 값을 자유롭게 넣고 가져올 수 있다.
그리고 변수를 사용하기 전에 반드시 값을 할당해야한다.
< 변수 선언과 할당 >
자료형 변수명 ;
자료형 변수명 = 값 ;
변수에 값을 할당할 때 대입연산자(=)를 사용한다.
이전 게시물에서 식별자에 대해 작성한 부분이 있는데, 다시 복습해보면 상수 식별자는 모든 글자를 대문자로 작성하고 파스칼 표기법을 따른다. 또, 변수 식별자는 첫 글자를 소문자로 시작하고 카멜 표기법을 따른다.
3. 자료형
- 논리 자료형
boolean : 참(true), 거짓(false) 값을 담는 자료형으로 1 byte의 저장공간을 차지한다.
boolean boolean1 = true;
boolean boolean2 = false;
- 정수 자료형
byte : 1 byte 크기의 정수 값을 담는 자료형 (2의 8제곱 개의 수를 표현가능)
short : 2 byte 크기의 정수 값을 담는 자료형 (2의 16제곱 개의 수를 표현가능)
int : 4 byte 크기의 정수 값을 담는 자료형 (2의 32제곱 개의 수를 표현가능), 기본 정수 자료형
long : 8 byte 크기의 정수 값을 담는 자료형 (2의 64제곱 개의 수를 표현가능), 값에 L을 붙여야 함
char : 2 byte 크기의 문자 값을 담는 자료형 (2의 16제곱 개의 양수를 표현가능), 코드 상에서는 문자를 담는 형태로 작성하지만 실제로는 해당 문자의 코드 값이 담기게 된다.
byte byte1 = 127;
short short1 = 32767;
int int1 = 2147483647;
long long1 = 922337203684775807L;
- 실수 자료형
float : 4 byte 크기의 실수 값을 담는 자료형 , 값에 F를 붙여야 함
double : 8 byte 크기의 실수 값을 담는 자료형, 기본 실수 자료형
float float1 = 11.11f;
double double1 = 22.22;
- 문자열
String : 큰따옴표로 묶인 문자열을 담을 수 있다. 자료형이 아닌 클래스다.
String string1 = "Java Test";
4. 출력 서식
System.out.printf() 출력문은 서식문자를 사용해 값을 출력한다.
< 서식 문자 종류 >
%d | 정수 |
%f | 실수 |
%c | 문자 |
%s | 문자열 |
%숫자d | 숫자 만큼의 공간을 빈칸으로 확보하고 오른쪽 정렬해 출력 |
%0숫자d | 숫자 만큼의 공간을 0으로 채우고 정수 출력 |
public class Test{
public static void main(String[] args){
int a = 100;
double b = 3.14;
char c = 'A';
String d = "Hello World";
boolean e = true;
boolean f = false;
System.out.printf("%d\n", a);
System.out.printf("%f\n", b);
System.out.printf("%c\n", c);
System.out.printf("%c\n", a); //지정된 정수에 해당하는 문자를 출력
System.out.printf("%s\n", d);
System.out.printf("%s %s\n", e, f);
System.out.printf("%5d\n",1);
System.out.printf("%5d\n",10);
System.out.printf("%5d\n",100);
System.out.printf("%05s\n","a");
System.out.printf("%05s\n","ab");
System.out.printf("%05s\n","abc");
//10.2 : 10자리 확보 후, 소수점 이하 자리수를 2자리로 제한
//전체자릿수.소수점이하자릿수
System.out.printf("10.2f\n", b);
}
}
5. 형 변환
형 변환 (Type Casting)
: 값을 다른 타입으로 변환하는 것을 의미한다.
- 묵시적으로 형 변환이 일어나는 경우
1. 담는 값이 담기는 공간보다 작은 크기의 자료형일 경우
int i1 = 100;
Long l1 = i1;
4 byte 크기의 int형 변수 i1에 담긴 값은 8 byte로 변환되어 Long타입 변수 l1에 담긴다.
2. 자료형이 다른 두 값의 연산
int i1 = 5;
double d1 = 1.3;
System.out.printf("%d\n", i1*d1); //Error
System.out.printf("%f\n", i1*d1);
int형 변수와 double형 변수의 연산을 출력하면 자동으로 byte 값이 큰 자료형으로 형변환되어 계산된다.
따라서 %d 서식문자로 정수형 출력을 하면 오류가 발생하고, %f 서식문자로 실수형 출력을 하면 정상적으로 출력되는 것을 확인할 수 있다.
- 명시적으로 형 변환을 사용하는 경우
담는 값이 담기는 공간 보다 큰 크기 자료형일 경우에 해당 자료형으로 강제 형 변환이 필요하다.
Long l1 = 1000L;
Long l2 = 10000000000L;
int i1, i2;
i1 = (int)l1;
i2 = (int)l2;
i2 초기화의 경우 l2 값이 변환하려는 int 자료형에 담을 수 있는 최댓값보다 큰 수이기 때문에, 강제 형 변환 과정에서 값의 손실이 발생한다.
6. 연산자
연산자
: 값의 연산에 쓰이는 기호. 연산자의 우선순위를 따라서 연산이 이루어진다.
< 연산자 우선순위 >
최우선 연산자 | . [] () |
단항 연산자 | ! ~ + - (cast) 전위형 증감 연산자 ++ -- |
산술 연산자 | + - * / % |
시프트 연산자 | << >> >>> |
관계 연산자 | > < >= <= == != |
비트 연산자 | & ^ | |
논리 연산자 | & && | || |
삼항 연산자 | 비교식 ? 항1 : 항2 |
배정 대입 연산자 | = += -= *= /= %= <<= >>= ^= &= |
후위형 증감 연산자 | ++ -- |
- 단항 연산자
! : true를 false로, false를 true로 변환해주는 연산자
~ : 비트 0을 1로, 1을 0으로 변환해주는 연산자
+, - : 숫자의 부호가 되는 연산자
++, -- : 전위형 증감 연산자로 변수의 값을 1 증가, 감소시킨 상태에서 사용 후 저장된다.
boolean c1 = true;
boolean c2 = !c1;
System.out.printf("c1 : %s\n", c1);
System.out.printf("c2 : %s\n", c2);
//Integer.toBinaryString() : 정수를 2진수로 바꿈
int d1 = 100;
int d2 = ~d1;
System.out.printf("%32s\n",Integer.toBinaryString(d1));
System.out.printf("%32s\n",Integer.toBinaryString(d2));
int f1 = 100;
int f2 = 100;
++f1;
--f2;
System.out.printf("f1: %d\n", f1);
System.out.printf("f2: %d\n", f2);
- 논리 연산자
&&(and) : 피연산자가 모두 true여야만 결과가 true이고, 하나라도 false값을 가지면 결과는 false이다.
||(or) : 피연산자가 모두 false여야만 결과가 false이고, 하나라도 true값을 가지면 결과는 true이다.
boolean b1 = true;
boolean b2 = false;
System.out.printf("%s\n", b1&&b2);
System.out.printf("%s\n", b1&&true);
System.out.printf("%s\n", b2&&false);
System.out.printf("%s\n", b1||b2);
System.out.printf("%s\n", b1||true);
System.out.printf("%s\n", b2||false);
- 삼항 연산자
비교식 ? 값1 : 값2 : 주어진 비교식의 결과가 true이면 값1이, false이면 값2가 결과값이 된다.
int a = 100;
String s = "Hello";
boolean b = a>100 ? true : false;
int i = s=="Hello" ? 1 : 0;
System.out.println(b);
System.out.println(i);
a>100은 거짓이므로 b에는 false가 저장된다.
s=="Hello"는 참이므로 i에는 1이 저장된다.
- 후위형 증감 연산자
++/-- : 해당 변수의 값을 가져온 뒤 사용한 이후 증가, 감소시킨 값이 다시 저장되는 형태
int a = 100;
int b = 100;
System.out.println(a++);
System.out.println(a);
System.out.println(b--);
System.out.println(b);
//전위형과 비교
int c = 100;
int d = 100;
System.out.println(++c);
System.out.println(c);
System.out.println(--d);
System.out.println(d);
'Java' 카테고리의 다른 글
[Java 이론] 0504 스레드와 동기화 (0) | 2023.05.05 |
---|---|
[Java 이론] 0428 객체 지향 프로그래밍과 클래스 (0) | 2023.05.04 |
[Java 이론 ] 0427 조건문과 반복문 (0) | 2023.05.04 |
[Java 이론] 0425 자바 실행 구조와 식별자 (2) | 2023.05.04 |