[TIL 13th] JAVA 2byte 정수형 char, short의 가장 큰 차이, 그리고 큰/작은 따옴표의 차이
by 노실언니
처음 배우고 있는 JAVA는 내가 이미 알고 있는 C++과 같은...듯 많이 다르다.
내가 다녔던 학교는 거의 모든 전공필수가 C/C++에 엮여있었고 Java를 가르치지 않았기때문에
몇몇 학생들은 시대에 뒤떨어진 커리큘럼이라고 지적하곤 했었다.
그런데, Java를 배워보니 나는 C와 C++을 먼저 배워둔 것이 잘한 일이라는 생각이 들었다.
제약이 적어서 (내가 잘못했다는 가정하에) 온갖 쓰레기값을 퉤퉽 내뱉고 메모리가 줄줄 새든말든 멈출때까지 냅두는
C와 C++을 먼저 배운 것이 다행이라고 생각한다.
저 친구들에 비하면 Java는 많이 안정적인 것 같다.
내 인생 최대 난관이었던 malloc 이런거 없이 Garbage collection으로도 알아서 메모리 관리 챡챡스 해주고,
프로그램이 이상하게 돌아가기 전에 먼저 컴파일 에러로 막아주니까 말이다.
자유가 깎이는 대신 안정성이 올라가는 느낌이다.
암튼, 나는 1차 과제를 마치고 Java를 공부하고 있다. [과제 기록 Github]
(과제는 github에 기록하는 것에 신경쓰다보니 TIL을 안 썼는데 쓸 껄...)
오늘의 TIL 은
1) 공부한 것과
2) 공부한 것 중에 잘못 알았던 것이나 잘 까먹을 것 같은 것 / 에 대해서 적겠다.
공부한 것
변수 변수 선언 변수의 사용범위 & 지역변수 변수의 Primitive type
정수/실수 타입 byte char short int long String boolean
변수 는 data를 저장하는, 메모리를 차지하는, 컨테이너 박스
변수명 은 해당 박스와 그 속의 value 에 접근하기 위한 일종의 identifier로,
얘가 없으면 해당 박스가 위치해 있는 시작 메모리 주소과 박스의 크기 등이 필요해져서 읽을 때 불편해진다.
변수타입은 해당 data가 어떤 형식인지, 얼만큼의 메모리를 가져야하는지, 어떻게 읽고 저장해야하는지, 어떤 연산에 사용될 수 있는지 등등 다루는 방식에 대한 정의를 말하며, 타입마다 이러한 정의가 달라진다.
변수의 수명, 변수는 특별한 명령이 없다면 선언된 구역 내에서만 존재가능하다. 해당 위치를 벗어나면 메모리할당이 해제되고 박스가 사라진다.
Java는 정수, 실수, 논리값(data, value)을 저장하고 다룰 수 있는 기본타입primitive type 을 제공한다. (즉, 사용자설정타입도 有)
└ 정수형 기본 타입 5가지 (byte, char, short, int, long)
└ 실수형 기본 타입 2가지 (float, double)
└ 논리형 기본 타입 1가지 (boolean)
공부한 것 (심화)
1) 변수명의 첫번째 글자로는
문자 _ $ 만 가능하다. $도 되는구나
2) 초기화되지 않은 변수를 사용할 시
컴파일 에러 발생
3) 리터럴(literal)
프로그래머가 직접 코드로 입력한 값을 리터럴 literal 이라고 한다.
리터럴은 타입과 다르며, Compiler가 리터럴을 읽고 자동적으로 타입을 결정한다.
즉, 리터럴은 코드에 존재하나 타입은 결정되기 전의 값인 셈
(예) int a = 3; char b = 'a'; double c = 3.33; boolean d = true; String e = "hello!";
- 정수형 리터럴 → int 로 자동 결정 (리터럴 뒤에 L 붙이면 long으로 결정)
- 실수형 리터럴 → double 로 자동 결정 (리터럴 뒤에 F 붙이면 float로 결정)
- 문자형 리터럴 → char 로 자동 결정
- 논리형 리터럴 → boolean 로 자동 결정
- 문자열형 리터럴 → String 로 자동 결정 / 기본 타입 ❌ 클래스 타입 ⭕(클래스라서 대문자로 시작)
4) 변수 타입이 허용하는 범위 밖의 리터럴 값을 대입/할당하는 경우
컴파일 에러 발생
5) 정수 리터럴은 십진수만 있는 것이 아니다
- 2진수 0B1100011
- 8진수 0143 ⭐그러니, 011과 11은 다르다. (9 ≠ 11)
- 10진수 99
- 16진수 63
6) 실수 리터럴도 소수점+숫자형태만 있는 것이 아니다
- .이 있는 숫자 리터럴 0.0012
- E가 있는 숫자 리터럴 0.12E-2 ( = 0.12 × 10^-2 = 0.0012 )
7) ⭐ ' 와 " 는 완전 다르다
- 작은 따옴표 ' 로 감싸진 리터럴 → 문자 리터럴로 인식 → 해당 문자와 매핑된 유니코드로 변환 → char 형으로 자동 결정
- 큰 따옴표 " 로 감싸진 리터럴 → 문자열 리터럴로 인식
8) Unicode 는 16진수 & 이스케이프 문자로 \u코드값
- [0~ffff] 2byte 내 16진수형태의 코드로 세계 각국의 문자와 매핑되어있다. (국제 표준 규약)
9) 2byte 정수타입 char 만의 특별한 특징
- char 형은 unsigned 가 안 붙었음에도 음수값을 가질 수 없다. ( 0 ~ 65535 = 2^16-1)
- ⭐⭐⭐ char형이 출력될 때는 자동으로 저장된 정수값을 유니코드로 인식, 해당 유니코드값과 매핑되는 문자를 출력한다.
10) Escape 문자는 문자 리터럴로, 출력 시 문자 혹은 문자열 속에서 문자 그대로 출력되지 않고 특정한 기능을 수행한다.
\t tab 탭만큼 띄움
\n newline 줄 바꿈(커서를 한 줄 아래로line feed+커서를 한 줄에서 맨 앞으로carriage return)
\r carriage return 커서를 한 줄에서 맨 앞으로
\" " 출력
\' ' 출력
\\ \ 출력 (보통은 Escape문자의 시작으로 인식되므로 그냥 \만 쓰면 출력이 안됨)
\u16진수 해당 값을 유니코드로 생각할 때, 이 유니코드값에 매핑되는 문자 출력
'Today I Learned' 카테고리의 다른 글
[TIL 15th] 객체지향 철학에 대한 책을 샀다 (0) | 2025.01.14 |
---|---|
[TIL 14th] 역시나 자바도 입력 메소드가 나를 괴롭게 하는군요 (0) | 2025.01.10 |
[TIL 12th] SQL코드카타, Case when이 최선이 아닌 문제 (0) | 2024.12.31 |
[TIL 11th] 나의 첫 팀 프로젝트를 마무리하며, 코드 메모 및 보완점 (0) | 2024.12.31 |
[TIL 10th] 코드카타 까먹은 코드들 / 파이어베이스 쿼리사용법 / 협업시 유의점 (0) | 2024.12.30 |
블로그의 정보
노력하는 실버티어
노실언니