본문 바로가기

배운내용 정리

Java 문법

내배캠 강의를 수강하면서 몰랐던 부분에 대해 정리하여 내 지식으로 만들려고 한다.

 

1.  래퍼 클래스 변수

래퍼 클래스(Wrapper Class)라는 말 그대로 기본형 변수를 클래스로 한번 랩핑(감싸는) 변수”라고 생각하시면 된다.

기본 타입의 래퍼 클래스

기본타입 래퍼 클래스
byte  Byte
short Short
int  Integer
long Long
float Float
double Double
char Character
boolean Boolean

2.박싱과 언박싱

기본 타입에서 래퍼 클래스 변수로 변수를 감싸는 것을 “박싱”이라고 부르며 래퍼 클래스 변수를 기본 타입 변수로 가져오는 것을 “언박싱”이라고 부릅니다.

//박싱
int number = 21;
Integer num = new Integer(number);

// 언박싱
int n = num.intValue();

3. 자동 형변환 

작은 타입 > 큰 타입 형변환 시(자동 형변환)

  • 더 큰 표현범위를 가진 타입으로 변환되는것이라 값의 손실이 없다.
  • 값의 손실없이 변환이 가능하기 때문에 컴파일러가 자동으로 형변환이 가능하다.

큰 타입 > 작은 타입 형변환 시(강제 형변환 = 캐스팅)

  • 더 작은 표현범위를 가진 타입으로 변환된는것이라 값의 손실이 생긴다.
  • 값의 손실이 생기기 때문에 자동으로 형변환을 해주지 않고 개발자가 선택하여 형변환을 해야 한다.

 

4. float

float은 int와 같은 저장공간을 가지고 있지만 long보다 더 넓은 범위를 표현 가능하다.

그 이유는  float은 부동이라는 의미를 가지고 있으며 소수점이 움직인다는 의미의 부동 소숫점 방식으로 숫자를 저장한다.

  • 고정 소숫점 방식: 정수를 표현하는 비트와 소수를 표현하는 비트수를 미리정하고 해당 비트만을 활용하여 실수를 저장하는 방식
  • 부동 소숫점 방식: 가수와 지수를 구분해서 저장하고 이 값들을 곱한 값을 저장하는 방식

지수부와 가수부

또한 float은 long보다 더 넓은 범위를 표현하기 때문에 자동 형변환이 불가능하다.

 

4. Scanner 사용할 시 주의할 점

Java 프로그램에서는 기본적으로 Scanner.in 객체의 next() 명령을 사용해서 입력받는다.

주의할 점은 next() 함수와 nextline()를 같이 사용할 때 발생한다.

next() 함수를 통해 값을 입력받고 다음 변수에 입력을 받을 때 nextline() 함수를 사용하면 스킵된다. 

코드 예시

// Use scanner
Scanner sc = new Scanner(System.in);
// Get input
System.out.print("입력1");
String input1 = sc.next();
System.out.print("입력2");
String input2 = sc.nextLine();
System.out.println("\n\n");
System.out.println("input1 = " + input1);
System.out.println("input2 = " + input2);

출력 결과

입력1 안녕하세요
입력2
input1 = 안녕하세요
input2 = 
Process finished with exit code 0

 

이렇듯 바로 넘어가진다. 해결방법은 next() 함수를 사용한 다음 줄에 입력받지 않은 nextLine() 함수를 사용해서 줄 바꿈을 없애버리면 된다.

Scanner sc = new Scanner(System.in);
// Get input
System.out.print("입력1");
String input1 = sc.next();
sc.nextLine();
System.out.print("입력2");
String input2 = sc.nextLine();
System.out.println("\n\n");
System.out.println("input1 = " + input1);
System.out.println("input2 = " + input2);

입력1 안녕하세요
입력2 출력됐습니다
input1 = 안녕하세요
input2 = 출력됐습니다
Process finished with exit code 0

'배운내용 정리' 카테고리의 다른 글

객체지향(1)  (1) 2023.10.16
Java 문법 Array, collection  (0) 2023.10.13
JVM  (1) 2023.10.13
JSON 이해하기 및 Fetch 프로젝트에 적용하기  (0) 2023.10.10
스파르타 플릭스 JQuery 적용하기  (0) 2023.10.05