프로그래밍/Java

[Java] 2. 변수와 자료형

Be개발자 2021. 4. 19. 01:51

 

변수

  • 프로그램 실행 중 값을 저장하기 위한 공간
  • 메모리 공간의 활용을 위한 도구
  • 변수 값은 프로그램 수행 중 변경될 수 있음

 

데이터 타입

  • 기본 타입
종류 크기 타입
byte 1바이트 정수 타입
short 2바이트
int 4바이트
long 8바이트
char 2바이트, 유니코드 문자 타입
float 4바이트 실수 타입
double 8바이트
Boolean 1비트, true 또는 false 논리 타입
  • 참조 타입

- 클래스 타입

- 배열 타입

- 인터페이스 타입

 

상수

프로그램 실행 중 변경할 수 없는 데이터를 담은 변수

상수 이름은 변수와 구분하기 위해 모두 대문자로 표기

반드시 final 키워드로 지정하여 사용해야 함.

 

final double PI = 3.141592;

 

문자열

기본 타입이 아님

String 클래스로 문자열 표현

"" 기호로 값 표현

String s1 = "Hello";

String s2 = new String("World");

 

 형 변환

  • 자동 형 변환

자료형의 크기가 큰 방향으로 형 변환 일어남

자료형 크기에 상관 없이 실수 자료형 >> 정수 자료형

double n1 = 3; // int 타입 3이 double 타입으로 자동 변환
double n2 = 3.4 * 10; //실수 연산을 위해 정수 10이 실수 10.0으로 자동 변환
  • 명시적 형 변환

자동 형 변환 규칙에 부합하진 않지만 형 변환이 필요한 상황에 사용자가 강제 형 변환 가능

byte n1 = (byte) 3.14;
//double 타입 3.14를 byte 타입으로 강제 형 변환했기에 데이터 손실이 일어남.
//출력 시 3.14가 아닌 3이 출력됨

 

기본 입출력

System.out

System.in

 

 

println(): () 내부의 내용을 출력 후 행을 바꿈

print(): () 내부 내용 출력 후 행 바꾸지 않음

printf(): 포맷을 지정하여 출력

int num1 = 10;
float num2 = 3.14;

System.out.printf("%d, %f", num1, num2);

//출력 결과: 10, 3.140000 (float 타입은 소수 6자리까지 출력)

 

 

System.in은 바이트를 다른 타입으로 변환해줘야 한다. 그리하여 고수준 클래스인 Scanner 클래스를 사용한다 

Scanner 클래스

읽은 바이트를 문자, 정수, 실수 등 다양한 타입으로 변환하여 리턴

// Scanner 클래스의 경로 이름을 컴파일러에게 알림
import java.util.Scanner;

// System.in 객체와 연결된 Scanner 객체 생성
Scanner in = new Scanner(System.in);

// Scanner 클래스가 제공하는 메서드를 이용하여 입력 받음
int x = in.nextInt(); // 정수를 읽어 변수 x에 대입

Scanner는 입력되는 키 값을 공백으로 구분되는 토큰 단위로 읽음

공백문자: '\t', '\f', '\r', ' ', '\n'

 

주요 메서드 (자주 쓰는건 빨간 볼드체로 표시)

메서드 반환 타입
String next() 문자열
byte nextByte() byte
short nextShort() short
int nextInt() int
long nextLong() long
float nextFloat() float
double nextDouble() double
String nextLine() '\n'을 포함하는 한 라인을 읽고 '\n'을 버린
나머지만 문자열로 리턴
Void close() Scanner 사용 종료

 

연산자

 

산술 연산자

연산자 설명
+ 두 피연산자의 값을 더한다.
- 왼쪽 피연산자에서 오른쪽 피연산자 값을 뺀다.
* 두 피연산자의 값을 곱한다.
/ 왼쪽 피연산자 값을 오른쪽 피연산자 값으로 나눈다. (몫)
% 왼쪽 피연산자 값을 오른쪽 피연산자 값으로 나눴을 때의 나머지를 반환한다. (나머지)

 

비트연산자 &, | 과 같이 1개 사용

논리 연산자는 &&, || 과 같이 2개로 표현

 

시프트 연산자

연산자 설명
<< a<<b일 때, a의 모든 비트를 왼쪽으로 b만큼 이동.
이동할 때마다 최하위 비트를 0으로 채움
곱셈효과
산술적 왼쪽 시프트(Arithmetic Left Shift, ALS)
2^b를 곱한 결과와 동일
>> a>>b일 떄, a의 모든 비트를 오른쪽으로 b만큼 이동
이동할 때마다 최상위 비트(부호 비트)와 동일한 비트(양수:0, 음수:1)로 채움
나눗셈 효과
산술적 오른쪽 시프트(Arithmetic Right Shift, ARS)
2^b를 나눈 결과과 동일
>>> a>>>b일 때, a의 모든 비트를 오른쪽으로 b만큼 이동
이동할 때마다 최상위 비트를 0으로 채움
산술적 효과가 없기 때문에 논리적 오른쪽 시프트(Logical Right Shift, LRS)

 

조건식 ? 연산식1 : 연산식2

조건식의 결과가 true이면 연산식 1 반환, false이면 연산식2 반환