문자열과 print, println
1. System.out.print(3+5);
2. System.out.print("3+5");
각각 어떻게 출력될까? () 안에 바로 넣은 1번은 8이 나오겠지만, "3+5"를 해준 2번은 화면에 3+5를 그대로 출력해 준다.
자바는 큰따옴표("") 안에 들어간 내용은 글자로 간주하고 문자열로 인식한다.
1. System.out.print();
2. System.out.println();
1번은 괄호 안의 내용을 출력하고 줄 바꿈을 하지 않는다.
2번은 괄호안의 내용을 출력하고 줄바꿈을 한다.
변수의 타입
분류 | 변수의 타입 | 설명 |
숫자 | int long | 정수(integer)를 저장하기 위한 타입(20억이 넘을땐 long) |
float double | 실수를 저장하기 위한 타입(float는 오차없이 7자리, double은 15자리) | |
문자 | char | 문자(character)를 저장하기 위한 타입 |
String | 여러 문자(문자열, string)를 저장하기 위한 타입 |
변수의 타입은 참조형과 8개의 기본형이 있다. 일단 자주 쓰이는 타입만 알아보겠다.
상수
final int MAX_SPEED = 10;
상수(constant)는 변수와 마찬가지로 '값을 저장할 수 있는 공간'이지만, 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다. 상수를 선언하는 방법은 변수와 동일하다. 단지 변수의 타입 앞에 키워드 'final'을 붙여주기만 하면 된다.
final int MAX_VALUE; // 정수형 상수 MAX_VALUE 선언
MAX_VALUE = 100; // 상수에 100의 값 저장
MAX_VALUE = 200; // 오류. 한번 저장된 값은 변경불가
위의 코드로 확인할 수 있다. 처음 초기화 해준값만 들어가고, 그 뒤로는 상수의 값을 변경할 수 없다.
상수의 이름은 모두 대문자로 하는 것이 관례이다.
리터럴(literal)
변수(variable) 하나의 값을 저장하기 위한 공간
상수(constant) 값을 한번만 저장할 수 있는 공간
리터럴(literal) 그 자체로 값을 의미하는 것
원래 12, 123, 3.14, 'A'와 같은 값들이 '상수'이다. 프로그래밍에서는 상수를 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문에 이와 구분하기 위해 상수를 다른 이름으로 불러야만 했다. 그래서 상수 대신 리터럴이라고 부른다.
리터럴의 타입과 접미사
종류 | 리터럴 | 접미사 |
논리형 | false, true | 없음 |
정수형 | 123, 0b0101, 077, 0xFF, 100L | L |
실수형 | 3.14, 3.0e8, 1.4f, 0x1.0p-1 | f, d |
문자형 | 'A', '1', '\n' | 없음 |
문자열 | "ABC", "213", "A", "true" | 없음 |
변수에 타입이 있는 것처럼 리터럴에도 타입이 있다. 변수의 타입은 저장될 값의 타입에 의해 결정되므로, 만약 리터럴에 타입이 없다면 변수의 타입도 필요 없을 것이다.
문자열 결합
String name = "Ja" + "va";
String str = name + 8.0;
숫자뿐만 아니라 위와 같이 두 문자열을 합칠 때도 덧셈을 사용할 수 있다.
덧셈 연산자는 피연산자가 모두 숫자일 때는 두 수를 더하지만, 피연산자 중 어느 한쪽이 String이면 나머지 한쪽을 먼저 String으로 변환한 다음 두 String을 결합한다. 어떤 타입의 변수도 문자열과 덧셈을 하면 결과가 문자열이 되는 것이다.
문자열 + any type -> 문자열 + 문자열 -> 문자열
any type + 문자열 -> 문자열 + 문자열 -> 문자열
예를 들어 7 + "7"을 하면 7은 String이 아니다. 그래서 7을 String형으로 변환한 다음 "7" + "7"을 수행하여 "77"을 결과로 얻는다.
덧셈 연산자는 왼쪽에서 오른쪽의 방향으로 연산을 수행하기 때문에 결합순서에 따라 결과가 달라진다는 것에 주의해야 한다.
두 변수의 값 바꾸기
int temp // 임시로 값을 저장하기 위한 변수
int x = 10;
int y = 20;
temp = x; // x의 값을 temp에 저장
x = y; // y의 값을 x에 저장
y = temp; // temp의 값을 y에 저장
x와 y의 값을 서로 바꾸려면 위와 같은 임시로 값을 담는 역할인 변수를 하나 생성해준 뒤, 값을 옮겨주면 된다.
기본형과 참조형
기본형(primitive type)
논리형(boolean), 문자형(char), 정수형(byte, short, int ,long), 실수형(float, double) 계산을
위한 실제 갑슬 저장한다. 모두 8개
참조형(reference type)
객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입
자료형은 크게 '기본형'과 '참조형' 두 가지로 나눌 수 있는데, 기본형 변수는 실제 값(data)을 저장하는 반면, 참조형 변수는 어떤 값이 저장되어 있는 주소(memory address)를 값으로 갖는다. 자바는 C언어와 달리 참조형 변수 간의 연산을 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형 변수이다.
기본형의 종류와 범위
종류 / 크기 | 1 byte | 2 byte | 4 byte | 8 byte |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
기본형에는 모두 8개의 타입(자료형)이 있으며, 크게 논리형, 문자형, 정수형, 실수형으로 구분된다. 정수형 중에서는 int가 기본이고, 실수형에서는 double이 기본이다. 이 표를 외우기 위해서 도움 될만한 문장을 가져왔다.
-> boolean은 true와 false 두 가지 값만 표현할 수 있으면 된다. 따라서 가장 작은 크기인 1byte.
-> char은 자바에서 유니코드(2 byte 문자체계)를 사용하므로 2byte.
-> byte는 크기가 1byte라서 byte.
-> int(4 byte)를 기준으로 짧아서 short(2 byte), 길어서 long(8 byte). (short <-> long)
-> float는 실수값을 부동소수점(floating-point)방식으로 저장하기 때문에 float.
-> double은 float보다 두 배의 크기(8 byte)를 갖기 때문에 double.
위를 보고 암기에 도움이 되도록 사용하면 좋을 것이다.
!!!!! 자바의 정석 CHAPTER 2 print 부분은 변경 사항이 적용되지 않은 것 같다. 과거 문법이 나오는 관계로 그 부분은 추 가하지 않도록 하겠다.!!!!!
화면으로부터 입력받기
import java.util.Scanner; // Scanner클래스를 사용하기 위해 추가
Scanner scanner = new Scanner(System.in); // Scanner클래스의 객체를 생성
String input = scanner.nextLine(); // 입력받은 내용을 input에 저장
현재는 클래스 내부에서 Scanner을 입력 후 엔터만치면 자동으로 import java.util.Scanner을 추가해 준다. 사용자에게 입력을 받으려면 Scanner scanner(이름 상관없음) = new Scanner(System.in); 을 해주면 사용준비는 끝난다.
그 후 받을 값에 따라서 입력해 주면 된다.
int형을 입력받고 싶다면 int input = scanner.nextInt();를 입력해 주면 된다.
자바의 정석(기초편) CHAPTER 2. 연습문제

