Coding(Java)/Java(이론)2021. 8. 17. 08:00
반응형

[Java] 3. 자료형

 

 

자바에서 자료형은 기본 자료형과 참조 자료형(객체 자료형) 이 두 가지로 나뉜다.

 

기본 자료형

 

기본 자료형은 컴파일러에 의해 해석되는 자료형이고 그 종류는 다음과 같다.

자료형 키워드 크기 기본값 표현범위
논리형 boolean 1bit false true/false(0, 1 아님!)
문자형 char 2byte \u0000 0~65,535
정수형 byte 1byte 0 -128~127
short 2byte 0 -32.768~32.767
int 4byte 0 -2,147,483,648~2,147,483,647
long 8byte 0 -9,223,372,036,854,775,808
~9,223,372,036,854,775,807
실수형 float 4byte 0.0 -3.4E38~+3.4E38(E:밑이 10인 지수)
double 8byte 0.0 -1.7E308~+1.7E308

 

앞서 다루었던 System.out.println("내용");은 내용을 출력하고 줄바꾸기의 기능을 수행한다. 

 

출력을 다음과 같이 정리할 수 있다.

System.out.print("내용"); : 내용만 출력한다.

System.out.println("내용"); : 내용을 출력하고 줄바꿈한다.

System.out.printf("내용%s\n",서식에 의한 출력방법); : 내용과 맞는 서식이 출력된다.

여기서 System은 클래스명, out은 객체명, println:메소드명이고, 메소드⊂객체⊂class

 

논리형 자료는 참/거짓을 따질 때 사용되며 true 또는 false를 상수로서 사용한다.

사용되는 출력서식에는 %b(소문자출력) 또는 %B(대문자출력)가 쓰이고, 변수를 정의할 때

키워드인 boolean이 사용된다.

 

정수형 자료는 소숫점이 없는 수(byte, short, int, long)이고, 사용되는 출력서식에는

%d(decimal, 10진수), %0(octal, 8진수), %x(hexa, 16진수)가 쓰인다. 

변수를 정의할 때는 byte, short, int, long이 사용되고, 보통 int가 많이 사용된다.

*정수형 자료 맨 끝에 L을 붙이면 long형 상수가 되고, 4byte가 할당된다.

*8진수는 앞에 0(숫자)을 붙이고, 16진수는 앞에 0x(숫자+소문자x)를 붙인다.

 

실수형 자료는 소숫점이 있는 수(float, double)이고, 사용되는 출력서식에는

%f(소숫점 이하 6자리까지), %e(소숫점 이하 6자리까지), %g(자릿수가 적은 쪽으로)가 쓰인다. 

*실수형 자료 맨 끝에 F를 붙이면 4byte가 할당된다

 

문자형 자료는 글자 1개('A', '한', '韓', 'お' 각각 글자 1개)이고, 자료형은 char, 사용되는 출력서식에는

%c(c는 character)가 쓰인다. 

*아스키코드(ASCII Code)

0에서 127사이의 값을 가지며 0~31은 제어 및 통신문자, 32부터는 일반문자를 나타낸다.

문자 'A'의 아스키코드 값은 65, 'a'는 97, ''(공백)은 32, '0'은 48, '1'은 49이다.

 

문단의 흐름을 제어하는 문자는 \문자(\+알파벳)로 나타내고 사용되는 \문자는 다음과 같다.

\r: carrage return(맨 앞으로 이동)

\n: new line(줄바꾸기)

\t: tab

\b: arrow key left

여기서 \를 문자로 인식시키려면 \\를 입력하고, "를 문자로 인식시키려면 \"를 입력, %를 문자로 인식시키려면 %%를 입력한다.

 

문자열 자료는 1개 이상의 문자가 나열된 데이터("ABC"<='A'+'B'+'C', "홍길동"<='홍'+'길'+'동')이고,

자료형은 string, 사용되는 출력서식에는 %s(string)가 있다. 

 

변수를 정의할 때 stack 메모리에 해당 자료형 크기 만큼의 공간을 할당한다. 

예:

byte b1;

b1=1000;

위의 예는 변수 b1을 byte형으로써 정의하고, 그 값을 1000으로 정의했음을 나타낸 것이다. 

위의 예를 다음과 같이 간단히 나타낼 수 있다.

byte b1=1000;

 

다음은 위 내용을 바탕으로 작성한 프로그램의 코드이다.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package mymain;
 
