개발일기/Java

[Java] Java의 정석 (2) 변수 2

Yoon Yusang 2025. 2. 25. 17:35
 

문자와 문자열

 

문자와 문자열의 선언

char ch = 'A'; // 문자의 선언
String s1 = "ABC"; // 문자열의 선언
String s2 = new String("ABC");

String s = "A"; // OK. 
String s = ""; // OK.
char ch = ''; // 에러.

- 문자는 char형 변수에, 문자열은 String이라는 클래스에 저장한다.

- 문자열은 연속된 여러 문자를 의미하나, 하나의 문자나 빈 문자열을 저장할 수 있다.

- 하지만, char형 변수엔 빈 문자열을 저장할 수 없다.

 

 

문자열의 결합과 문자열 변환

String s1 = "A" + "B"; // "AB"
String s2 = "" + 7 // "7" : 다른 형태의 데이터를 문자열로 변환.

- 숫자와 같은 다른 데이터를 문자열로 변환하려면, 빈 문자열과 + 연산을 해주면 된다.

 

* 단, 문자열 결합은 앞에서부터 순서대로 진행된다

String s1 = "" + 7 + 7 // "77"
String s2 = 7 + 7 + "" // "14"

 

 

기본형과 참조형

 

기본형 변수와 참조형 변수

 

1. 기본형 변수

- 자바에서 기본적으로 제공되는 8개(boolean, char, byte, short, int, long, float, double)의 변수 타입을 말하며, 실제 값을 저장한다.

 

2.  참조형 변수

- 기본형을 제외한 나머지(String, System 등)을 말하며, 실제 값이 아닌 객체의 메모리 주소를 저장한다.

Date today; // 참조형 변수 today를 선언
today = new Date(); // today에 객체의 주소를 저장

 

 

기본형 변수의 종류

1. 논리형 (boolean) - 1byte

- true와 false 중 하나를 값으로 가지며, 조건식과 논리적 계산에 사용된다.

 

2. 문자형 (char) - 2byte

- 문자를 저장하는 데 사용되며, 변수 당 단 하나의 문자만 저장할 수 있다.

 

3. 정수형 (byte, short, int, long) - 1,2,4,8byte

- 정수 값을 저장하는 데 사용되며, int와 long을 주로 사용한다.

- byte는 이진데이터를 다루는 데 사용되며, short는 C언어와의 호환을 위해 추가되었다.

 

4. 실수형 (float, double) - 4,8byte

- 실수 값을 저장하는 데 사용된다.

 

 

기본형 변수의 표현범위

- 1비트는 0과 1, 2개의 값을 저장할 수 있으므로 n비트는 2^n개의 값을 저장할 수 있다.

- 부호비트(sign bit) : 부호를 표현하는 데 쓰는 비트 (0이면 양수, 1이면 음수)

byte -128 ~ 127
 int (32비트) -2^31 ~ (2^31) - 1 
-> 약 -20억~20억
long (64비트) -2^63 ~ (2^63) -1
float (32비트) -3.4 * 10^38 ~ 3.4 * 10^38
-> 소수점 아래 7자리까지 정확함.

 

 

실수형 변수의 표현방식 (부동소수점)

- 실수형 변수는 실수 데이터를 세 부분(부호, 지수, 가수)로 나누는 방식으로 저장한다.

ex) -2.1 * 10^3 -> 부호(-1), 가수(2.1), 지수(3)

 

- 하지만 이 방식때문에 오차가 발생할 수 있고, double형은 정밀도가 float형의 두 배이므로, 더 정밀한 실수의 계산이 필요한 경우에는 double을 사용해야한다.

 

 

오버플로우

- 변수형에 표현할 수 있는 값의 범위를 넘어선 값을 저장하려고 할 때, 오버플로우가 발생한다.

short sMin = -32768; // short형 변수가 표현할 수 있는 가장 작은 수
sMin = (short)(sMin - 1); 
결과 : sMin = 32767 

char cMax = 65535; // char형 변수가 표현할 수 있는 가장 큰 수
cMax = (int)(cMax + 1);
결과 : cMax = 0

 

- 최소값 - 1 연산을 진행하거나 최대값 + 1 연산을 진행하면, 오버플로우가 발생해 각각 최대값, 최소값을 결과로 반환하게 된다.

 

 

타입 간의 변환

1. 문자와 숫자 간의 변환

char c = 3 + '0';
int i = '3' - '0';
// 문자 '0'을 더하고 뺌으로써 문자를 숫자로, 혹은 역으로 변환할 수 있다.

 

2. 문자열로의 변환

String s1 = 3 + "";
String s2 = '3' + "";
// 숫자나 문자 데이터를 문자열로 변환하려면, 빈 문자열을 더해주면 된다.

 

3. 문자열을 숫자로 변환

int i = Integer.parseInt("3");
double d = Double.parseDouble("3.4");
// 문자열을 숫자 데이터로 바꾸는 데엔 해당 변수형 클래스의 메소드를 이용한다.

char c = "3".charAt(0);
// 문자열을 문자 데이터로 바꾸는 데엔 charAt(0)을 이용한다.

 

 

출력과 입력

 

printf() 를 이용한 출력

 

- printf()를 이용해 출력하면 지시자를 통해서 출력 형식을 지정할 수 있다.

 

 

printf() 의 지시자

%b boolean 형식으로 출력
%d 10진 정수의 형식으로 출력
%o 8진 정수의 형식으로 출력
%x 16진 정수의 형식으로 출력
%f 부동 소수점 형식으로 출력
%e 지수 표현식의 형식으로 출력
%c 문자의 형식으로 출력
%s 문자열로 출력
System.out.printf("age : %d year : %d", 14, 2017);
결과 : age : 14 year : 2017

 

 

Scanner를 통해 화면에서 입력받기

- Scanner는 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스이다.

import java.util.*; // Scanner를 사용하기 위해 필요한 import문

Scanner sc = new Scanner(System.in);
// Scanner 객체 생성. 인스턴스 생성의 인수를 System.in으로 하면 화면으로부터 입력받고, 
// 다른 것으로 하면 파일로부터 입력받는 것도 가능하다.

int i = sc.nextInt(); // 화면에서 입력받은 정수를 i에 저장
String s = sc.nextLine(); // 화면에서 입력받은 한 행의 문자열을 s에 저장
i = Integer.parseInt(s); // 문자열을 숫자로 변환