현 블로그는 모바일 환경이 아닌 PC환경에 최적화 되어있습니다.

 Mir의 운영환경

1.변수(variable)



변수란? 하나의 값을 저장하는 공간!


" 메모리를 창고로 생각해보자 창고에 X라는 물건을 넣을려고 한다.

그럼 먼저 해야될 일이 그 창고에 물건을 넣을장소를 만들어야한다.

그래서 창고안에 자리를 만들어 V형태의 상자를 하나 넣었다.

그상자에는 다른상자와 구별하여 나중에 쉽게 찾을수 있도록 a라고 표기를 해두었다. 

그리고 난뒤 a라는 상자에는 X라는 물건을 담아 두었다."
 

이것을 함수식으로 나타내면 아래 그림과 같다.




창고에 물건을 넣을 공간 즉 V형태의 박스를 창고에 두는것을 변수의 선언이라고 한다.

메모리에 "하나의 값을 저장할 공간을 만들어라!!" 라며 명령을 내리는것이다.

그리고 난뒤에 X라는 물건을 아까 표기해 놓은 박스 a에 넣는것을 변수의 초기화라고 한다.


여기서 가장 중요한것은 X 이다.

X 라는 물건이 무엇이냐에 따라 박스의 형태가 바뀌기때문이다.

만약 X가 과일이라면 창고안에는 과일박스를 생선이라면 생선박스를 놔두어야 하기 때문이다.


즉 X가 무엇이냐에 따라 V의 형태(타입)가 결정되는것이다.

X가 숫자일경우 V는 byte, int, float 등으로 결정되며

X가 문자일경우 V는 char, String 등으로 결정될 것이다.

 

변수 타입은 기본형 8가지와 참조형으로 나눠지는데 기본형은 꼭 알아두어야 한다.

(위의 그림을 프린트해서 가지고 다니면서 필요할때 보는것도 좋을것이다.)



자 그럼 정수형값 숫자 10을 메모리에 저장시켜보자. 


int a;    "메모리에 a라는 이름을 가진 공간을 만들어라"


a = 10; "a의 이름을 가진 공간에 10을 저장하여라"


이렇게 명령어를 내리면 된다.


위의 식을 줄이면  int a = 10;  이런식으로 줄일수 있다.



1_2. 형변환(casting)


변수에서 형변환은 매우 자주 쓰면서도 조금만 잘못되도 오류가 일어나는 것이라 확실한 개념을 잡고 넘어가는것이 좋다.

형변환은 크게 두가지 종류가 있는데 
첫번째는 기본형끼리의 형변환
두번째는 참조형(참조변수)끼리의 형변환이 있다.


형변환 방법은 매우 간단하며 형변환 하고 싶은 값 앞에 (변수형태)를 넣어주면 된다.
예를 들어 int형의 값을 byte형으로 바꿀때에

public class Ex1_1 {


public static void main(String[] args){

int a;         // int형의 a라는 이름을 가진 저장공간을 만들어라.

byte b;       // byte형의 b라는 이름을 가진 저장공간을 만들어라.


a = 10;        // a의 이름을 가진 저장공간에 10을 저장하여라.

b = (byte)a;  // b라는 이름을 가진 저장공간에 a라는 이름을 가진

          // 저장공간의 값을 바이트형으로 형변환을 시켜 저장시켜라.

}

}

이런식으로 변수의 값 앞에 (byte)를 넣어주면 된다.

형변환에서 주의할점이 몇가지 있는데 그중 첫번째
기본형 8가지중에서 blooean은 형변환이 되지 않는다.
바꿔 말하면 그외에 7가지는 서로 형변환이 된다는 것이다.


여기서 궁금한점이 생긴다면 (안생실수도 있지만)
'문자를 넣는 'char'를 나머지 숫자를 넣는 다른 형태로 바꿀수도 있나?' 
일것이다.

여기서 주의할점 두번째!!
결론부터 말하면문자형인 'char'형도 실수형이나 정수형으로 변환할수 있다!
java에서 'A'를 char형의 저장공간에 넣을때 2진수로 변경되어 값이 저장되기 때문에
같이 2진수로 표현되는 다른 기본형으로 변경이 가능한것이다.


 위를 보면 char형에 A값을 저장 시켰을때 그 저장공간에 2진수로 1000001이 저장된다.
그것을 byte형으로 형변환을 시켰을때 똑같이 2진수의 1000001이 byte형 저장공간으로 이동하는것이다.

여기서 알수 있는 한가지!
byte형과 char형은 변수를 선언하였을때 메모리에 2byte의 저장공간을 준비한다.
똑같은 형태의 저장공간에 똑같이 1000001이 들어갔는데 왜 출력이 다를까?
그것은 byte형과 char형을 읽어올때 변수형태에따라 다르게 읽기 때문이다.


여기서 또 궁금한점 'boolean'은 2진수로 저장이 안되기때문에 변경이 안되는건가?
라고 궁금하신분도 있을것이다.
'boolean' 형은 java에서 조금 특수한 변수형으로 취급된다.
물론 저장될때에는 다른 변수와 마찬가지로 숫자로 저장이 되겠지만
이것은 숫자도 아니고 문자도 아닌 그냥 true와 false를 저장하는 변수일뿐이다.
그냥 단순하게 생각하자. 깊이 들어가면 힘들다 ;;
단순하게 boolean형은 조금 특수한 형태라서 다른 형으로 표현 못한다고 생각하자. 

