JAVA - 변수

Luna·2022년 11월 23일
0

JAVA

목록 보기
2/32

변수

  • 변하는 숫자
  • 선언 : 변수타입 변수명; int a;
  • 소문자로 시작. 단어의 의미가 바뀌면 첫글자를 대문자로 쓴다. intValue
  • 상수(final) : 모두 대문자로 사용. 의미가 바뀌면 언더바 사용.
  • 데이터를 저장하려면 반드시 형태를 선언 해야 하고 형태에 맞지 않으면 저장 안됨.
  • 저장 형식 - 부호 / 지수 / 가수 (유효숫자)

    예시
    123.456 > +123.456 > +1.23456 * 10의 2승 -> 0 / 2 / 123456
    0.000123 > +0.000123 > +1.23 * 10의 -4승 -> 0 / -4 / 123

변수의 형태

기본형 변수

  • 종류와 크기가 정해져 있기 때문에 값으로 운영된다.
  • 선언과 함께 크기가 정해지는 데이터. 데이터를 바로 저장할 수 있다.
  1. 숫자
    1) 정수 - 소수점이 없다. 부호+숫자 : byte, short, int(기본), long
    2) 실수 - 소수점이 있다. 부호+지수+숫자(유효숫자) : float, double(기본)
  2. 문자 - 숫자로 운영되고 음수가 없음. 한글자. '로 묶어서 표시. 'A','B'; : char
    int형으로 자동 형변환 int a = 'A'의 출력값 : 65
  3. 논리 - 조건 연산의 결과 (if문) : boolean - true / false
값의 종류기본 타입메모리 사용 크기
정수byte1 byte
short2 byte
int4 byte
long8 byte
실수float4 byte
double8 byte
문자char2 byte
논리boolean1 byte

참조형 변수

  • 종류와 크기가 정해져 있지 않아서 주소로 운영된다.
    1.static - 변수와 메서드 (클래스 이름이 나타나면 자동으로 로딩)
    2.new - 클래스 -> 변수에 저장 : 주소
  • 가변으로 사용.
  • null 주소가 있어야 하는 곳에 없는 경우
  1. String - 문자열 char[]. "로 데이터를 묶는다. "Hello, World!"
    : index와 length를 갖고 있다.
  2. 배열[] - 문자열 배열. 동일한 타입의 데이터 여러개. 연속된 메모리 String[] int[]
    : index와 length를 갖고 있다.
  3. class - 다른 타입의 데이터 여러개. 변수 선언해서 사용. 관련있는 변수들끼리 묶어서 사용.
    -변수들 : int, String[], PrintName
    -초기화블록(내부) : { }, static{}
    -생성자(외부) - 클래스 이름과 같다. 리턴 타입이 주소로 정해져 있어서 없다. 클래스명() {}
    -메서드 - toString(), getter & setter

기본형 변수와 매칭이 되는 클래스

  • 참조형. 각각의 기본형 데이터를 저장하는 변수를 포함.
  • 래퍼클래스(Wrapper Class) : 기본형 변수와 자동 형변환 된다.
  • 클래스명 : Byte, Short, Integer, Long, Float, Double, Character, Boolean

데이터 처리

형변환

데이터 타입 크기에 따른 순서
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)

  • 작은타입 -> 큰타입 - 데이터 손실 없음. 자동 형변환.
byte byteValue = 10;
int intValue = byteValue;
  • 큰타입 -> 작은타입 - 데이터 손실 있음. 강제 형변환.
int intValue = 103029770;
byte byteValue = (byte)intValue;

예제 1 - 변수 선언과 초기화

// 변수를 선언해서 정수를 넣은 후 10을 더한 결과를 출력하시오.
// 공공의 여러개를 모아{~} 놓은 변수 예제
public class VariableExample {

	// 처음 시작하는 부분 - main()
    // 공공의 주소가 움직이지 않는 비어있는 main method의 선언 (문자열 여러개[] 변수선언)
	public static void main(String[] args) {
		// 10의 데이터 특성 : 정수, 작은 숫자, 연산 -> int로 선언
        // int type : 4byte 크기로 잡는다.
        // = 10 : 변수 value에 10을 넣어 주세요. 변수를 선언하면서 맨 처음 값을 넣는 작업을 초기화 라고 한다.
		int value = 10;		
		
		int result = value + 10;
		// System class 안에 out 변수의 println이라는 처리문
		System.out.println(result);
	}
}

예제 2 - byte 타입 변수

public class ByteExample {
	public static void main(String[] args) {
		byte var1 = -128;
		byte var2 = -30;
		byte var3 = 0;
		byte var4 = 30;
		byte var5 = 127;
//		byte var6 = 128; 컴파일 에러 byte의 값의 범위는 -128~127
		
		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var3);
		System.out.println(var4);
		System.out.println(var5);
	}
}

예제 3 - byte 타입 변수

