nueijeel

[Java 이론] 0426 변수와 자료형, 연산자 본문

Java

[Java 이론] 0426 변수와 자료형, 연산자

nueijeel 2023. 5. 4. 22:01

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);

 

728x90