반응형
01. Wrapper클래스의 개념
- 원시 데이터 타입의 자료형(Primitive Type)를 클래스로 표현한 자료형
- Byte클래스 , Short클래스 , Integer클래스 , Long클래스
- Float클래스 , Double클래스
- Character클래스
- Boolean클래스
02. int 변수 vs Integer클래스 객체
int 데이터타입(원시형)
int num1=100, num2=200;
int num3=num1+num2;
System.out.println("합계 = "+num3);
//합계 = 300
Integer클래스
- 정수값을 저장하고 정수값 관련 기능을 메소드로 제공하기 위한 클래스
//Integer.valueOf(Object i) - Integer 객체로 반환
// => 매개변수로 값을 전달받아 정수값이 저장된 Integer 객체를 생성하여 반환하는 메소드
//Integer.intValue() - int 값으로 반환
// => Integer 객체에 저장된 정수값을 정수형(int) 값으로 반환하는 메소드
Integer num1=Integer.valueOf(100);
Integer num2=Integer.valueOf("200");
Integer num3=Integer.valueOf(num1.intValue()+num2.intValue());
System.out.println("합계 = "+num3.intValue());
//합계 = 300
03. Wrapper클래스의 오토박싱과 오토언박싱 기능
- Wrapper 클래스는 오토박싱과 오토언박싱 기능으로 객체 생성 및 사용 가능
오토박싱(Auto Boxing)
- 원시 데이타 타입의 값을 자동으로 Wrapper 클래스의 객체로 변환하는 기능
오토언박싱(Auto UnBoxing)
- Wrapper 클래스의 객체를 자동으로 원시 데이타 타입의 값으로 변환하는 기능
Integer num1=100, num2=200; //정수값이 Integer 객체로 변환되어 참조변수에 저장
Integer num3=num1+num2; //Integer 객체에 저장된 정수값으로 변환되어 연산 처리
System.out.println("합계 = "+num3);
//합계 = 300
- 메소드들 중 기본형으로 처리 불가능하고 무조건 객체를 전달받아 처리해야하는 메소드가 있음,
- 그럴 때 Wrapper클래스를 이용하자!
04. Wrapper클래스 중 Integer객체의 메소드
Integer.valueOf(String s, int radix)
- 매개변수에 전달된 값으로 원하는 진수의 문자열을 정수값으로 변환하여 반환하는 메소드
Integer num=Integer.valueOf("ABC", 16);//int num=0xABC;
//Integer 객체에 저장된 정수값을 10진수로 출력
System.out.println("num = "+num);
//num = 2748
Integer.toOctalString(int i) / Integer.toHexString(int i) /Integer.toBinaryString(int i)
- Integer.toOctalString(int i) : 매개변수에 전달된 정수값을 8진수 형식의 문자열로 변환하여 반환하는 메소드
- Integer.toHexString(int i) : 매개변수에 전달된 정수값을 16진수 형식의 문자열로 변환하여 반환하는 메소드
- Integer.toBinaryString(int i) : 매개변수에 전달된 정수값을 2진수 형식의 문자열로 변환하여 반환하는 메소드
Integer su=50;
System.out.println("su(10진수) = "+su);
System.out.println("su(8진수) = "+Integer.toOctalString(su));
System.out.println("su(16진수) = "+Integer.toHexString(su));
System.out.println("su(2진수) = "+Integer.toBinaryString(su));
//su(10진수) = 50
//su(8진수) = 62
//su(16진수) = 32
//su(2진수) = 110010
Integer su=-50;
System.out.println("su(10진수) = "+su);
System.out.println("su(8진수) = "+Integer.toOctalString(su));
System.out.println("su(16진수) = "+Integer.toHexString(su));
System.out.println("su(2진수) = "+Integer.toBinaryString(su));
//su(10진수) = -50
//su(8진수) = 37777777716
//su(16진수) = ffffffce
//su(2진수) = 11111111111111111111111111001110
Integer.parseInt(String str) - 문자열을 정수값으로 반환
- 매개변수로 전달받은 문자열을 정수값으로 변환하여 반환하는 메소드
- 실행시 매개변수로 전달받은 문자열이 정수값으로 변환되지 못할 경우 NumberFormatException 발생!!
- 예외처리 권장
String str1="100", str2="200";
System.out.println("합계 = "+(str1+str2));//문자열 결합
//합계 = 100200
System.out.println("합계 = "+(Integer.parseInt(str1)+Integer.parseInt(str2)));
합계 = 300
05. ConsoleCalculateApp프로그램
package xyz.itwill.lang;
import java.util.Scanner;
//키보드로 사칙 연산식을 입력받아 연산결과를 계산하여 출력하는 프로그램 작성
//ex) 연산식 입력 >> 20 + 10
// [결과]30
// => 입력 연산식에서 사용 가능한 연산자는 사칙 연산자(*,/,+,-)만 허용
// => 형식에 맞지 않는 연산식이 입력된 경우 에러 메세지 출력 후 프로그램 종료
// => 입력 연산식에 공백 입력이 가능하도록 처리
public class ConsoleCalculateApp {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("연산식 입력 >> ");
String operation=scanner.nextLine().replace(" ", ""); //입력 연산식에 존재하는 모든 공백을 제거하여 저장
scanner.close();
String[] operatorArray={"*","/","+","-"}; //연산식에서 검색할 연산자가 저장된 String 배열 선언
int index=-1; //연산식에서 연산자를 검색하여 연산자의 시작위치값(Index)을 반환받아 저장
for(String str:operatorArray) {
//String.lastIndexOf(String str) : String 객체에 저장된 문자열에서 매개변수에 저장된 문자열을 뒤쪽부터 검색하여 문자열의 시작위치값을 반환하는 메소드
index=operation.lastIndexOf(str);
if(index!=-1) break; //연산식에서 연산자가 검색된 경우 반복문 종료
}
if(index<=0 || index>operation.length()-1) { //연산식에서 연산자가 없거나 연산자의 위치가 잘못된 경우 프로그램 종료
System.out.println("[에러]연산식을 잘못 입력하였습니다.");
System.exit(0);
}
try {
//연산자의 시작위치값을 이용해 연산식에서 연산자와 피연산자를 분리하여 저장
int num1=Integer.parseInt(operation.substring(0, index)); //연산자 앞부분의 피연산자 분리하여 정수값으로 변환해 변수에 저장
String operator=operation.substring(index, index+1); //연산자를 분리하여 변수에 저장
int num2=Integer.parseInt(operation.substring(index+1)); //연산자 뒷부분의 피연산자 분리하여 정수값으로 변환해 저장
int result=0; //연산자를 비교하여 피연산자의 연산 결과값을 저장
switch (operator) {
case "*": result=num1*num2; break;
case "/": result=num1/num2; break;
case "+": result=num1+num2; break;
case "-": result=num1-num2; break;
}
System.out.println("[결과]"+result); //연산 결과값 출력
} catch (NumberFormatException e) {
System.out.println("[에러]연산식에 숫자가 아닌 문자가 입력 되었습니다.");
} catch (ArithmeticException e) {
System.out.println("[에러]0으로 나눌 수 없습니다.");
} catch (Exception e) {
System.out.println("[에러]프로그램 실행에 예기치 못한 오류가 발생 하였습니다.");
}
}
}
/* 사용자가 계산할 수 없는 값 입력 */
//연산식 입력 >> sfsdf
//[에러]연산식을 잘못 입력하였습니다.
//연산식 입력 >> ㄶㄴㅇㄹㄴㄹㄶㄶㅁ
//[에러]연산식을 잘못 입력하였습니다.
/* 예외처리 - 사용자가 계산할 수 없는 잘못된 값 입력 */
//1.
//연산식 입력 >> sfdfs+sfsdf
//[에러]연산식에 숫자가 아닌 문자가 입력 되었습니다.
//NumberFormatException
//2.
//연산식 입력 >> 10/0
//[에러]0으로 나눌 수 없습니다.
//ArithmeticException
반응형
'java > java.lang' 카테고리의 다른 글
[java/lang] 6. Exception 클래스 (0) | 2024.06.16 |
---|---|
[java/lang] 5. StringBuffer 클래스 (0) | 2024.06.15 |
[java/lang] 3. String 클래스 (0) | 2024.06.14 |
[java/lang] 2. System 클래스 (1) | 2024.06.14 |
[java/lang] 1. Java API (0) | 2024.06.14 |