// 잘못된 데이터의 처리 확인
public class GarbageValueExample {
	public static void main(String[] args) {
		byte var1 = 125;	// 최대 127까지만 가능
		int var2 = 125;		// 20억 이상 가능
		for(int i=0; i<5; i++) {
			var1++;
			var2++;
			System.out.println("var1(byte): " + var1 + "\t" + "var2(int): " + var2);
		}
	}
}

예제 3 오류 및 해결

  • 콘솔창에 \t을 적용한 코드가 세번째 행 부터 실행 되는 오류 발견

  • var1과 var2의 변수 값을 124로 초기화 시키고 다시 실행 해 본 결과 마이너스값이 붙은 행과 안 붙은 행의 탭 간격이 달랐음.
    -> 오류 아님

예제 4 - char 타입 변수

// 문자열 하나를 저장해서 문자로 출력하고 숫자(문자코드값-숫자)로 출력해 보자.
// 문자 데이터를 표시할 때 ''(따옴표 사용)
// 문자열(문자 여러개 - String) 데이터를 표시할 때 ""(쌍따옴표 사용)
public class CharExample {
	
	// 시작하는 main() 선언
	public static void main(String[] args) {
		
		// 진수
		// 2진수 - 숫자 2개로 운영(0,1)
		// 8진수 - 숫자 8개로 운영(0~7)
		// 16진수 - 숫자 16개로 운영 (0~15 : 0~F / 10부터 A)
		// 문자열 변수 선언. 초기값 세팅 문자열 A에 대한 값
		char c1 = 'A';
		char c2 = 65;
		char c3 = '\u0041';	 // 유니코드
		// 문자열 변수 선언. 초기값 세팅 문자열 가에 대한 값
		char c4 = '가';
		char c5 = 44032;
		char c6 = '\uac00';	 // 유니코드
		
		// 작은 범위의 데이터에서 큰 범위의 데이터로 전달하면 데이터가 누락되거나 변형되지 않기 때문에 자동 형변환
		int uniCode = c1;
		
		System.out.println(c1);
		System.out.println(c2);
		System.out.println(c3);
		System.out.println((int)c3);
		System.out.println(c4);
		System.out.println(c5);
		System.out.println(c6);
		System.out.println((int)c6);
		System.out.println(uniCode);
		System.out.println((char)uniCode);
		
		// 대문자 A(숫자로 보면 65 입니다.) 65부터 74까지 문자로 출력 해 보자
		for (int i=65; i<=74; i++) {
			System.out.println((char)i + " - " + i);
		}
		
		System.out.println((int)'a');
	}
}

예제 5 - long 타입 변수

public class LongExample {

	public static void main(String[] args) {
		
		// 데이터 저장 변수 - 데이터의 특성 타입
		// 10, 20, 100000000000
		// byte - short - int(20억+a) - long
		long var1 = 10;
		long var2 = 20L; // 반드시 long 타입으로 처리를 해야만 한다. 20을 long 타입으로 인식해 달라고 요청.
//		long var3 = 100000000000; // 정수를 작성하면 int라고 생각을 한다. 그래서 int 범위를 넘는 데이터는 오류
		long var4 = 100000000000L;
		
		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var4);
		
		// 허용 범위를 넘어가는 숫자의 처리는 문자열로 한다.
	}
}

예제 7 - float 타입과 double 타입

/*
 * 소수점이 있는 데이터 저장과 출력 -> 기본은 double
 */
// public - 공공의, class - 여러개
public class FloatDoubleExample {
	
	// 시작 메서드 - main()
	public static void main(String[] args) {
		
		double var1 = 3.14;
//		float var2 = 3.14;  // 소수점이 있으면 기본이 double(8byte)로 인식하기 때문에 float(4byte)로 넣을 수 없다. 
		float var2 = 3.14F; // F를 넣어서 float 데이터 명기. 혹은 (float)3.14;
		
		// 정밀도 테스트
		double var3 = 0.1234567890123456789;
		float var4 = 0.1234567890123456789F;
		
		System.out.println("var1: " + var1);
		System.out.println("var2: " + var2); // F는 출력이 안되고 데이터만 출력
		System.out.println("var4: " + var3);
		System.out.println("var5: " + var4);
		
		// e - 지수승 표시 : 실수 타입으로만 저장된다.
		int var5 = 3000000;
		double var6 = 3e6; // 3 * 10의 6승
		float var7 = 3e6F;
		double var8 = 2e-3; // 2 * 10의 -3승
		System.out.println("var6: " + var5);
		System.out.println("var7: " + var6);
		System.out.println("var8: " + var7);
		System.out.println("var9: " + var8);		
	}
}

예제 8 - boolean 타입

// 내부에 데이터를 저장해서 중지 또는 진행을 선택한다.
public class BooleanExample {	
	public static void main(String[] args) {
		boolean stop = true; // true, false 데이터를 저장하는 타입 boolean
		
		// 맞는지 틀린지 물어보는 처리문 if(조건) {true일 때 실행하는문} else {false일 때 실행하는문}
		if(stop) {
			System.out.println("중지합니다.");
		}
		else {
			System.out.println("시작합니다.");
		}
	}
}

0개의 댓글