공부일지

230914(Java)

CD가참둥그렇다 2023. 9. 14. 17:49

복습

Enter키의 기능

  • 줄바꿈, 커서를 맨 앞으로 가져온다
  • \r, \n의 두 기능이 동시에 작동한다.
  • \r은 커서를 맨 앞으로 보낸다. 캐리지 리턴
  • \n은 줄을 바꾼다. 라인피드

복습 테스트

  1. 알고 있는 모든 변수타입을 모두 초기화 하거나 선언 후 출력해보기
  2. 임시로 블럭킹 지역을 하나 만들고 그 안에서 변수 한 타입을 초기화 후 출력해보기
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);
	}
}

 

복습문제

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