본문 바로가기

항해99

항해99 9일차 TIL2 - 강제타입변환, 논리연산자, char, 연산 방향, ==, equals(), JVM 메모리 영역

 

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

다시 자바를 공부하면서 모르는게 참 많다는 것을 알게 되었습니다. 모르는 내용들은 꼭 기록으로 남기겠습니다.