JAVA

자바 2일차

별메아리 2023. 1. 30. 12:31
728x90

정수 리터럴

package ch02;

public class IntegerLiteralExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int var1 = 0b1011;  // 2진수
		int var2 = 0206;    // 8진수
		int var3 = 365;		// 10진수
		int var4 = 0xB3;	// 16진수
		
		System.out.println("var1: "+ var1);
		System.out.println("var1: "+ var2);
		System.out.println("var1: "+ var3);
		System.out.println("var1: "+ var4);
	}

}

byte 타입 변수

package ch02;

public class ByteExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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);
	}

}

long 타입 변수

package ch02;

public class LongExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		long var1 = 10;
		long var2 = 20;
		// long var3 = 1000000000000;
		long var4 = 1000000000000L;
		
		System.out.println(var1);
		System.out.println(var2);		
		// System.out.println(var3);
		System.out.println(var4);
	}
}

char 타입 변수

package ch02;

public class CharExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char c1 = 'A';		// 문자를 직접 저장
		char c2 = 65;		// 10진수로 저장
		char c3 = '\u0041'; // 16진수로 저장
		
		char c4 = '가';		// 문자를 직접 저장
		char c5 = 44032;	// 10진수로 저장
		char c6 = '\uac00'; // 16진수로 저장
		
		System.out.println(c1);
		System.out.println(c2);
		System.out.println(c3);
		System.out.println(c4);
		System.out.println(c5);
		System.out.println(c6);
	}

}

String 타입

package ch02;

public class StringExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String name = "홍길동";
		String job = "프로그래머";
		System.out.println(name);
		System.out.println(job);
	}

}

이스케이프 문자

 

이스케이스(escape) 문자는 출력하는 문장 안에서 원하는 형식에 맞추어 출력할 수 있도록 줄을 바꾸는 등의 특별한 의미들을 나타내기 위해 사용된다.

 

역슬래시('\') 문자를 사용하며, 글꼴 설정에 따라 '\' 혹은 왼쪽에서 오른쪽 방향의 대각선 사선 모양의 문자로 표현된다.

\n 개행(줄바꿈)
\t 스크린 커서를 다음 탭으로 옮김
\r 캐리지 리턴(carriage return). 그 줄의 맨 앞으로 커서를 보냄.
\\ 역슬래시 문자 출력 시 사용.
주로 파일 경로 표시할 때 활용된다.
\' 작은 따옴표(single quotation mark) 표현
\" 큰 따옴표(double quotation mark) 표현

실수타입

float와 double 타입

package ch02;

public class FloatDoubleExample {
	
	public static void main(String[] args) {
		// 실수값 저장
		// float var1 = 3.14;  컴파일에러 발생
		float var2 = 3.14f;
		double var3 = 3.14;
		
		// 정밀도 테스트
		float var4 = 0.1234567890123456789f;
		double var5 = 0.1234567890123456789;
		
		System.out.println("var2: " + var2);
		System.out.println("var3: " + var3);
		System.out.println("var4: " + var4);
		System.out.println("var5: " + var5);
		
		// e 사용하기
		double var6 = 3e6;
		float var7 = 3e6F;
		double var8 = 2e-3;
		System.out.println("var6: " + var6);
		System.out.println("var7: " + var7);
		System.out.println("var8: " + var8);
	}
}

논리 타입

참과 거짓을 의미하는 논리 리터널로 true와 false를 사용합니다. 논리 리터널은 1byte크기의 boolean 타입 변수에 저장할 수 있습니다.

package ch02;

public class BooleanExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		boolean stop = true;
		if(stop) {
			System.out.println("중지합니다.");
		}	else {
			System.out.println("시작합니다.");
		}
	}

}

타입 변환

자동 타입 변환

값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생합니다.

package ch02;

public class PromotionExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 자동 타입 변환
		byte byteValue = 10;
		int intValue = byteValue;
		System.out.println("intValue: " + intValue);
		
		char charValue = '가';
		intValue = charValue;
		System.out.println("가의 유니코드: " + intValue);
		
		intValue = 50;
		long longValue = intValue;
		System.out.println("longValue: " + longValue);
		
		longValue = 100;
		float floatValue = longValue;
		System.out.println("floatValue: " + floatValue);
		
		floatValue = 100.5F;
		double doubleValue = floatValue;
		System.out.println("doubleValue: " + doubleValue);
	}	

}

강제 타입 변환

큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장하는 것

캐스팅 연산자 괄호()를 사용하는데,괄호안에 들어가는 타입은 나누는 단위입니다.

package ch02;

public class CastingExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int intValue = 44032;
		char charValue = (char) intValue;
		System.out.println(charValue);
		
		long longValue = 500;
		intValue = (int) longValue;
		System.out.println(intValue);
		
		double doubleValue = 3.14;
		intValue = (int) doubleValue;
		System.out.println(intValue);
	}

}

정수 연산에서의 자동 타입 변환

정수 타입 변수가 산술 연산식에서 피연산자로 사용되면 int 타입보다 작은 byte,short 타입의 변수는 int 타입으로 자동 타입 변환되어 연산을 수행합니다.  항상 int 타입으로 변환되는것은 아니며 두 연산자 중 허용 범위가 큰 타입으로 변환된다.

package ch02;

