자바에서는 아래의 방법으로 변수를 생성합니다.
int a = 852;변수가 생성되는 과정은 아래와 같습니다.
1. int는 4Byte의 고정된 크기를 가지는 변수타입이다.
2. 메모리의 4Byte의 공간을 마련하고, a라고 이름짓는다. (1Byte는 8Bit이므로, 총 32Bit의 공간이 생기겠죠?)
3. a라는 32Bit 공간에 숫자852를 이진법으로 바꾼 수(1101010100)를 할당한다.
System.out.println(Integer.toBinaryString(852)); // 1101010100기본자료형은 2진법으로 변환되어 메모리에 바로 박히게 됩니다. 직접 할당이라고 합니다.
그러나 객체자료형은 크기가 가변적이기 때문에, 고정된 크기의 2진법으로 변환될 수 없습니다.
객체 자체는 고정된 크기로 변환될 수 없지만, 객체의 주소값은 크기가 고정되어 있습니다. 따라서 힙 영역에 객체를 생성하고, str 이라는 변수에 객체의 주소값을 저장하게 됩니다.
Object obj = new Object(); System.out.println(obj); //java.lang.Object@15db9742
명시적 형변환시 데이터의 손실
기본 자료형의 직접 할당과 관련된 내용이 있습니다.
자바에서 명시적 형변환시 데이터 손실이 일어나는 경우, 어떻게 손실되는가? 입니다.
long 타입은 8Byte이고, int 타입은 4Byte입니다.
long타입의 데이터를 int타입의 변수로 형변환을 한 결과입니다.
이진수의 뒤에서부터 들어가서, 자릿수가 큰 앞부분은 짤리게 되네요.
문자, 숫자, 논리값으로 분류할 수 있는 자바의 기본자료형 이외에 자바의 꽃인 객체자료형에 대해 알아보는 시간이다. 어떤 언어에서든 객체라는 녀석은 뒤에 점(.)을 찍고 속성과 메서드를 추가할 수 있다.
대표적인 기본자료형은 아래와 같이 3가지로 분류하니 참고하자.
1. 문자 : char, 2바이트
2. 숫자 : 정수 byte(1바이트) < short(2바이트) < int(4바이트) <long(8바이트)
실수: float(4바이트) < double(8바이트)
3. 논리값 : boolean, 1바이트
Java 확장자를 가진 두 개의 문서를 만들었다. 하나는 객체를 표현하고 다른 하나로 실행을 할 예정이다.
먼저 Moondol 클래스로 색상 red를 입력했다. 색상을 변경할 수 있도록 setColor라는 메서드를 활용할 계획이다.
class Moondol{
String color="red";
public void setColor(String color){
this.color=color;
}
}
setColor 메서드 소괄호 안에 매개변수를 넣었다. 실행부에서 원하는 색으로 조정하기 위함이다.
다음은 실행부의 클래스이다.
class UseMoondol {
public static void main(String[] args){
Moondol m = new Moondol();
System.out.println("최초 설정된 색은?" + m.color);
m.setColor("blue");
System.out.println("변경된 색은?" + m.color);
}
}
Main 메서드는 개발자가 코드에서 호출하는 것이 아니라 실행할 때 java.exe에 의해 호출 된다. 여기서 Moondol을 객체형, 사용자정의자료형 이라고 하고 class로 표현한다. new Moondol();객체를 표현하기 때문에 new를 사용했다. 자바스크립트에도 나오는 개념이라 기초를 잘 쌓았다면 금방 이해할 수 있는 개념이다.
이제 Moondol, UseMoondol 순서로 컴파일을 하고 실행부인 UseMoondol을 실행하면 된다.
결과값
최초 설정된 색은?red
변경된 색은?blue