오늘도!!!!!!!!강의를 듣는 것이 좀 주가되겠지만 정리하는 내용은 내가 헷갈리고 잘 모르겠는 것만 집어서 기록한다!
왜냐하면 클래스를 선언할 때 기본생성자가 눈에보이진 않지만 있기 때문이다.
기본 생성자의 형태는 클래스이름() {}
Public class Person{
String name;
int age;
String address;
}
...
pulbic static void main(String[] args){
Person pA = new Person();
}
클래스를 사용할 때 new 를 보통 앞에 붙이는데 이것이 생성자를 호출하는 키다.
위에 있는 예제의 생성자는
Person(){}
이 되는 것이다.
생성자의 특징
1️⃣반환 자료형이 없다.
2️⃣클래스명과 이름이 똑같다.
3️⃣여러 개가 존재할 수 있다.
들어가는 매개변수 타입과 개수에 따라서 생성자를 알아서 선택하게 됨.
런타임구역과 아닌구역으로 나뉘어져 있다..


레퍼클래스는 기본 자료형을 객체로 감싸고 있는 클래스 이다.
리스트였나?? 뭐 비슷한 자료형을 int로 선언할때가 있고 Integer로 선언할때가 있고 그렇지않나
Integer는 보통 Integer.parseInt() 쓸 때 많이 사용해봤다.
이외에도 String도 래퍼클래스다. 사용해보면 혼자 변수 시작점이 대문자 S임
| 기본 자료형(Primitive Type) | 종류 | 범위 | 바이트 | 비트 | 래퍼 클래스(Wrapper Class) |
|---|---|---|---|---|---|
boolean | 논리형 | true/false | 1 | 8 | Boolean |
char | 문자형 | 0~65535 유니코드 값 | 2 | 16 | Character |
byte | 정수형 | -128~127 | 1 | 8 | Byte |
short | 정수형 | -32,768 ~ 32,767 | 2 | 16 | Short |
int | 정수형 | -2,147,483,648 ~ 2,147,483,647 | 4 | 32 | Integer |
long | 정수형 | -9,233,372,036,854,775,808 ~ 9,233,372,036,854,775,807 | 8 | 64 | Long |
float | 실수형 | 약 소수점 6~7자리까지 | 4 | 32 | Float |
double | 실수형 | 약 소수점 15~17자리까지 | 8 | 64 | Double |
.
.
기본형 → 래퍼형으로 변환하는 과정을 오토박싱이라고 함
Integer는 참조형(객체)이지만 기본형 int 값을 직접 대입할 수 있음.
Integer num3 = 10; // ✅ 오토박싱
Integer num = Integer.valueOf(10); // 원래는 이렇게 선언되어야 함.
.
래퍼형 → 기본형으로 변환하는 과정으로 오토언박싱
num은 Integer 객체(참조형변수)지만 기본형 int 변수에 대입할 수 있음
Integer num3 = 10;
int num = num3; // ✅ 오토 언박싱
int a = num.intValue(); // 원래는 이렇게 바꿔줘야 함.
추상화까지 보고 정리예정
1. 양의 정수(0포함)을 입력받기
2. 사칙연한 기호(+,-,×,÷)입력받기
3. 위에서 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력
if switch4.반복문을 사용하되, 반복의 종료를 알려주는 “exit” 문자열을 입력하기 전까지 무한으로 계산을 진행할 수 있도록 소스 코드를 수정하기
당장 생각나는 것은 이정도인데 고려할 사항과 요구사항은 다음 레벨에 가서 계속 추가되기 때문에 매 게시글마다 갱신하고 복붙해줄 생각이다.
오늘은 먼저 - 정수를 받는 타이밍에 스트링이나 연산자를 입력받으면 안됨. <<이것부터 해결해보려고한다.
일단 받은 값을 str로 받아서
Integer.parseInt 시도 하는 수순으로 ?? 할까싶다.
만약에 받은 값들 안에 int범위에 없는 문자가 들어가면 다시 입력하라고 보낼것이다.
System.out.println("연산을 진행할 첫 번째 정수를 입력해주세요 : ");
String str = sc.next();
int value = Integer.parseInt(str);
이 부분인데, 입력에 문자열을 넣어봤다.

이걸이제 try-catch문으로 이 오류가 뜨면
메시지를 주고 다시 받아라~~ 라고 바꿔줄 것이다.
라고생각했었다.
근데 try-catch문이면 int value1 = sc.nextInt(); 여기서 오류가 나면 다시 받기로 해도 되지 않나?? 불필요한 String 변수를 안 써도 될 것 같다.

한번해보겠따~!!
int[] values = new int[2];
System.out.println("연산을 진행할 "+ (0+1) +"번째 정수를 입력해주세요 : ");
try{
values[0] = sc.nextInt();
sc.nextLine();
}catch (InputMismatchException e) {
System.out.println("정수 값을 입력해주세요!");
}
값 똑같이 두개 받을거라서 for문 두번돌리면되는거아닌가? 라는 생각으로 일단 포멧은 이렇게 만들었다

생각대로 잘나온다
for문에 넣으니 문제가생겼다
for(int i = 0; i < 2; ){
System.out.println("연산을 진행할 "+ (i+1) +"번째 정수를 입력해주세요 : ");
try{
values[i] = sc.nextInt();
sc.nextLine();
i++;
}catch (InputMismatchException e) {
System.out.println("정수 값을 입력해주세요!");
}
}

int값을 넣어줘도 계속 InputMismatchException에러가 난다.
이 에러의 이유는 nextInt()로 입력값을 읽어와서다..
nextInt() 같은경우 앞에있는 Int값을 우선 받아오는 것이 우선??이라고 해야하나 여튼 버퍼가 비워지지 않아서 생기는 문제임..
그래서 catch문에도 nextLine()으로 버퍼를 비워주는 과정을 거쳐야한다.
for(int i = 0; i < 2; i++){
System.out.println("연산을 진행할 "+ (i+1) +"번째 정수를 입력해주세요 : ");
try{
values[i] = sc.nextInt();
if(values[i] < 0){
System.out.println("0 이상의 값만 입력이 가능해요.");
sc.nextLine();
i--;
}
}catch (InputMismatchException e) {
System.out.println("정수 값을 입력해주세요!");
sc.nextLine();
i--;
}
}
이제 무한루프를 돌려주되, 플래그를 설정해주고
계산값을 출력했을 때,
계산기 계속 쓸거냐고 물어보기만 추가하면 끝
boolean exitFlag = true;
...
while(exitFlag){
계산기 어쩌고 저쩌고~~
System.out.print("계산을 종료하시려면 'exit'를 입력해주세요 : ");
str = sc.nextLine();
if(str.equals("exit")){
exitFlag = false;
System.out.println("계산기를 종료합니다.");
}
else{
System.out.println("입력된 값 : " + str);
System.out.println("계산을 다시 시작합니다.");
}
}
sc.close();
이런식으로 마무리 해줬다!!! 푸시푸시도끝
Lv.1 마무리한 깃허브~!
https://github.com/Ksr-ccb/Sparta-Chapter2