1. 프로그래밍/1-2. Java

Java - [데이터 타입 / 형 변환 / 연산자]

yunyj99 2022. 2. 24. 11:20

1. 데이터 타입

자바에서도 다양한 데이터 타입에 따른 처리 동작이 모두 다르다.

 

1) 기본형 타입 (8개)

- 논리형 : boolean (1 byte)

             참, 거짓을 표현하는 데이터타입. true / false (소문자만 사용가능)

             기본값 : false

- 문자형 : char (2 byte)

             ' ' 작은 따옴표 사용해서 반드시 하나의 문자 데이터만 저장

             16bit 유니코드를 표현 가능

             기본적으로 정수형에 속함 ( 문자 <-> 숫자 변환 가능함. 연산할 때 정수로 계산됨!!)

             기본값 : 0 / ' '(공백문자)

- 정수형 : byte  short  int  long (1 2 4 8 byte)

             int 타입이 정수형타입의 기본형

             long 타입은 데이터 뒤에 L/l 붙여서 사용.  (ex. 100000000L, 1000000000l)

             기본값 : 0 0 0 0L

- 실수형 : float  double (4 8 byte)

             double 타입이 실수형 타입의 기본형

             float 타입은 데이터 뒤에 F/f 붙여서 사용

             double 타입은 데이터 뒤에 D/d 붙여서 사용 (but 기본형이므로 생략 가능함)

             기본값 : 0.0f 0.0d
 

2) 참조형타입 (기본형 제외한 나머지)

String , 배열 등..

 

 

* 참고로 데이터 값 => 리터럴(Literal) 이라고도 말함

 


   < 변수 >

- 변수 : 프로그램에 사용되는 데이터(리터럴)를 저장하기 위한 공간을 의미. 기본형타입 변수 / 참조형타입 변수로 구분 가능.

- 변수 사용 방법 :

    1) 변수의 선언   

        데이터타입 변수명;   ( ex. int age; )

    2) 변수 초기화

        ( ex. age = 0; )

    3) 변수의 사용 (값 출력, 값 변경)

       System.out.println(age);  -> 값 출력

       age = 10;                    -> 값 변경 = 변수의 재사용

 

* 식별자는 중복사용이 불가능하다. 즉 변수 재선언은 안 됨 !!

 


   < 상수와 리터럴 >

- 상수 : 항상 변하지 않는 값. final 예약어 사용해 선언

- 상수 이름은 대문자를 주로 사용하고, 단어를 연결하는 경우 _ 기호를 사용

- 프로그램 내부에서 반복적으로 사용하고, 변하지 않아야 하는 값을 상수로 선언하여 사용하면 좋음

final double PI = 3.14;
final int MAX_NUM = 100;

 

- 리터럴 : 프로그램에서 사용하는 모든 숫자, 문자, 논리값을 일컫는 말

아래에서 A, 10 과 같은 문자와 숫자를 리터럴 혹은 리터럴 상수 라고 한다. 리터럴은 변수나 상수 값으로 대입할 수 있다.

char ch = 'A';
int num = 10;

2. 데이터 형변환

- 데이터 형변환 : 데이터 형태를 변경. 연산, 프로그램 실행을 하다보면 자동으로 발생한다.

                             char(2)

                                l

byte(1) -> short(2) -> int(4) -> long(8)

                                 l    X    l

                             float(4)   double(8)

 

 

1) 묵시적 형변환(자동 형변환 / 프로모션)

- 사용하는 메모리 공간의 크기가 작은 곳에서 큰 곳으로 이동할 때 발생하는 데이터 형변환

- 자바에서는 데이터타입이 다른 경우 저장이 불가능하다. 하지만 저장이 가능한 경우 컴파일러가 자동형변환을 실행함!

byte bNum = 100;
int iNum;

// 컴파일러가 자동형변환 실행
iNum = bNum;

 

2) 명시적 형변환(강제형변환 / 타입캐스팅)

- 사용하는 메모리 공간의 크기가 큰 곳에서 작은 곳으로 이동할 때 발생하는 데이터 형변환.

- 컴파일러에게 개발자가 문제상황을 인지하고 있고, 그 문제에 대해서 알아서 처리하겠다 는 의미를 갖고 있음.

byte bNum2;
int iNum2 = 100;

bNum2 = (byte)iNum2;

 

 

* 연산시 형변환 일어남!!

연산할 때 자동으로 int로 변환되어 계산된다. 즉 char, byte, short를 이용한 계산은 자동으로 int로 변환되어 계산이 이루어짐!! 즉 연산할때는 CPU가 연산하기 좋은 int로 바꿔어서 계산하기 때문에 byte, short의 의미가 별로 없다. 

short s1 = 10;
short s2 = 20;
short s3 = s1 + s2;  // 계산할 때 int로 계산됨. Type mismatch 오류 발생!

//short s3 = (short)s1 + (short)s2; (x)
//short s3 = (short)(s1 + s2); (o)
//int s3 = s1 + s2; (o)

 

* 실수형 결과가 발생하는 연산은 최소 하나 이상의 실수형 데이터가 필요함

double dValue = 8/3;  // 2.0이 나옴

// 아래와 같이 사용하기
double dValue = 8d/3; 
double dValue = 8/3.0; 로 사용  // 또는 8.0/3

 

 


3. 연산자

1. 산술연산자 ( + - * / % )

2. 비교연산자 ( ==, !=, >, <, >=, <= )

    - boolean 타입으로 결과를 생성

3. 대입연산자 ( = )

    - 산술연산자 + 대입연산자  -> 복합 대입 연산자 ( +=, -=, *=, /=, %= )

4. 증감연산자(단항연산자)  ( ++A,  A++,  --A,  A-- )

    - 전위연산 : 해당 변수의 값을 사용하기 전에 처리   ++A, --A

    - 후위연산 : 해당 변수의 값을 사용하고 처리   A++, A--

5. 논리연산자 ( && AND 연산자,  || OR 연산자,  ! NOT 연산자 )

    - 논리표

A B && ||
T T T T
T F F T
F T F T
F F F F
A !A
T F
F T

   * 단락 회로 평가 : 논리 곱 연산과 논리 합 연산을 할 때 두 항을 모두 실행하지 않더라고 결과 값을 알 수 있는 경우에, 나머지 항은 실행되지 않음!!!!

 

6. 삼항(조건)연산자  (   (조건식) ? 값1:값2   -> 참일 경우 값1이, 거짓일 경우 값2가 반환됨.  true, false 값 반환받을 때는 조건식만 사용하기!)