이번 포스팅은 지난 JAVA 기초(1)에 이어 데이터 타입을 계속 알아보고
Scanner를 통한 입력, 서식지정자, 연산자까지 다뤄볼 것이다.


실습 환경은 이클립스로 진행
사진 첨부는 vsCode
실수 타입 float, double
소수점이 있는 수
자바에서 큰 실수나 작은 실수를 표현할 때 지수 표기법(exceptional notation)을 사용한다.
float 4바이트(32비트) -3.4 x 1038 ~ 3.4 x 1038 유효자릿수는 7double 8바이트(64비트) -1.8 x 10308 ~ 1.8 x 10308 유효자릿수는 15
- ‘f’나 ‘F’를 붙이면 float 타입 실수를 의미
- ‘d’나 ‘D’를 붙이면 double 타입 실수 의미
- ‘e’나 ‘E’는 기수 10을 의미 (5e2 = 5 x 102)
유효 자릿수 → 정밀도 결정 (웬만하면 double 타입을 사용하면 좋은 이유)
논리(boolean) 타입
boolean 1바이트(1비트) 기본값은 false
타입변환
자동 타입 변환
- 자바는 다른 데이터 타입끼리 연산 시 컴파일러에서 자동 타입 변환을 수행
- 데이터 타입은 크기가 큰 쪽, 표현 범위가 넓은 쪽으로 자동 변환된다.
- 큰 데이터 타입 변환 시 값은 원래의 값을 유지
- byte < char,short < int < long < float < double
강제 타입 변환(cast)
- (short), (int) 등
int num1 = (int)3.141592F;
← float 타입 실수를 int로 강제 변환
참고
- 자바는 오버플로우 방지를 위해 byte나 short는 연산 후 결과값이 자동으로 int로 변환한다.
- 자바 타입 변환은 수치 타입 데이터 사이에서만 가능 (수치와 논리 타입 사이 변환x, 기본과 참조 타입 사이 변환 x)



결과

콘솔로 값 출력하기 printf()
printf() 메서드를 이용해 원하는 형식으로 출력한다.
System.out.printf('%' + 옵션 + '서식지정자', 값1, ...)
옵션 : 출력 값의 필드 폭과 소수점 이하 자릿수 지정
서식지정자 : 출력될 데이터 타입 지정
예) System.out.printf(”%-6.3f”, 3.1415); → 출력 공간을 6칸 확보 후, 왼쪽부터 소수점 아래 3자리까지 실수로 출력
→ 3.142_
- -는 왼쪽 정렬(기본이 오른쪽 정렬)
- .3: 소수점 아래 3자리까지, 4자리는 반올림 → 3.142 (여기까지 글자수 5칸)
- 6 : 최소 공간이 6칸 → 3/./1/4/2/(공백) ← 왼쪽 정렬해서 공백이 오른쪽에 생기게 됨
서식지정자
%d : 10진수 정수
%o : 8진수 정수
%x : 16진수 정수
%f : 10진수 실수
%e : 지수 형식으로 실수
%c : 문자
%s : 문자열
(추가)
%% : %
- : 왼쪽부터 채운다 (기본은 오른쪽부터 채워진다)
%010d : 빈칸은 0으로 채운다
float num1 = 6.5E5F;
double num2 = 7.654321E-5d;
double num3 = 3123.14159234234563;
System.out.printf("%f\n", num1);
System.out.printf("%15.5f\n", num1);
System.out.printf("%-15.05f\n\n", num1);
System.out.printf("%f\n", num2);
System.out.printf("%15.9f\n", num2);
System.out.printf("%-15.09f\n\n", num2);
System.out.printf("%e\n", num3);
System.out.printf("%15.9e\n", num3);
System.out.printf("%-15.07e\n", num3);
실행결과
650000.000000 //float, double 기본 소수점 자릿수는 6이다.
650000.00000 //15칸 오른쪽 정렬, 소수점 5자리까지
650000.00000 //15칸 왼쪽 정렬
0.000077
0.000076543
0.000076543
3.123142e+03
03.123141592e+03
3.1231416e+03
소수점 자리 조정
- 2자리까지만 : %.2f
- 소수점 없애기 : %.0f
- 빈칸 0으로 채우기 : %0
System.out.printf("%.0f", d); // 출력: 3
헷갈리기 쉬운 예
System.out.printf("%-15.05f\n\n", num1);
.05는 빈칸에 0을 붙이란 얘기가 아니라 소수점 자리수를 나타낸다.
.5든 .05든 값은 동일하다.
System.out.printf("%-015.5f\n\n", num1);
-와 0은 같이 쓰지 말자. 왼쪽 정렬이 우선되고 0은 무시된다.
System.out.printf("%15.9f\n", num2);
[실행결과]
0.000076543
세어보면 16자리인데(.까지 센다) 항상 꼭 정확하게 15자리가 나오지 않는다.
printf의 동작방식은 “숫자를 다 보여주며 적어도 이렇게 넓게 찍어라”이기 때문에, 공백 줄이고 숫자를 늘리는 방식이 아닌, 최소폭 확보하는 규칙 + 숫자 길이에 따라 자동 확장하는 규칙 따로 적용
즉, %15.9f : 최소 15자리 공간 확보한다는 뜻
키보드로 값 입력하기
키보드로 입력 = 표준 입력(standard input)
모니터로 출력 = 표준 출력(standard output)
Scanner 클래스
- import문을 소스 파일 상단에 추가 ← import java.util.Scanner;
- Scanner 클래스 인스턴스를 생성 ← Scanner sc = new Scanner(System.in);
- Scanner 클래스 메서드를 이용해서 데이터를 입력받는다 ← String name = sc.nextLine();
- 사용이 끝난 Scanner 인스턴스 종료 ← sc.close()