public class MaterialTest {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        boolean b1=false;
        boolean b2=(5==6-1);
        int      n=111;
        double   d=123.456;
        float    f1=1234.56789012F;
        float    f2=(float1234.56789012;
        char    ch='秦';
        String name="진시황제(秦始皇帝)";
        
        //논리형
        System.out.printf("%B\n",b1);//대문자 출력
        System.out.println(b2);//소문자 출력
        //정수형
        System.out.printf("%d\n", n);//10진수로 출력
        System.out.printf("%o\n", n);//8진수로 출력
        System.out.printf("%x\n", n);//16진수로 출력
        System.out.println(Integer.toBinaryString(n));//2진수로 출력
        System.out.printf("%d\n"0144); //8진수 144를 10진수로 출력
        System.out.printf("%d\n"0x64); //16진수 64를 10진수로 출력
        System.out.println(Integer.valueOf("10100111",2));//2진수 10100111을 10진수로 출력
        //실수형
        System.out.printf("%f\n", d);//소숫점 이하 6자리까지 표기
        System.out.printf("%e\n", d);//소숫점 이하 6자리표기+과학적표기
        System.out.printf("%E\n", d);//소숫점 이하 6자리표기+과학적표기+e를 대문자로 표기
        System.out.printf("%g\n", d);//자릿수가 적은 쪽으로 표기
        System.out.println(f1);
        System.out.println(f2);
        //문자형
        System.out.println(ch);
        System.out.printf("%c\n",0xd5cc);
        System.out.printf("%c\n",101);
        // \=>문자로 인식시키려면 : \\
        System.out.println("A\\B\\C");
        // "=>문자로 인식시키려면 : \"
        System.out.println("안녕 \"너무\" 반가워");
        // %=>문자로 인식시키려면 : %%
        System.out.printf("노트북 할인율 %d(%%)\n"30);
        //문자열자료형
        System.out.printf("%s\n",name);
    }
}
 
cs

실행결과:

FALSE

true

111

157

6f

1101111

100

100

167

123.456000

1.234560e+02

1.234560E+02

123.456

1234.5679

1234.5679

e

A\B\C

안녕 "너무" 반가워

노트북 할인율 30(%)

진시황제(秦始皇帝)


정렬해서 출력하기, 자료형 범위출력

 

정수값 n에 대해 출력공간을 m칸 확보하고 값을 오른쪽 정렬해서 출력하려면 System.out.printf("[%md]",n)으로 입력하고, 왼쪽 정렬해서 출력하려면 System.out.printf("[%-md]",n), 빈 공간을 0으로 채우려면 System.out.printf("[%0md]",n)을 입력한다. 

복합적으로 서식을 여러개 사용하려면 서식의 개수에 맞추어 입력값을 적으면 된다.

1부터 100까지를 출력하려면 다음과 같이 적으면 된다.

System.out.printf("%d부터 %d까지",1,100);

 

실수형에서 double형 실수 d에 대해 자릿수를 m으로 지정해서 소수 n자리까지 출력하려면 System.out.printf("[%m.nf]",d);를 입력한다.

왼쪽정렬을 하려면 정수의 경우처럼 System.out.printf("[%-m.nf]",d);(앞에 -부호 붙임)를 입력한다.

 

문자열자료형에서 문자열 str에 대해 m칸 확보하고, 출력문자수를 n개로 하겠다면 System.out.printf("[%m.ns]",str);을 입력한다(왼쪽정렬을 하려면 -부호를 붙인다). 

 

다음은 위 내용을 바탕으로 작성한 프로그램의 코드이다.

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
35
36
37
38
package mymain;
 
public class OrderingandOthers {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int n=123;
        double d=123.4567890123456789;
        float f=123.4567890123456789F;
        String name="홍길동";
        String str="대한민국은 민주공화국이다";
        
        // %10d => 출력 공간을 10칸 확보하고 값을 오른쪽 정렬해서 출력
        System.out.printf("[%10d]\n", n);
        // %010d => 빈 공간을 0으로 채워라
        System.out.printf("[%010d]\n", n);
        // %-10d => 왼쪽 정렬해서 출력
        System.out.printf("[%-10d]\n", n);        
        // 확보한공간<출력해야될 개수 => 확보공간은 무시됨
        System.out.printf("[%2d]\n", n);
        
        //자릿수 지정해서 출력 : %m.nf
        //m:전체 자릿수, n:소숫점 이하 자릿수
        System.out.printf("[%10.2f]\n", d); // m=10, n=2 align=right        
        //빈 공간은 0으로 채워라
        System.out.printf("[%010.2f]\n", d); // m=010, n=2        
        System.out.printf("[%-10.2f]\n", d); // m=-10, n=2 align=left        
        //소수점 이하 20자리까지 출력
        System.out.printf("[%10.20f]\n", d); // 10은 무의미한 값(없어도 됨)
        System.out.printf("[%.20f]\n", f);
        
        System.out.printf("[%10s]\n",name); //10칸 확보 후 "홍길동" 출력, align=right
        System.out.printf("[%-10s]\n",name); //align=left
        System.out.printf("[%10.6s]\n", str); //10칸 확보, 4s: 출력문자수는 4개
 
    }
 
}
cs

실행결과:

[       123]

[0000000123]

[123       ]

[123]

[    123.46]

[0000123.46]

[123.46    ]

[123.45678901234568000000]

[123.45678710937500000000]

[       홍길동]

[홍길동       ]

[    대한민국은 ]

 

반응형
Posted by skywalker222