티스토리 뷰

수업/└Java

[CH02]변수와 자료형

onlyun 2022. 1. 30. 13:33

※ 참고 ※

-하나의 소스 파일에 여러 개의 클래스가 들어갈 수 있으나 public class는 하나만 있어야 함.

-파일명 == public class 이름. 아닐 경우 에러 뜸.

-컴파일될 때, 소스파일이 아니라 클래스별로 만들어짐.

 

 

1. 데이터 표현

  2진수 8진수 16진수
10진수를 2로 나누어 표현 8로 나누어 표현 16으로 나누어 표현
맨 앞 0b 0 0x

└맨 앞에 붙인 것으로 2진수, 8진수, 16진수 구분 가능.

package ch02;
public class BinaryTest { //진수 표현
	public static void main(String[] args) {
		int num = 64;
        int bNum = 0b1010;
        int oNum = 012;
        int xNum = 0XA;
        
        System.out.println(num);   // 64
        System.out.println(bNum);  // 10
        System.out.println(oNum);  // 10
        System.out.println(xNum);  // 10
        
        System.out.printf("10진수 출력 %d\n", num);  // 64
        System.out.printf("8진수 출력 %o\n", oNum);  // 12
        System.out.printf("16진수 출력 %x\n", xNum);  //a
	}

}

-println(); 괄호 안의 내용을 출력하고 줄바꿈

-printf(); 줄바꿈 x. 서식 있는 출력.

 

(2) 2진수 음수 표현

2진수의 0과 1을 반전 → 맨 오른쪽에 +1

ex) 0011  -(0, 1 반전)→ 1100  -(맨 오른쪽 +1)→1101

 


2. 변수

변하는 값을 저장하는 공간, 그 공간의 이름. 할당받은 메모리 주소 대신 부르는 이름.

변수는 사용하기 전에 선언해야 하는데 변수 안에 넣을 자료형에 맞는 걸 써야 함. ex) 정수형 → int, 문자 → char

 

(1) 변수 선언

데이터형 변수명;
데이터형 변수명 = 초기값;

-데이터형 : 메모리에 저장될 데이터의 형식과 크기

  └기본형 : 변수에 데이터 저장 ex) int, float, char ...

  └참조형 : 변수가 저장된 위치(주소) 저장

_ex)

package ch02
public class DataType {
    public static void main(String[] args){
        int level;   // 정수형 변수 선언
        level = 10;  // 값 대입
        
        int level2 = 20; // 변수 선언과 동시에 초기화
    }
}

-변수 선언 시 유의점

  변수 이름은 알파벳, 숫자, 언더바(_), $로 구성. 대소문자 구분 가능.

  숫자 시작 불가, 키워드(public, class 등) 사용 불가. 공백 불가

 


3. 자료형

기본형

1 Byte(= 8 Bit) 정수형 문자형 실수형 논리형
1 Byte byte     boolean
2 Byte short char    
4 Byte int   float  
8 Byte long   double  

-String은 기본형이 아님. 비교 연산자 불가. .equals()사용

 

(1) 정수 자료형

양수, 음수, 0을 나타내는데 사용하는 자료형

 

-정수 자료형에 따른 수의 유효범위(표현할 수 있는 범위)

-2ⁿ ~ 2ⁿ -1
int : 4byte 메모리 공간을 차지하는 정수 자료형. 유효범위는 -2³¹ ~ 2³¹ -1

└ n : 정수 자료형의 byte 크기를 bit 단위로 바꿈. 4byte일 경우 32bit니까 n은 32인데 맨 앞의 부호칸이 있어서 -1해줌.

└ -1 해주는 이유 : 0은 양의 0, 음의 0이 없으니까. 하나 빼줌.

 

  byte short int long
유효범위 -128 ~ 127 -32,768 ~ 32,767 -2³¹ ~ 2³¹-1  
  바이트 단위 정보 저장
동영상, 음악 파일 전송 등
     

└정수 자료형의 유효범위를 벗어나는 수는 담을 수 없음.

byte num = 365;  //byte 자료형의 유효범위 벗어남. 오류
int num2 = 10000000000;  //int 자료형의 유효범위 벗어남. 오류
long num3 = 10000000000;  // 자바는 기본적으로 정수를 int형 처리하기 때문에 오류.
long num3 = 10000000000L;  // 숫자 맨 끝에 L(또는 소문자 l)을 붙여 long형임을 알려준다.

 

(2) 문자형

package ch02;
public class Variable {
    public static void main(String[] args) {
        char a = 'A';
        System.out.println("char a는 " + a);  // A
        System.out.println("A에 해당하는 정수값 " + (int)a);  // 65
		
        char a2 = 67;
        System.out.println("정수 67에 해당하는 문자는 " + a2);  // C
		
        int a3 = 80;
        System.out.println("정수 80에 해당하는 문자는 " + (char)a3);  //P		
    }
}

_덧붙여

