- 변수와 자료형
** casting(형변환)
- 신분이 바뀌는것
- ( )연산자 사용
- casging method => .parseInt(), .parseDouble()
Ex1)
package com.javatean.jse;
import java.math.BigDecimal;
public class JavaEx7 {
public static void main(String[] args) {
// int num1 = 1;
int num1 = 200;
// byte num2 = num1; // 큰 자료가 작은 자료에 들어갈수 없기 대문에 오류가 난다 : 타입우선
byte num2 = (byte) num1;
// 큰 자료형 => 작은 자료형 : 형변환(castiong, down-casting)
System.out.println("num2 : " + num2);
// 값의 범위를 초과하게 되면 값의 손실(결손) 발생된다
num2 = 200; // short (X), int (O)
// java에서는 모든 정수는 타입(자료형) 무언급시 값(리터럴)은 int 형으로 간주한다
// 일반적인 정수 => int
short num3 = 200;
int num4 = num2;
num4 = num3; // 작은자료형에서 큰자료형으로 들어갈때는 문제없다
// 작은 자료형 => 큰 자료형 : 형변환(promoting, up-casting)
num4 = 'c'; // ASCII 코드 : 'a' =97, 'A'=65, '0'=48
// 자동 형변환
System.out.println("num4 : " + num4);
num4 = (int)1L; // long -> int
long num5 = 1L; // L(l) 을 꼭 붙혀서 사용해야한다
System.out.println("long형의 최대 값 : " + Long.MAX_VALUE);
------------------------------------------------------------------------------------------------
BigDecimal big = new BigDecimal("9223372036854775808");
System.out.println("합계 : " + big.add(new BigDecimal("1")));
// long 형 범위를 넘어가는 정수 연산 - BigDecimal, BigInteger를 이용해 문자열로 간주시켜서 값을 계산한다
}
}
- 출력 화면
** 정리
- 큰 자료형 => 작은 자료형 : 형변환(castiong, down-casting)
- 작은 자료형 => 큰 자료형 : 형변환(promoting, up-casting)
- 값의 범위를 초과하게 되면 값의 손실(결손) 발생된다
- java에서는 모든 정수는 타입(자료형) 무언급시 값(리터럴)은 int 형으로 간주한다
- ASCII 코드 : ‘a’ =97, ‘A’=65, ‘0’=48
- long 형 범위를 넘어가는 정수 연산 - BigDecimal, BigInteger를 이용해 문자열로 간주시켜서 값을 계산한다
Ex2)
package com.javatean.jse;
public class JavaEx8 {
public static void main(String[] args) {
float num1 = 3.14F; // float 는 값 뒤에 F(f)를 기입해야한다 => 기입X : double타입
int num2 = (int)num1; // float -> int 형변환
System.out.println("num2 : " + num2);
// 소숫점 뒤의 값은 생략된다 : 정수 부분만 나온다
num1 = num2; // int -> float
System.out.println("num1 : " + num1); // 실수 표시가 된다
--------------------------------------------------------------------
String str = "123";
String str = "abcd" // (X)
// => java.lang.NumberFormatException 예외(exception) 발생
// int num3 = (int)str; (X) 형변환이 되지 않는다
// * 형변환(casting) 메서드(함수)
// String(정수 성분의 문자열에 국한(한정)한다) => 정수(int)로 변환
int num3 = Integer.parseInt(str) + 1;
// String => int (변환과정) - 가장 많이 사용한다 (변환과정이 짧다)
System.out.println("num3 : " + num3);
int num4 = Integer.valueOf(str) + 1;
// String => Integer => int (변환과정)
System.out.println("num4 : " + num4);
int num5 = new Integer(str) + 1;
// String => Integer => int (변환과정)
System.out.println("num5 : " + num5);
// int <=> Integer : 가본 자료형과 기본 자료형의 랩퍼 클래스간에는 자동 형병환이 된다
// 오토-박싱(aut-boxing) : 기본 자료형 => 기본 자료형의 랩퍼 클래스로 변환 되는것
// 언박싱(unboxing) : 기본 자료형의 랩퍼 클래스 => 기본 자료형 으로 변한 되는것
// box => 클래스(class) 상징한다
-------------------------------------------------------
int num6 = 4 / 3; // 정수(몫)
System.out.println("num6 : " + num6);
float num7 = 4 / 3; // 정수 부분만 있는 실수(몫)
System.out.println("num7 : " + num7);
float num8 = (float)4 / 3; // 정수 + 소수부 => 실수(몫)
System.out.println("num8 : " + num8);
float num9 = (float)4 / (float)3;// 정수 + 소수부 => 실수(몫)
System.out.println("num9 : " + num9);
}
}
- 출력화면
** 정리
- 형변환(casting) 메서드(함수) 확인하기
- int <=> Integer : 가본 자료형과 기본 자료형의 랩퍼 클래스간에는 자동 형병환이 된다
- 오토-박싱(aut-boxing) : 기본 자료형 => 기본 자료형의 랩퍼 클래스로 변환 되는것
- 언박싱(unboxing) : 기본 자료형의 랩퍼 클래스 => 기본 자료형 으로 변한 되는것
- box => 클래스(class) 상징한다
* 메서드 오버로딩
-
- 메서드(함수) 의 인자부를 다양하게 변화 => 같은 이름의 메서드를 다양하게 사용
- 인자의 자료형 종류/갯수/순서
* 시스템 입출력
- 프로그래밍 언어에는 시스템 표준 출력 장치와 표준 입력장치가 있다
- 표준 출력 장치 : 모니터
- 표준 입력 장치 : 키보드
-
모니터로 변수값 출력
1) println() 메소드
2) printf() 메소드
- 개발자가 원하는 형식화된 문자열(formal string) 출력(전체 출력 자리수 및 소수 자릿수 제한)
- 형식 문자열에서 %와 conversion 외에는 모두 생략가능
- 형식 문자열에 포함될 값 2개 이상인 경우 값의 순번(argument_index$)표시해야한다.
- 후 처리된다
-
conversion 에서는 제공되는 값의 타입에 따라 d(정수),f(실수),s(문자열) 입력