public class ByteOperationExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte result1 = 10 + 20;
		System.out.println(result1);
		
		byte x = 10;
		byte y = 20;
		int result2 = x +y;
		System.out.println(result2);
	}

}
package ch02;

public class LongOperationExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte value1 = 10;
		int value2 = 100;
		long value3 = 1000L;
		long result =  value1 + value2 + value3;
		System.out.println(result);
	}

}

실수 연산에서의 자동 타입 변환

실수 타입 변수가 산술 연산식에서 피연산자로 사용될 경우 두 피연산자가 동일한 타입이라면 해당 타입으로 연산되지만,피연산자 중 하나가 double 타입이라면 다른 doublue 타입으로 자동 타입 변환되어 연산을 수행합니다. 따라서 연산 결과는 double 타입이 됩니다.

 

 int 타입과 double 타입을 연산해도 동일한 과정을 거칩니다. 먼저 int 타입의 피연산자가 double타입으로 자동 변환되고 연산을 수행합니다.

int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; // result에 15.5가 저장됨

꼭 int 타입으로 연산을 해야 한다면 double 타입을 int 타입으로 강제 변환하고 덧셈 연산을 수행하면 됩니다.

int intValue = 10;
double doubleValue = 5.5;
int result = intValue + (int) doubleValue; // result에 15가 저장됨

연산식에서 자동 타입 변환

package ch02;

public class OperationPromotionExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte byteValue1 = 10;
		byte byteValue2 = 20;
		// byte byteValue3 = byteValue1 + byteValue2;  // 컴파일에러
		int intValue1 = byteValue1 + byteValue2;
		System.out.println(intValue1);
		
		char charValue1 = 'A';
		char charValue2 = 1;
		//char charValue3 = charValue1 + charValue2  // 컴파일에러
		int intValue2 = charValue1 + charValue2;
		System.out.println("유니코드= " + intValue2);
		System.out.println("출력문자= " + (char)intValue2);
		
		int intValue3 = 10;
		int intValue4 = intValue3/4;
		System.out.println(intValue4);
		
		int intValue5 = 10;
		//int intValue6 = 10 /4.0;
		double doubleValue = intValue5 / 4.0;
		System.out.println(doubleValue);
		
		int x = 1;
		int y = 2;
		double result = (double) x / y;
		System.out.println(result);
	}

}

+ 연산에서의 문자열 자동 타입 변환

자바에서는 + 연산자는 두 가지 기능을 가지고 있습니다. 피연산자가 모두 숫자일 경우에는 덧셈 연산을 수행하지만, 피연산자 중 하나가 문자열일 경우에는 나머지 피연산자도 문자열로 자동 변환되어 문자열 결합 연산을 수행합니다.

숫자+숫자 → 덧셈 연산 → 숫자

"문자열" + 숫자 → "문자열" + "숫자" → 결합 연산 → "문자열 숫자"

숫자 + "문자열" → "숫자"  + " 문자열" → 결합 연산 → "숫자문자열"

 

package ch02;

public class StringConcatExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 숫자 연산
		int value = 10 + 2 + 8;
		System.out.println("value: " + value);
		
		// 문자열 결합 연산
		String str1 = 10 + 2 + "8";
		System.out.println("str1: " + str1);
		
		String str2 = 10 + "2" + 8;
		System.out.println("str2:"+ str2);
		
		String str3 = "10" + "2" + 8;
		System.out.println("str3:"+ str3);
		
		String str4 = "10" + (2 + 8);
		System.out.println("str4:"+ str4);
	}

}

문자열을 기본 타입으로 강제 타입 변환

프로그램에서 문자열을 기본 타입으로 변환하는 경우가 매우 많다. 예를 들어 정수 및 실수 타입으로 변환해서 숫자 연산을 하는 경우입니다.

 

변환 타입 사용 예
String → byte String str = "10";
byte value = Byte.parseByte(str);
String → short String str = "10";
short value = Short.parseShort(str);
String → int String str = "10";
int value = Integer.parseInt(str);
String → long String str = "10";
long value = Long.parseLong(str);
String → float String str = "10";
float value = Float.parseFloat(str);
String → double String str = "10";
double value = Double.parseDouble(str);
String → boolean String str = "10";
boolean value = Boolean.parseBoolean(str);

 

문자열이 숫자가 아닌 알파벳이나 특수 문자, 한글 등을 포함하고 있을 경우 숫자 타입으로 변환 시도하면 숫자 형식 예외가 발생합니다.

String str = "1a";
int value - Interger.parseINt(str) // NumberFormatException(숫자형식예외) 발생

반대로 기본 타입의 값을 문자열로 하는 경우 간단히 string.valueOf() 메소드를 이용하면 된다.

 

기본 타입과 문자열 간의 변환

package ch02;

public class prmitiveAndStringConversionExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int value1 = Integer.parseInt("10");
		double value2 = Double.parseDouble("3.14");
		boolean value3 = Boolean.parseBoolean("true");
		
		System.out.println("value1: " + value1);
		System.out.println("value2: " + value2);
		System.out.println("value3: " + value3);
		
		String str1 = String.valueOf(10);
		String str2 = String.valueOf(3.14);
		String str3 = String.valueOf(true);
		
		System.out.println("str1: " + str1);
		System.out.println("str2: " + str2);
		System.out.println("str3: " + str3);
	}

}
728x90