마지막으로 일중요한 주의할점 세번째!!
작은범위의 형태를 큰범위의 형태로 변환할때 그 값이 소실될수도 있다는것이다.
위 두가지는 주의할점이라기보다는 알아두어야 할점이라고 표현하는게 더 맞을것이며
세번째는 잘못하면 알수 없는 큰 오류가 나기때문에 정말 주의해야할 점이다.
아래 예제를 보자.

public class Ex1_2 {


public static void main(String[] args){

byte a = 100; // a라는 byte형 공간을 만들어 100이라는 값을 저장하여라.

short b = 300;// b라는 short형 공간을 만들어 300이라는 값을 저장하여라.


a = (byte)b; //b의 저장공간에 있는 값을 바이트형으로 바꾸어 a라는 공간에 저장하라.

          // 주의할점 : 이때 a에 있는 값 100은 300이 들어가면서 지워지게 된다.

System.out.println(a); // a를 화면에 출력하여라. 

}

}


위예제를 화면에 프린트 하게되면 a의 값이 44로 출력이 된다.
 (한번 프로그램을 짜서 실행시켜보시길.)
왜냐면 byte의 정수 표현범위가 -128 ~ 127까지인데 만약  127에서 1을 더하면 128이 되는것이
아니라 -128 이 되어버린다.   확인해보자.
 

public class Ex1_3 {


public static void main(String[] args) {


byte a = 0; 

int b = 0;

for(int i = 0; i <= 260; i++){

System.out.print(a++);

System.out.print("\t");

System.out.println(b++);

}

}


}


위에 있는 for구문은 반복구문으로 위에 있는 a와 b를 1씩 더하며 출력하는것을 260번 반복하게 해준다.
for구문은 반복구문에서 배우니 자세한 설명은 넘어가고 위 프로그램을 짜서 출력해보길 바란다.

출력문을 보면 int형 값은 1씩 더하면서 260까지 출력되는것이 확인되지만
byte형 값은 127다음에 -128로 변하는것이 보일것이다.

이렇게 범위가 더 넓은 값을 범위가 작은값으로 형변환을 할때에 값이 소실될수도 있으니
각 형태의 범위를 대략적으로 기억한뒤 형변환을 사용길 추천한다.
※시간이 있다면 기본형 범위에 아슬아슬하게 한번씩 형변환을 해보길 추천한다.

필자는 형변환을 그냥 간단하게 설명하였다.
실제로 형변환을 메모리상에 저장되는 이진수의 덧셈으로 보면 더욱더 자세한 개념을 알수있다.
하지만 필자의 개인적인 생각으로는 메모리영역까지 알필요는 없을거라고 생각하며
다만 두개의 변수를 가지고 무언가를 연산을 할때
"두개의 변수의 형을 일치시켜야 된다" 이것만 생각하도록 하자.


기본형태의 형변환을 배워보았다. 하지만 
형변환은 여기서 끝나는것이 아니다.
참조변수의 형변환도 아직 남아있지만 이건 후에 얘기 하도록 하고
그 이외에도 연산시 자동형변환 등등 잘못하면 오류가 나지 않는데 출력값이
다르게 출력되는 짜증나는것들이 남았다.
다음 챕터가 연산자이니 그때가서 다시 형변환에 대해서 한번더 말하겠다.



마지막으로 변수의 이름을 정할때 몇가지 규칙과 약속이 있다.
규칙은 필수적으로 지켜야될 사항이며 
약속은 자바프로그래머들끼리의 커뮤니케이션을 위하여 지켜야 될 사항이다.

규칙 1. 첫문자가 숫자이면 안된다. (숫자를 먼저 넣으면 오류가 발생한다.)
규칙 2. 알파벳, 대소문자, 숫자, _, $ 이외의 문자를 사용할수 없다.
규칙 3. 키워드(예약어)와 이름이 같으면 안된다.

약속 1.클래스명은 첫문자를 대문자로 사용한다.
      (Power, OtherCase....)
약속 2.두단어 이상으로 이루어진 이름은 단어의 첫글자를 대문자로 사용한다.   
      (OtherCase, firstMotion, hisName...)
약속 3.상수의 이름은 모두 대문자로 한다. 여러단어로 이루어졌을때는 '_'로 
      구분한다. (PI, MAX_NUMBER....)


약속은 꼭 지킬사항은 아니지만 후에 다른사람들과 팀을 이루어 프로그래밍을 할때

약속을 지키지 않으면 상당히 오랜시간이 걸릴것이다.

그리고 클래스명을 약속처럼 하지 않으면 후에 변수와 클래스의 구분이 힘들수도 있다.

그러니 최대한 위의 규칙과 약속을 지키면서 프로그래밍을 하도록 하자.







------------------------------------------------------------------------------------
본 블로그의 글을 퍼가실때 꼬릿말, 퍼가시는곳 주소를 꼭 남겨주세요. 
출처 꼭 기재해주시고요. 상업적인 용도의 이용은 절대 금합니다.
혹 프린트를 할 경우 블로그주소와 함께 프린트 해주세요.
허락을 맡지 않고 무단도용을 할경우 법적인 제제가 있을수도 있습니다. 
(전 분명히 경고했습니다. 합의같은거 안합니다.)
그리고 혹 무단도용한것을 보신분은 신고해주시면 사례금 챙겨 드리겠습니다.
-----------------------------------------------------------------------------------

+ Recent posts