package sec06.ex01;
import java.util.Scanner;
public class InputIntegerScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = 0;
float num2 = 0.0f;
double num3 = 0.0d;
String message = null;
String temp = null;
System.out.println("정수를 입력하세요. ");
temp = sc.nextLine();
num1 = Integer.parseInt(temp); //입력받은 문자열을 정수로 변환
/*String 즉 문자열로 입력받았기 때문
문자열 : "1234"+"4321" = 12344321
정수 : 1234 + 4321 = 5555
*/
System.out.println("입력한 정수는 " + num1 + "입니다.");
System.out.println("두 개의 실수를 입력하세요.");
temp = sc.nextLine();
num2 = Float.parseFloat(temp);
temp = sc.nextLine();
num3 = Double.parseDouble(temp);
System.out.println("첫 번째 실수 : " + num2);
System.out.println("두 번째 실수 : " + num3);
System.out.println("메세지를 입력하세요.");
message = sc.nextLine(); //문자열 개행으로 입력받는다.
System.out.println(message);
sc.close();
}
}
문자 입력
자바에서 문자만 따로 입력받는 방법은 없다.
먼저 nextLine() 메서드로 입력받고 String 클래스에서charAt() 메서드를 이용해 지정한 문자를 입력받는다.
package sec06.ex03;
import java.util.Scanner;
public class charInputTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char grade;
System.out.println("학점을 입력하세요.");
String temp = sc.nextLine();
grade = temp.toUpperCase().charAt(0); //입력한 문자열을 대문자로 변환 후, 첫 번째 문자를 가지고 온다.
System.out.println("학점: " + grade);
sc.close();
}
}
연산자
산술 연산자
- +, -, *, /, %(나머지)
- 대입 연산자
- = : 우측 값을 좌측에 저장
- += : 좌측 변수에 저장된 값에 우측 값을 더한 결과를 좌측에 저장
- -=
- *=
- /=
- %=
e.g. (sum += 2) == (sum = sum + 2)
비교교 연산자
- >, <, >=, <=, ==, !=
- 결과는 true 혹은 false
문자열 비교하기
자바에서 가장 많이 사용되는 데이터는 문자열. 같은 문자열인지 비교하는 경우가 많다.
문자열을 참조 타입 데이터이므로 비교 연산자로 비교할 수 없다.
문자열은 String 클래스에서 제공하는 equals() 메서드 이용해서 비교한다.
예) boolean sameName = name1.equals(name2);
논리 연산자
- 논리곱(AND), 논리합(OR)
- &&(논리곱), ||(논리합)
- ^(배타적 논리합) : 좌측과 우측의 논리값이 다르면 연산 결과는 true
- !(논리 부정) : 주어진 값과 반대의 논리값
package sec01.ex04;
public class LogicalOpTest {
public static void main(String[] args) {
System.out.println(!false);
System.out.println(false ^ false); //같으면 false
System.out.println(true ^ false); //다르면 true
System.out.println();
int a = 10, b = 10, c = 20;
boolean result = (a==b) && (b==c);
System.out.println(result);
System.out.println();
result = (a==b) || (b==c);
System.out.println(result);
System.out.println(!result);
}
}
싱글 논리 연산자와 더블 논리 연산자의 차이
논리곱 연산자 &&는 &와 연산 과정이 다르다.
&&는 먼저 좌측이 false면 우측을 확인하지 않고 바로 false를 리턴
&는 좌측이 false이더라도 우측 값 확인
||와 |도 마찬가지
단항 연산자와 삼항 연산자
- 부호 연산자 :+(생략), -
- 증감 연산자 : ++(1증가), - -(1감소)
증감 연산자의 위치에 따라 연산과정이 다르다.
int i = 0;
i++; //1
++i; //2
System.out.println(5 + ++i); //8
System.out.println(5 + i++); //8
- 삼항 연산자 : 조건식 ? 값1(수식1) : 값2(수식2)
조건식의 결과값은 반드시 boolean 타입이어야 한다. (true or false)
예)
int score = 89;
String result = (score >= 70) ? “합격” : “불합격”;
package sec02.ex01;
import java.util.Scanner;
public class ConditionalOpTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("시험 점수를 입력해 주세요");
String temp = sc.nextLine();
int score = Integer.parseInt(temp);
String result = ((0 <= score) && (score <= 100)) ? "바르게 입력했습니다." : "다시 입력해주세요.";
System.out.println(result);
//삼항 연산자는 if(조건문)로 대체할 수 있다.
if((0 <= score) && (score <= 100)) {
result = "바르게 입력했습니다.";
} else {
result = "다시 입력해주세요.";
}
System.out.println(result);
}
}
연산자 우선 순위
- .,(),[] → 점, 괄호, 대괄호
- +, - → 부호 연산자
- ++,--,! → 부정/증감 연산자
- *,/,% → 산술 연산자
- +, - → 산술 연산자
- <<, >> → 시프트 연산자
- <, <=, >= → 비교 연산자
- ==, != → 비교 연산자
- &,^,| → 비트 연산자
- &&, || → 논리 연산자
- ?, : → 조건 연산자
- =,+=, -= → 대입 연산자
'멀티캠퍼스-JAVA 풀스택 > JAVA' 카테고리의 다른 글
| Java 기초(6)- 객체지향(2) (0) | 2025.11.18 |
|---|---|
| Java 기초(5) - 객체 지향 (0) | 2025.11.12 |
| Java 기초(4) - 배열 (0) | 2025.11.12 |
| Java 기초(3) (0) | 2025.10.28 |
| Java 기초 (1) (0) | 2025.08.19 |