위의 내용을 잘 기억했다면 쉽게 풀 수 있을 것이다.

키워드가 아닌 것을 골라야 한다. 정답은 2,3,4,5번이다. 자바에서는 true는 키워드다. 하지만 True는 키워드가 아니다. 참고로 자바에서는 true/false를 소문자로 출력하지만 파이썬이라는 언어에서는 True/False로 대문자를 사용한다.

char는 2바이트이다. 따라서 2바이트 x 8을 해주면 총 16bit이다. 따라서 2의 16 제곱 개의 값을 표현할 수 있다. 따라서 답은 2의 16 제곱인 65536개이다. 1~65536이 아닌 0~65535 사이의 수이다.

설명에도 나와있다.
1. byte는 -128 ~ 127의 범위를 가진다. 256은 이 범위를 넘어서기 때문에 256의 대입은 불가능하다.
2. char형 변수에는 반드시 하나의 문자를 넣어야 한다. 공백을 넣어도 인정이 된다.
3. 'no'처럼 두 개의 문자는 저장할 수 없다. String형식으로 큰따옴표("")를 사용해서 no를 초기화해야 한다.
4. float형은 접미사인 f를 붙이거나, double로 형변환을 해서 사용해 주면 된다.
5. float는 4바이트이고, double은 8바이트이다. 따라서 큰 값에 작은 값을 넣으므로 범위에 문제가 없다.