-
- 키보드로 입력된 내용을 변수에 저장
- 1) 키코드 : 키보드에서 키를 입력할 때 프로그램에서 숫자로 된 키코드를 읽음
- System.in의 read()사용 => 얻은 키코드는 대입 연사자 사용하여 int 변수에 저장
2) Scanner
package com.javatean.jse;
import java.util.Calendar;
public class JavaEx9 {
public static void main(String[] args) {
// formatter : 줄바꿈 기능이 없다 => \n OR %n 사용
System.out.printf("자바를 시작한 날은 %d월 %d일 입니다.\n",2,1); // %d : 정수 형태의 숫자
System.out.printf("자바를 시작한 날은 %s월 %c일 입니다.\n","2",'1'); // %s : 문자열,%c : 문자
System.out.printf("자바를 시작한 날은 %1$s월 %2$c일 입니다\n","2",'1'); // %1$s : 순서지정
System.out.printf("자바를 시작한 날은 %2$s월 %1c일 입니다.%n",'1',"2"); // %1c : 순서지정
System.out.printf("자바를 시작한 날은 %f월 %f일 입니다.%n",2.0,1.0); // %f : 실수 형태의 숫자
System.out.printf("자바를 시작한 날은 %d월 %d일 입니다.%n",(int)2.0,(int)1.0); // 실수 값=>정수값 변환
System.out.printf("자바를 시작한 날은 %.2f월 %.1f일 입니다.\n",2.0,1.0);
System.out.printf("자바를 시작한 날은 %e월 %g일 입니다.%n",2.0,1.0);
Calendar cal = Calendar.getInstance();
String str = String.format("오늘은 %1$tY년 %1$tb %1$te일입니다%n", cal);
System.out.println(str);
}
}
- 출력화면
package sec04.exam04;
public class QStopExample {
public static void main(String[] args) throws Exception {
int keyCode;
while(true) {
keyCode = System.in.read();
System.out.println("keyCode: " + keyCode);
if(keyCode == 113) {
break; //keyCode가 113과 동일할 경우 실행
}
}
System.out.println("종료");
}
}
package sec04.exam05;
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
String inputData;
while(true) {
inputData = scanner.nextLine();
System.out.println("입력된 문자열: \"" + inputData + "\"");
if(inputData.equals("q")) {
break;
}
}
System.out.println("종료");
}
}