본문 바로가기
Spec UP - Backend/Java의 정석

Chapter 2. 변수

by TIS_Ha 2021. 11. 29.
반응형

01. 화면에 글자 출력하기

화면에 글자를 출력할때는 System.out.print()을 사용하며 괄호 안에 출력할 내용을 넣는다.

System.out.print("Hello World");   // Hello World 출력
System.out.print("3+5");   // 3+5 출력
System.out.print(3+5);   // 8 출력

System.out.print() : 괄호안의 내용을 출력하고 줄바꿈을 하지 않는다.

System.out.println() : 괄호안의 내용을 출력하고 줄바꿈을 한다.

 

02. 덧셈 뺄셈 계산하기

사칙연산이 포함된 식의 결과를 화면에 출력하려면 앞서 배운것과 같이 괄호안에 식을 넣으면 된다.

연산자(operator) : 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/)

System.out.println(5+3) // 8 출력
System.out.println(5-3) // 2 출력
System.out.println(5*3) // 15 출력
System.out.println(5/3) // 1 출력

 

03. 변수의 선언과 저장

프로그래밍을 하다가 보면 값을 저장해둘 공간이 필요한데 그 공간을 변수(Variable)라고 한다.

변수를 선언할때는 변수타입 변수이름; 의 형태로 선언한다.

int x;  // int x라는 이름의 변수를 선언
x = 5;  // x 변수가 가지는 값을 5로 할당
System.out.println(x); //x의값인 5가 출력
x = 10;  // x 변수가 가지는 값을 10으로 재할당
System.out.println(x); //x의값인 10이 출력

 

04. 자주 사용하는 변수의 타입

숫자 int
long
정수(integer)를 저장하기 위한 타입(20억이 넘을땐 long)
float
double
실수를 저장하기 위한 타입
float은 오차없이 7자리, double은 15자리 
문자 char 문자(character)를 저장하기 위한 타입
String 여러 문자(문자열, string)을 저장하기 위한 타입

 

05. 상수와 리터럴

상수(constant)는 변수와 마찬가지로 값을 저장할 수 있는 공간이지만 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다. 상수를 선언하는 방법은 변수와 동일하며 단지 변수의 타입 앞에 키워드 'final'을 붙여주면된다.

final int MAX_VALUE; //정수형 상수 MAX_VALUE를 선언
MAX_VALUE = 100; //상수에 값을 처음 지정하면 값이 저장됨.
MAX_VALUE = 200; //상수에 저장된값을 변경할 수 없어 에러 발생.

상수의 이름은 모두 대문자로 하는 것이 관례이며 여러 단어로 이루어진 경우 언더바( _ )로 구분한다.

 

리터럴(literal)은 그 자체로 값을 의미하는 것이다. 쉽게 말하면 기존에 존재하는 상수의 개념(12, a, A, abc 등)을 리터럴로 대체하여 부르는 것이다. 리터럴이라는 용어를 쓰는 이유는 프로그래밍에서 상수가 '값을 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문에 이를 구분하기 위해 리터럴이라는 용어를 사용한다.

 

06. 리터럴의 타입과 접미사

종류 리터럴 접미사
논리형 true, false 없음
정수형 123, 0b0101, 077, 0xFF, 100L L
실수형 3.14, 3.0e8, 1.4f, 0x1.0p-1 f, d
문자형 'A', '1', '\n' 없음
문자열 "ABC", "123","a", "true" 없음

정수형과 실수형에는 여러 타입이 존재하므로 리터럴에 접미사를 붙여 타입을 구분한다.

 

정수형의 경우 접미사가 없으면 int 타입의 리터럴이고 long 타입의 리터럴에는 접미사 'l' 또는 'L'을 붙인다. 또한 byte와 short 타입의 변수에 값을 저장할때는 int타입의 리터럴을 이용한다.

10진수 외에도 2,8,16진수로 표현된 리터럴을 변수에 저장할 수 있으며 16진수라는 것을 표시하기 위해 리터럴 앞에 접두사 '0x'또는 '0X'를, 8진수의 경우에는 0을 붙인다.

그리고 JDK1.7부터 정수형 리터럴의 중간에 구분자 언더바( _ )를 넣을 수 있게되어 값이 큰 숫자를 더 편하게 읽을 수 있게되었다. (ex: long big = 100_000_000_000L;)

 

실수형에서는 float 타입의 리터럴에 접미사 'f' 또는 'F'를 붙이고 double 타입의 리터럴에는 접미사 'd'또는 'D'를 붙인다. 정수형에서 int가 기본 자료형인것처럼 실수형에서는 double이 기본자료형이므로 접미사 'd'는 생략이 가능하다.

 

* 변수의 데이터타입과 리터럴의 타입이 불일치할 경우 

1) 범위가 '변수' > '리터럴' 인 경우 문제없음.

int i = 'A';   // int > char 이므로 오류 없음
long l = 123;  // long > int 이므로 오류 없음
double d = 3.14f; // double > float 이므로 오류 없음

2) 범위가 '변수' < '리터럴' 인 경우 에러.

int i = 3_000_000_000   // int의 범위(20억)을 벗어나므로 오류.
long l = 3.14f;  // long < float 이므로 오류.
float f = 3.14d; // float < double 이므로 오류.

3) byte, short 변수에 int 리터럴 저장가능 

byte b = 100; // byte의 범위(-128~127)이므로 정상
byte b = 128; // byte의 범위를 벗어나므로 오류

 

07. 문자 리터럴과 문자열 리터럴

char 타입의 변수는 'A' 같은 단 하나의 문자만 저장할 수 있고 작은 따옴표로 표시한다.

두문자 이상의 여러 문자(문자열)를 저장할 때는 큰따옴표로 감싸야하며 String 타입의 변수로 '문자열 리터럴'이라고 부른다.

문자열 리터럴은 ""안에 아무런 문자를 넣지않으면 빈 문자열(empty String)이라고 한다. 그러나 문자 리터럴은 반드시 ''안에 하나의 문자가 있어야한다.

char ch = 'J'; // char에는 문자 1개만 저장 가능.
String name = "Java"; // 변수 name에 문자열 리터럴 "Java"를 저장

String str = ""; // 빈문자열(empty string)
char ch = '';  // 에러. char 변수의 '' 안에 반드시 하나의 문자가 있어야한다.
char ch = ' '; // char 변수의 공백문자(blank)를 저장하는 것은 가능하다.

원래 String은 클래스의 일종으로 객체를 생성하는 연산자 new를 사용해야하지만 자주 쓰이기 때문에 간소화하여 표현이 가능하다.

String name = new String("Java"); // new 연산자를 이용해 String 객체를 생성
String name = "Java";     //위 문장을 간략하게 표현하는 방법

 

덧셈연산자(+)는 피연산자가 모두 숫자일때는 두 수를 더하지만, 피연산자 중 어느한쪽이 String이면 나머지 한쪽을 먼저 String으로 변환한 다음 두 String을 결합한다. 즉, 어떤 타입의 변수도 문자열과 덧셈연산을 수행하면 그 결과값이 문자열이 되는것이다.

String name = "Ja" + "va"; //문자열을 합쳐서 표현.
String str = name + 8.0; //문자열에 더하였으므로 "Java 8.0" 문자열 값으로 출력

""+7; //빈문자열에 7을 더하면 문자열 7이 된다.
""+7+7; // 문자열 "7"+"7"이 더해져 77이 출력된다.
7+7+""; // 숫자값 7+7을 먼저 연산한 뒤 빈문자열이 더해져 14가 출력된다.

 

반응형

댓글