공부일지
230914(Java)
CD가참둥그렇다
2023. 9. 14. 17:49
복습
Enter키의 기능
- 줄바꿈, 커서를 맨 앞으로 가져온다
- \r, \n의 두 기능이 동시에 작동한다.
- \r은 커서를 맨 앞으로 보낸다. 캐리지 리턴
- \n은 줄을 바꾼다. 라인피드
복습 테스트
- 알고 있는 모든 변수타입을 모두 초기화 하거나 선언 후 출력해보기
- 임시로 블럭킹 지역을 하나 만들고 그 안에서 변수 한 타입을 초기화 후 출력해보기
package pack02.VariableType;
public class Test_VariableType {
public static void main(String[] args) {
byte byte_1 = 4;
short short_1 = 124;
char char_1 = 65;
char char_2 = 'B';
int int_1 = 13546;
long long_1 = 13523442667L;
boolean boolean_1 = true;
String String_1 = "스트링";
System.out.println(byte_1);
System.out.println(short_1);
System.out.println(char_1);
System.out.println(char_2);
System.out.println(int_1);
System.out.println(long_1);
System.out.println(boolean_1);
System.out.println(String_1);
{
int int_2 = 545;
System.out.println(int_2);
}
}
}

Double 변수 타입
- 정수가 아닌 숫자, 즉 실수를 값으로 사용하기 위해서 실수형 변수 사용이 필요함.
- float와 double이 있고, double은 큰 자리수를 나타낼 수 있고, float는 데이터 사용을 적게 한다.\
- long과 마찬가지로 float는 float변수를 나타내기 위해 숫자 뒤에 F를 붙여야 한다.
package pack02.VariableType;
public class Ex06_Double {
public static void main(String[] args) {
float pie_f = 3.14F;
double pie_d = 3.14;
System.out.println(pie_f);
System.out.println(pie_d);
}
}

타입 변환
- 자동 타입 변환, 강제 타입 변환, 문자열 결합 연산 등이 있다.
- 변수의 타입을 다른 데이터 타입으로 변환하는 것
- 값의 허용 범위가 작은 타입이 큰 타입으로 저장 될 경우는 자동으로 타입 변환이 된다.
자동 타입 변환(Promotion)
- 묵시적 형 변환(UpCasting)이라고 하며 작은 타입이 큰 타입으로 자동 변환되는 것을 의미한다.
- 따로 코딩 없이 진행되기 때문에 묵시적이라는 표현도 사용 한다.
강제 타입 변환(Casting)
- 명시형 형 변환(DownCasting)이라고 하며 타입 변환을 위한 코드가 필요하다.
- 큰 허용 범위 타입의 데이터를 강제로 나누어 작은 허용 범위 타입으로 저장하는 것
- 실제 값이 작은 허용 범위의 타입의 허용 범위 안이여야 가능하다.
- 캐스팅 연산자 “()”를 사용하여 바꾸고자 하는 값의 앞에 강제로 타입을 변환하고자 하는 변수 타입을 작성하면 된다.
- 강제 타입 변환 시 데이터가 유실될 수 있다.
package pack03.TypeChange;
public class Ex01_Casting {
public static void main(String[] args) {
byte byte_v = 127;
short short_v = byte_v;
int int_v = short_v;
long long_v = int_v;
long long_v2 = 100;
int int_v2 = (int)long_v2;
System.out.println(long_v2);
System.out.println(int_v2);
double double_v2 = 3.14;
int_v2 = (int)double_v2;
System.out.println(double_v2);
System.out.println(int_v2);
}
}