리터럴 : 100, 100L, 3.14f
변수 : i, l
키워드 : int, long, final, float
상수 : PI

기본형은 boolean, byte, short, char, int , long, float, double으로 총 8개이다. 따라서 Byte는 기본형이 아니다.

1. "1" + "2" 문자열끼리 더해주면 그대로 이어준다. 답은 12
2. true + "" true가 출력된다.
3. 'A' + 'B'를 해주게 되면 문자열 A의 아스키코드값 65와 B의 아스키코드값66을 더해서 131이 나온다.
4. '1' + 2를 해주게 되면 1의 아스키코드값 49와 +2를 해주게되어 51이 나온다.
5. '1' + '2'를 해주면 1의 아스키코드값 49와 2의 아스키코드값 50을 더해 99가 나온다.
6. 'J' + "ava"를 해주게되면 문자형 + 문자열 합이니 J가 문자열로 변경되고 두 개를 이어서 Java가 나온다.
7. true + null 은 출력할 수 없다.

public class Exercise2_8 {
public static void main(String[] args) {
int x = 1;
int y = 2;
int z = 3;
빈칸
System.out.println("x=" + x);
System.out.println("y=" + y);
System.out.println("z=" + z);
}
출력결과 x=2 y=3 z=1
먼저 출력결과를 확인해 본다. 비교해 보니 x와 y값을 바꿔준 후 y와 z값을 바꿔주면 정답이 나올 것 같다.
int temp = x;
x = y;
y = z;
z = temp;
이렇게 입력해 준다면 정상적으로 변경이 가능하다. x의 값을 temp에 넣어둔 후 x에 y값대입, y에 z값대입, z에 저장해 두었던 temp(x의 값)을 넣어주면 변경이 완료된다.
정리
자바의 기초적인 구조중 하나인 변수에 대하여 공부해 보았다. 중간에 바뀐 print문 사용법이 나와서 놀랐다. 문법을 보고 "엥? 이제는 사용하지 못하는 문법 아닌가?"라는 생각이 들었고 IntelliJ를 켜서 예제를 코딩한 후 실행시켜 보았다. 문법 오류가 발생하였다는 것을 확인한 후 넘어가도록 하였다. 기본형의 종류와 범위에서 나온 표를 보고 이를 암기하면 금방 외울 수 있다고 생각됐다. 이번 챕터도 이해하기 어렵거나 몰랐던 부분은 없었다.
'Back-End > JAVA' 카테고리의 다른 글
[JAVA] 자바의 정석(기초편) 공부 - CHAPTER 4 . 조건문과 반복문 (0) | 2023.06.01 |
---|---|
[JAVA] 자바의 정석(기초편) 공부 - CHAPTER 3 . 연산자 (0) | 2023.05.31 |
[JAVA] 자바의 정석(기초편) 공부 - CHAPTER 1 . 자바를 시작하기 전에 (0) | 2023.05.31 |
[JAVA] 스파르타코딩클럽 JAVA공부(5) - 프로세스와 쓰레드, 우선순위 (0) | 2023.05.30 |
[JAVA] 스파르타코딩클럽 JAVA공부(4) - 오류 및 예외 (0) | 2023.05.26 |
남건욱's 공부기록