What : 어떤 문제가 있었는지
How : 어떻게 해결했는지
So : 그래서 뭘 느꼈는지
오늘은 새로운 세션이 시작되는 날이었습니다. "언어 기본기 공부"
집에 자바 책만 두권이 있었는데...다시 공부하는 제가 정말 모르는게 많았네요 ㅎㅎ 반성합니다.
WHAT
- 자동타입변환
- 논리연산자(& vs &&)
- char
- 연산자의 연산 방향
- ==, equlas()
- JVM의 메모리 영역 메소드/스택/힙
주제가 많은 만큼 가볍게 다뤄보겠습니다.
HOW
1. 자동타입변환
자동타입변환 - 캐스팅을 생략해도 된다.
byte byteValue = 10;
int intValue = byteValue; // 자동 타입 변환
char charValue = 'A';
int intValue = charValue; // 자동 타입 변환
이 경우 외에도 연산 시에 형변환이 자동으로 이뤄지는 경우도 있습니다.
byte byteValue1 = 1;
byte byteValue2 = 2;
byte result = byteValue1 + byteValue2 // (X)
두 바이트 타입의 변수를 더하는 것만으로도 형변환이 일어납니다.
바이트 타입의 범위는 -127 ~ 127 입니다.
연산이 일어나면 범위를 벗어날 수 있기에 형변환이 자동으로 일어나도록 한 것 같습니다.
2. 논리연산자(& vs &&) 차이
둘은 산출 결과는 같지만 연산 과정이 다릅니다.
&&는 앞의 피연산자가 false라면 뒤의 피연산자를 평가하지 않고 바로 false라는 산출을 냅니다.
&&는 두 피연산자 모두 true 여야 하기 때문입니다
3. char
하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴이라고 합니다. 문자 리터럴은 유니코드로 변환되어 저장됩니다.
유니코드는 세계 각국의 문자를 2byte로 표현할 수 있는 숫자(0 ~ 65535)로 매핑한 국제 표준 규약입니다.
자바는 유니코드를 저장할 수 있도록 char 타입을 제공합니다. 결국 char는 정수형입니다.
char v1 = 'A'; //유니코드 65
char v2 = '가'; //유니코드 44032
4. 연산자의 연산 방향
연산자에는 우선순위 그리고 연산 방향이 존재합니다.
대부분 연산 방향은 우리가 일반적으로 알듯이 좌에서 우로 이동하는 방향입니다.
하지만 증감(++, --), 부호(+, -), 논리(!), 대입(=, +=,-=,/=,%=) 연산자는 우에서 좌 방향으로 연산이 일어납니다.
5. ==, equlas()
해당 주제로 포스팅을 몇 번 했지만 다시 한 번 정리합니다.
== 은 메모리 주소 값을 비교하는 것입니다. primitive type 은 이미 값이 저장되어 있기에 값이 같다면 주소값도 같습니다. 그리고 값이 이미 저장되어 있기에 primitive type은 null 값을 가질 수 없습니다.
기본적으로 equals()는 재정의하지 않으면 ==과 같습니다.
하지만 Integer, String과 같은 래퍼타입들은 equals() 메소드를 재정의하여 해당 변수의 값이 같은지를 확인합니다.
그래서 참조 타입은 동등한지(같은 정보)를 판단하기 위해 equals() 를 사용합니다.
6. JVM의 메모리 영역 메소드/스택/힙
해당 주제에 대해서도 포스팅을 한 번 했습니다. JVM 메모리 영역 포스팅 바로가기
OS는 JVM 프로세스에 메모리 영역을 할당해줍니다. 그리고 JVM의 메모리 영역은 메소드/스택/힙으로 나뉘게 됩니다.
메소드 영역 - static 필드, 메소드 코드, 생성자 코드 저장
스택 영역 - 참조 변수, 지역 변수, primitive 타입의 실제 값들이 저장
힙 영역 - String, 배열 등 Object들이 담기게 됩니다.
스택 영역의 변수들은 힙 영역의 객체를 참조하는 형태로 구성됩니다. 더 자세한 내용은 위 포스팅을 확인해주시면 될 것 같습니다
SO
다시 자바를 공부하면서 모르는게 참 많다는 것을 알게 되었습니다. 모르는 내용들은 꼭 기록으로 남기겠습니다.
'항해99' 카테고리의 다른 글
항해99 11일차 TIL - 인터페이스 (1) | 2022.12.17 |
---|---|
항해99 10일차 TIL1 - 클래스 용어 정리 (0) | 2022.12.15 |
항해99 9일차 TIL1 - 인텔리제이 단축키를 설정해봐요:) (0) | 2022.12.14 |
항해99 8일차 - TIL RESTful API란 무엇인가? (1) | 2022.12.14 |
항해 7일차 TIL - cookie는 꼭 js 코드에서 삭제해야 하나요? (0) | 2022.12.13 |