개발/JAVA

06. JAVA 변수의 자료형(Data Type) / 상수(Conastant) / 형변환(Type Casting) / 이스케이프(Escape) / 형식 문자열

joolog 2020. 6. 8. 11:45
728x90
반응형

1. 변수의 자료형(Data Type)

- 변수에는 크게Primitive Type - 기본 자료형Reference Type - 참조형이 있다

-Reference Type - 참조형에는 클래스형, 인터페이스형, 배열, String등이 있지만 나중에 보자


2. 기본자료형(Primitive Type)

1) 수치형

* 정수형

- byte : 1byte (-2^7~2^7-1 : -128~127)

- short : 2byte (-2^15~2^15-1 : -32768~32767)

- int : 4byte (-2^31~2^31-1 : -2147483648~2147483647)

- long : 8byte (-2^63~2^63-1)

// long 형은 값 맨 뒤에 L/l(소문자)를 붙여주도록 한다. 
// 그렇지 않으면 정수형의 기본(Default값)인 int형으로 인식한다. 
long a = 123456789L / 123456789l;

* 실수형 (소수점)

- float : 4byte

- double : 8byte

// long 형과 마찬가지로 float 형도 맨뒤에 F/f를 붙여준다 
// 실수형의 기본은 double형이다 
float f = 3.3F / 3.3f;

- 정수형에서는 int, 실수형 에서는 double 이 default 이다.

- 소수점이 없는 숫자는 int형, 소수점이 있는 숫자는 double형으로 간주한다

- long > int > short > byte

byte a = 1;
byte b = 2;
byte c = a + b; // [x] 같은 형 끼리 더해도 default는 int이므로 형변환이 필요하다
byte c = (byte)(a+b); // [o], 형변환
int c = a + b; // [o]

int d = 1;
long e = 2l;
int f = d + e; // [x], 디폴트가 int지만 int보다 큰 long형과 연산이므로 오류
int f = (int)(d + e); // [o], 형변환
long f = d + e;

// long형 선언
long g = 1000;
long h = 1000000000l;

/* 
    실수형에서 같은 float형끼리의 연산은 float형이고
    float과 double은 double이 된다
*/
float f = 10; // 소수점이 아닌경우 안붙여도됨
float f1 = 5.5f;
float f2 = f + f1; // [o]
double d = f + f1; // [o]

2) 문자형

 

- char (2 byte) : 보통 문자를 캐릭터형(차 라고도 부름)이라고 한다

ex) '가', 'A' 등등 한 문자를 할땐 '' 외따옴표 안에 넣고 여러 문자인 경우 "" 쌍따옴표 안에 넣는다 "Hello World"

- char형은 메모리에 저장될때 아스키 코드값으로 저장된다

 

char ch = 'A';
System.out.print(ch); // A 출력됨
System.out.print(ch + 1); // 66 출력됨

* 컴퓨터는 0과 1밖에 모르기 때문에 문자 혹은 기호들은 아스키 값으로 저장된다

* 예시처럼 A는 문자지만 숫자를 더할경우 A는 65로 인식한다

(char형은 int보다 작은 형이기때문에 숫자를 더하면 int가됨)

3) 논리형

- boolean (1byte) : true, false값만 있다

※ 자료형의 규칙

- 실수 > 정수

- double > float > long > int > short > byte,char

 

- 큰 자료형과 작은 자료형의 연산 결과는 큰 자료형을 따른다

ex) long + int => long,

double + float => double

* int or float 으로 남기고 싶으면 형변환 해주자

 

- 같은 자료형 끼리의 연산결과는 자료형을 따른다

단, int 형보다 작은 자료형들끼리 연산결과는 int형

 

- 큰 자료형을 더 작은 자료형으로 대입 불가능

int a = 100000;
byte b = a; // [x], 큰 그릇을 작은 그릇에 넣을수 없다
byte b = (byte)a; // [o], 가능은 하지만 byte범위를 벗어날 경우 이상한 값이 나오므로 하지말자

- 정수형과 실수형의 연산결과는 실수형 (크기상관없이 실수 우선)

long l = 1; // 8 byte
float f = 2; // 4 byte
System.out.print(l + f); // type을 확인해보면 float형이 나옴

 


3. 상수 (Constant)

- 절대로 변하지 않는 불변의 값

- 상수로 정의시 final을 붙여준다

public static final int A = 10;

 

- 상수의 변수명은 보통 대문자로 정의한다 (가독성을 위함)

- 상수의 값을 변경할 시 오류

- 반드시 초기화해야됨

public static final int MY_CONSTANT=10;
int num;
public void Hap() {
	num=20;
	MY_CONSTANT=20; // [x], 값은 변하지 않음

	System.out.print(num + MY_CONSTANT);
}

4. 형변환 (Type Casting)

- 묵시적 형변환

byte b = 1; 
int i = 2; 
int i1 = b + i;

- 강제적 형변환 : 큰 그릇은 작은 그릇에 넣고자 할때

byte b = 1; 
int i = 2; 
byte b1 = (byte)(b + i);

5. 이스케이프 (Escape)

- 기존 문자의 기능을 탈출(escape)하고 새로운 기능을 부여받은 문자 (\ 역슬래시를 사용, 폰트마다 다르게 표기됨)

 

* 이스케이프 문자 종류

- \t (tab기능)

- \n (줄바꿈, 엔터값)

- \r (커서를 맨 앞으로)

System.out.print("Hello World"); // Hello World 가 출력
System.out.print("Hello World");
System.out.print("Java");
/* 
    출력시 Hello WorldJava가 출력된다
    이럴때 이스케이프 문자를 사용한다
*/

System.out.print("Hello World\t");
System.out.print("Hello World");
// Hello World    Hello World 가 출력, 탭만큼 들여쓰기가 됨

System.out.print("Hello World\r\n");
System.out.print("Hello World");
System.out.print("Hello World\r\n Java");
/* 
    Hello World
    Hello World
    엔터값

    Hello World
    Java
*/

- \' (외따옴표)

- \" (쌍따옴표)

- \\ (\ 출력)

System.out.print("Hello World 'Java'");
System.out.print("Hello World "Java"");
// 위 두 값은 오류가 난다 이럴경우 \를 사용해주자

System.out.print("Hello World \"Java\""); // Hello World "Java"

* print의 종류는 3가지 이다

- print (줄바꿈 기능 없음)

- println (줄바꿈기능 추가) : print보다 println을 더 많이 사용한다

- printf (형식 문자열)


6. 형식 문자열(Format String)

- 형식 문자열은 출력 형식을 지정해주는 문자열을 의미

- printf 메소드에서 사용 가능하며 %를 사용

 

* 종류

- %d (정수)

- %f (실수)

- %c (문자 char)

- %b (논리)

- %s (문자열 String)

- %n (줄바꿈)

System.out.printf("나는 %d살", 28); // 나는 28살

- 형식문자열이 들어간경우 갯수에 맞게 값이 있어야 된다 (%n제외)

System.out.printf("내 이름은 %c, 나이는 %d, 사는 곳은 %s%n입니다", "코난", 28, "서울"); 
// 내 이름은 코난, 나이는 28, 사는 곳은 서울 
// 입니다

* 만약 타입을 모를 경우 %s 를 써주면 된다(상위클래스)

* 자리수 표시

double d = 1.2345678;
System.out.printf("%.2f", d);
// 소수점 2개까지 출력하겠다 => 1.23

System.out.printf("%4d", 1);
// +는 왼쪽으로 0001
System.out.printf("%-4d", 1);
// -는 오른쪽으로 1000

 

728x90
반응형