char a = 'A';
System.out.println("A에 해당하는 정수값 " + (int)a);
                                          //정수형 변환

 

(3) 실수 자료형

소수점 자리 표현. 부동 소수점 방식.

float(4byte)형에 비해 double(8byte)형이 더 정밀하게 실수 표현. double형이 기본형.

float임을 숫자옆에 F를 붙여 표시함. (정수 자료형 long쓸 때, 숫자 옆에 L붙이던 것과 동일)

package ch02;
public class DataTypeTest {
	public static void main(String[] args) {
        double dnum1 = 3.14;
        float fnum = 3.14F;  //F안 붙이면 오류
		
        System.out.println(dnum1);  // 3.14
        System.out.println(fnum);  // 3.14
	}
}
package ch02;
public class DataTypeTest {
    public static void main(String[] args) {
        double dNum = 1;
            for(int i=0; i<100; i++) {
                dNum += 0.1;
            }
            System.out.println(dNum);  // 10.999999999999979
    }
}

└예상 값은 9이나 실제 출력되는 값은 10.999999999999979로 약간의 오차 존재

 

(4) 논리 자료형 : boolean

true나 false만 대입할 수 있고 결과값도 true나 false로 출력

package ch02;
public class DataTypeTest {
	public static void main(String[] args) {
        boolean winter = true;
        System.out.println(winter);  // true;
	}
}

 

(5) 자료형 없이 변수 선언(Java 10이후 생긴 문법)

-한번 선언한 자료형 변수를 다른 자료형으로 사용 불가

-지역 변수만 가능

package ch02;
public class TypeInference{
    public static void main(String[] args) {
        let i = 10;
        let j = 10.0;
        let str = "hello";
		
        System.out.println(i);
        System.out.println(j);
        System.out.println(str);
		
        str = "test"; // 문자열 대입 가능
        str = 3;  //string형으로 사용되었기에 정수형으로 사용 불가.
    }
}

 


4. 상수와 리터럴

(1) 상수

변하지 않는 수

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

MAX_NUM = 150; //상수는 값을 변경할 수 없음.

└상수 이름은 대문자, 언더바(_)연결. 상수는 값을 변경할 수 없음.

 

-상수 이용

프로그램 내에서 반복적으로 사용하면서 변하지 않아야 하는 값을 상수로 선언.

if(count == 30) { ... }
while(i < 30) { ... }

//상수 사용
final int MAX_STUDENT_NUM = 30;  //최대 학생 수를 바꿔야 할 때, 이것만 바꾸면 됨.
if(count == MAX_STUDENT_NUM) { ... }
while(i < MAX_STUDENT_NUM) { ... }

 

(2) 리터럴(리터럴 상수)

프로그램에서 사용하는 숫자, 문자, 논리값

숫자나 문자 등이 변수에 대입되는 과정은

숫자값이 어딘가의 메모리(상수풀)에 쓰여 있고 그것이 다시 변수 메모리에 복사되는 것.

 


5. 형 변환

자료형이 다르면 연산 불가. 자료형을 통일한 후 연산 가능

(1) 묵시적 형 변환_자동적

-바이트 크기가 작은 자료형 → 큰 자료형

byte bnum = 10;
int inum = bnum; // 묵시적 형 변환

└byte형 변수 bnum이 int형 변수 inum에 대입될 때 묵시적 형 변환 발생

 

-덜 정밀한 자료형 → 정밀한 자료형

int inum2 = 20;
float fnum = iNum2;  // int형 → float형

double = dnum;
dnum = fnum + inum; // float형 → double형

 

(2) 명시적 형 변환_수동

잘릴 때 왼쪽부터 잘리기 때문에 주의. 양수·음수 변환이나 제일 높은 자릿수가 짤릴 수도 있음.

-바이트 크기가 큰 자료형 → 작은 자료형

int iNum = 1000;
byte bNum = (byte)iNum;  //큰 자료형 → 작은 자료형. 자료 손실.
                         // byte형 유효범위 초과. 결과값 -24

-더 정밀한 자료형 → 덜 정밀한 자료형

duble dNum = 3.14;
int iNum2 = (int)dNum;  //실수형 → 정수형. 소수점 이하 생략. 자료 손실.
                        // 결과값 3

 

-형 변환 순서

괄호에 따라 순서 달라짐

double dNum1 = 1.2;
float fNum1 = 0.9F;

int iNum3 = (int)dNum1 + (int)fNum1; // 형 변환 후 연산
int iNum4 = (int)(dNum1 + fNum1);    // 연산 후 형 변환
System.out.println(iNum3);         // 결과값 1
System.out.println(iNum4);         // 결과값 2

 

'수업 > └Java' 카테고리의 다른 글

[CH03]연산자  (0) 2022.01.30
[CH00]Scanner  (0) 2022.01.30
[CH00]Java 기초  (0) 2022.01.29
[실습문제4]클래스  (0) 2022.01.28
[Java]상속  (0) 2022.01.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함