테스트
double sum = 3.5F + 12;
System.out.println(sum);
- 위의 명령은 무슨 캐스팅이라고 표현하는가?
- 위의 명령은 몇 번의 캐스팅이 발생했는가?
A
- upcasting, 자동 타입 변환.
- 3.5F + 12의 계산이 우선되어 12가 Float 변수로 바뀌어 3.5F + 12F의 계산으로 1번 타입 변환이 된다.
- 결과 값을 double에 부여하기 위해 float 변수 값이 double로 타입 변환이 된다.
주의할 점
- 자바에서 float와 int 연산 시 근사치를 출력해 주기 때문에 정확한 값이 아닌 값이 나올 가능성이 높다.
- 자바 코드로 연산을 하면 안 된다. Database에서 값을 받아오기만 해야함
- 그래도 꼭 연산하겠다면 BigDecimal을 이용할 수 있다.
테스트
String 변수 str1, str2를 각각 10과 20의 값을 담아 초기화 시키고, 출력문에서 str1과 str2의 합을 출력해보자
package pack03.TypeChange;
public class Ex03_CastingString {
public static void main(String[] args) {
String str1 = "10", str2 = "20";
int int1 = Integer.parseInt(str1);
int int2 = Integer.parseInt(str2);
System.out.println(int1 + int2);
System.out.println(int1 +""+ int2);
String str_1 = "10";
String str_2 = "20";
System.out.println(str_1+str_2);
System.out.println(str_1 + (10 + 20));
}
}

- 스트링의 연산 법칙
- Concatenation(연결)
- String에 +연산을 할 경우 문자열의 연결로 처리한다.
- String에 연결된 모든 변수는 String으로 변환 후 문자열의 연결로 처리된다.
- 연산이 필요한 경우 괄호를 사용할 수 있다.
- WrapperClass(포장)
- String을 WrapperClass로 감싸우면 해당 타입으로 변한다.
- 변수 타입의 첫 글자를 대문자로 쓴다.
- 예외로 int → Integer를 사용한다.
- Integer.ParseInt(스트링)으로 처리하면 int로 변환된다.
- 예시
- int int1 = Integer.parseInt(str1); //str1에 담긴 문자열로 된 숫자를 int에 담아준다.
String 변환 테스트
- String str_v1 = “3.14” → double 형대로 변환 후 +1 해보기 : 4.14
- String str_v2 = “100” → int 형태로 변환 후 +100을 해보기 : 200
- double 형태로 저장 된 값 4.14를 int 변수에 담아보기
- 사용되는 캐스팅은?
- 강제 변환 타입, 다운캐스팅
- int 형태로 변환 된 200의 값을 short에 담아보기
- 사용되는 캐스팅은?
- 강제 변환 타입, 다운캐스팅
package pack03.TypeChange;
public class Ex04_CastingFinish {
public static void main(String[] args) {
String str_v1 = "3.14";
String str_v2 = "100";
double double_v1 = Double.parseDouble(str_v1);
System.out.println(double_v1 + 1);
int int_v1 = Integer.parseInt(str_v2);
System.out.println(int_v1+100);
int int_v2 = (int)double_v1+1;
short short_v1 = (short)(int_v1+100);
System.out.println(int_v2);
System.out.println(short_v1);
}
}

복습문제
- 변수의 타입이 여러 개로 나누어져 있는 이유.
- 메모리의 과다한 사용을 막기 위해 적절한 변수의 타입을 고를 수 있도록 나누어져있음
- 정수형 데이터 타입은 어떤 것들이 있는지?
- byte, short, char, int, long이 있다.
- 실수형 데이터 타입은 어떤 것들이 있는지?
- float, double이 있다.
- 데이터 타입을 바꾸는 형변환의 2가지 종류를 설명할 수 있는지?
- 업캐스팅과 다운캐스팅으로 구분된다.
- 업캐스팅은 더 좁은 범위의 데이터를 더 넓은 범위의 데이터 타입에 옮겨 담을 때 사용한다.
- 다운캐스팅은 더 넓은 범위의 데이터를 더 좁은 범위의 데이터 타입에 옮겨 담을 때 사용한다.
- 업캐스팅은 별도의 코드 없이 자동으로 변환되어 자동 타입 변환이라고 한다.
- 다운캐스팅은 별도의 코드를 작성하여 강제로 변환하여 강제 타입 변환이라고 한다.
- String 타입을 숫자 타입으로 바꿀 때 사용되는 클래스는 무엇인지?
- 변환하고자 하는 타입의 머리글자를 대문자로 작성한 것에 .parse를 붙여서 자동완성 시킨다.
- double로 변환시 Double.parseDouble ()
- int로 변환시 예외로 Integer.parseInt()
- 숫자 타입을 String으로 바꾸는 방법은?
- 숫자 타입 데이터를 넣은 후 +””를 뒤에 추가한다.
- 데이터 타입을 바꾸는 이유는?
- 다른 데이터 타입과 연산이 필요한 경우 사용된다.