2014년 8월 31일 일요일

Java 변수(2)

2. 변수의 타입

모든 변수에는 타입(Tyoe)이 있으며, 변수의 타입에 따라 저장할 수 있는 값의 종류와 범위가 달라집니다. 변수를 선언할 때 저장하고자 하는 값을 항상 고려하여 타입을 설정해야 합니다.

변수의 타입은 크게 기본형과 참조형, 2가지로 구분이 됩니다. 기본형 변수는 실제 값(data)을 저장하는 반면, 참조형 변수는 어떤 값이 저장되어 있는 주소를 값으로 갖습니다.
  • 기본형(Primitive type)
boolean, char, byte, short, int, long, float, double
계산을 위한 실제 값을 저장합니다.
  • 참조형(Reference type)
8개의 기본형을 제외한 나머지 타입, 객체의 주소를 지정합니다.

기본형의 개수는 8개이고, 참조형은 직접 만들어 추가가 가능하므로 개수가 정해져 있지 않습니다. 참조형 변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 변수의 타입이 된다. 그래서 새로운 클래스를 작성한다는 것은 새로운 참조형 변수를 반드는 것과 같습니다.
 다음은 참조변수 선언의 방법입니다.

클래스의 이름 + 변수명 // 타입이 클래스이름인 것들은 모두 참조변수입니다.                    
Data student;                                                                                                               

 다음은 참조변수의 선언과 동시에 초기화 입니다.

클래스 이름 + 변수명 + 초기화                                                                                                                                                                                                                         
Data student = null;                                                                                                                                                                                                                                         Data student = new Data();                                                                                           

객체를 생성하는 연산자 new의 연산결과는 생성된 객체의 주소입니다. 이 주소가 대입연산자'='에 의해서 참조변수 today에 저장되는 것입니다. 다라서 참조변수 today를 통해서 생성된 객체를 사용할 수 있습니다.

Java.변수(1)

변수

1.1 변수란?

컴퓨터 언어에서 변수(variable)란, 값을 저장할 수 있는 메모리상의 공간을 의미합니다. 의미있는 이름의 변수에 저장하여 사용하는 것이 프로그램을 하는데 있어서 더 바람직 합니다. 변수의 값은 바뀔 수 있으며, 하나의 변수에는 단 하나의 값만을 저장할 수 있습니다. 따라서 값을 여러 번 저장하면 마지막에 저장한 값을 저장하게 됩니다.

변수란? 단 하나의 값을 저장할 수 잇는 공간입니다.

1.2 변수의 선언

변수를 사용하기 위해서는 먼저 변수를 선언해야합니다. 변수가 선언이 되면 메모리에 변수의 데이터 타입에 알맞은 크기의 저장공간이 확보되어, 값을 저장할 수 있습니다. 
 변수의 선언하는 방법은 다음과 같습니다.
   
  데이터 타입 + 변수의 이름                                                                                           
                                                                                                                                  
       int number;   // 정수형 변수 number을 선언한다.                                                      

이렇게 변수를 선언할 때는 변수의 타입과 이름을 같이 써주면 됩니다. 위의 예는 number이라는 이름의 정수형 변수를 선언한 것입니다. 항상 변수를 선언할 때는 변수에 담을 값의 종류와 범위를 고려하여 데이터타입을 쓰도록 합니다.

변수의 선언을 하면 변수를 사용할 수 있습니다. 변수를 사용하기 전에 적절한 값을 저장해주는 것이 좃습니다. 이와 같은 방법을 변수의 초기화라고 합니다.
 변수의 선안과 초기화하는 방법은 다음과 같습니다.

//정수형 변수 number를 선언하고 변수의 값을 10으로 초기화합니다.                                
int number = 10;                                                                                                           
                                                                                                                                  
//위의 문장은 아래의 문장과 동일합니다.                                                                        
int number; // 정수형 변수 number을 선언하고                                                                
number = 10; //변수 number에 10을 저장합니다.                                                             

이와 다른 방법으로

int a;                                                 int a,b;                                                                
int b;                                                                                                                           
                                                                                                                                  
int x = 0;                                            int x = 0; int y = 0;                                                
int y = 0;                                                                                                                      

양쪽의 코드는 서로 같은 의미의 코드입니다. 같은 코드 이지만 오른쪽의 코드는 간결성을 보여 줍니다.

1.3 명명규칙

변수의 이름, 메서드의 이름, 클래스의 이름 등 모든 이름을 짓는 데는 반드시 지켜야할 공통적인 규칙이 있습니다.

1. 대소문자가 구분되며 길이에 제한이 없다.
    -true와 True는 서로 다릅니다.
2. 예약어를 사용해서는 안됩니다.
    -true는 예약어라서 사용할 수 없지만, True는 가능합니다.
3. 숫자로 시작해서는 안됩니다.
    -top10은 되지만, 7up은 되자 않습니다.
4. 특수문자는 '_'와 '$'만을 허용합니다.
    - $sharp은 허용되지만, s#arp은 허용되지 않습니다.

위의 내용에서 예약어를 살표보도록 하겠습니다.
abstract boolean break byte case catch char class continue default
do double else enum extends false final finally float for if implements
import instanceof int interface long native new null  package private
protected public return short static strictfp super switch synchronized
this throw throws transient true try void volatile while
예약어는 앞으로 배워 가게 되기 때문에 한번 보고 넘어가셔도 됩니다.

이 말고 프로그램을 하는데 있어서 권장하는 규칙들은 아래와 같습니다.
1. 클래스 이름의 첫 글자는 항상 대문자로 한다.
    -변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.
2. 여러 단어로 이루어진 이름은 첫 글자를 대문자로 한다.
    -lastindexOf, StringBuffer
3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다.
    - PI, MAX_NUMBER




5. Java의 기본(데이터 타입5)

앞에서는 정수형과 실수형 메모리의 형태에 관하여 공부하였는데, 이번에는 이 정수형과 실수형의 계산에 대하여 공부하겠습니다.

Q. 메모리의 사이즈는 같지만 int형 5와 float형 5.0을 컴퓨터 언어에서 아무런 조치 없이 더할 수 있는가??

이것은 기본 데이터 타입의 형변환에 대하여 알면 쉽게 알 수 있습니다.
1. 큰 수와 작은 수를 연산하면 큰 수로 형변환이 됩니다.
2. 덜 정밀한 수와 정밀한 수를 연산하면 정밀한 수로 형변환이 됩니다.
3. 정수와 실수를 연산하면 실수형으로 형변환이 됩니다.
4. 작은 수가 큰 수로 형변환되는 것은 자동입니다.(큰 수가 작은 수를 포함하고 있기 때문)
     -큰 수가 작은 수로 형변환을 할려면 강제로 형변환을 해야하는데 오버플로우가 발생합          니다.
5. 덜 정밀한 수가 정밀한 수로 형변환되는 것은 자동입니다.(덜 정밀한 변수는 데이터 표현     이 작기 때문입니다.)
     -덜 정밀한 변수는 데이터 표현이 작기 때문입니다.

그러므로 자연스럽게 정수형 5는 실수형 5과 더해지면서 실수형으로 형변환이 됩니다.

Q double d = 3*4.5f;
앞의 3은 정수이고 뒤의 4.5는 실수형입니다. 그러므로 3*4.5f의 결과는 float형이 됩니다.
그 다음으로 float형의 결과가 double d에 할당되면서 float형이 double형으로 자동 형변환이 됩니다

조금 더 들어가 정수형과 실수형 데이터 타입에서도 메모리의 비트는 같으나 메모리의 크기가 다른 정수형과 실수형에 대하여 보겠습니다.


  • 정수형

         바이트(byte)       - 1바이트
         문자(char)          - 2바이트
         정수(int)             - 4바이트
         정수(short)         - 2바이트
         큰 정수(long)      - 8바이트

여기서 바이트(byte)는 자바에서만 사용하는 데이터 타입으로 1바이트의 데이터 타입입니다. 일반적으로 char가 1바이트이지만 자베에서는 char형이 유니코드 표현을 위해 2바이트로 바귀게 됩니다. 따라서 1바이트 데이터 타입을 위해서 새롭게 만든 데이터 타입이 바이트(byte)타입입니다.

정수형에서 문자(char)은 문자를 표현하기 위해 쓰이는데 이 문자를 표현하는 방법은 'a','A'로 표현을 하는데 이는 2바이트의 숫자이다. 문자A와 '가 결합이되어 char형은 2바이트 되는 것입니다.

  • 실수형
       덜 정밀한 실수형(float) - 4바이트
       정밀한 실수형(double)  - 8바이트

  • 그 외의 데이터 타입
       불린형(boolean) - 1바이트

지금 까지의 내용은 jabook이라는 사이트의 강좌내용이였습니다. 앞의 내용의 부족한 내용은 다시 채워 넣겠습니다. 지금가지의 내용은 개념를 이해하기 위해 쉬운내용으로 채웠는데 앞으로는 조금 더 상세하게 들어가겠습니다.
  

4. Java의 기본(데이터 타입3)

항상 잊지 말아야 할 사항
데이터 타입은 메모리의 크기와 형태를 지정하는 것이다.


  • 데이터 타입의 분류
데이터 타입은 정수형과 실수형으로 구분이 된다.

1.정수형 : char(2), int(4), long(8), boolean(1)

2.실수형 ; float(4),double(8)

이렇게 2가지로 구분이 되는데 이는 비트조합의 차이에 따라서 분류를 한다.

정수형 메모리 변환법(정수형 비트의 조합)에 대하여 보도록 하겠습니다.
정수 : 5
정수형 변환(비트 변환) : 00000000/00000000/00000000/0000/0101(2진수)
이렇게 정수5를 비트 변환을 하면 위와 같이 2진수로 표현이 됩니다.

하지만 실수형의 경우는 부동소수점 수로 표현이 된다.

실수형 메모리 변환법(부동소수점 수의 메모리 변환법)
부동소수점 수(floating Point Number) : 5.0
이진화 : 101.0
정규화 : 1.01*2의2승(1.xxx가 되도록 변환한다.)
  -부호수:0(양수)
  -지수부:129(2승+127) (실수형은 127을 기준으로 127보다 작으면 -,127보다 크면+가 된다.)
  -가수부:01

부동 소수점의 비트의 조합
float형의 비트(32) = 부호부(1) + 지수부(8) + 가수부(23)
double형의 비트(64) = 부호부(1) + 지수부(11) + 가수부(52)
float형의 변환 : 0(부호부)10000001(지수부)0100000000000000000000(가수부)
16진수로 변환 : 40 A0 00 00(16진수)

위의 내용은 실수형(부동 소수점)과 정수형의 비트 조합이 다르다라는 것을 보여주고 또한 그로 인하여 기본 데이터타입이 분류된다는 것을 보여 주기 위한 것입니다. 따라서 너무 심각하게 이해할려고 하지 마시고 가볍게 보시고 넘기시면 되겠습니다. 단지 정수형과 실수형 비트의 조합에 차이가 있다는 것만 알고 넘어가도록 하시면 되겠습니다.


2014년 8월 30일 토요일

3. Java의 기본(데이터 타입2)


이제 데이터 타입에 대하여 어느 정도 이해를 했을 거라고 생각한다. 이제 부터는 생성한 데이터에 접근하는 방법을 공부해보자.

변수의 선언


  • int a;

데이터 타입으로 메모리를 생성하였는데 4byte의 int형으로 생성하였고 그 이름을 a라고 정의하였다. a를 이용하면 a와 연결된 int형의 메모리를 작업할 수 있다. 이와 같은 작업을 변수의 선언이라고 한다.

이 변수의 선언에서 이름을 만드는 방법에는 몇가지의 규칙이 존재한다.
1. 첫 번째는 문자는 영문자나 _(언더바)로 시작해야 한다.
2. 두 번째는 숫자로 시작할 수 없다.
3. 대소문자를 구별한다.(example과 EXAMPLE은 다르다)


  • int a;
  • a=5;
위의 내용은 변수의 선언이였다. 즉 4byte의 메모리를 생성하였고, 이제 4바이트의 메모리에 값을 할당해야할 차례이다. 값을 할당할 때는 대입연산자 '='를 이용하여 5를 대입한다.

조금 더 많은 예를 보면서 마무리 하자.

메모리의 생성
  • int a;
  • char c;
  • float f;
각 float, char, int의 데이터 타입으로 메모리를 생성하였고 바로 a.c.f로 이름을 붙여 변수를 선언하였다. 
  • int a;
  • a=5;
각 선언을 한 후 메모리에 값을 할당하는데 연산자 '='를 이용하여 a라는 변수에 5의 값을 할당하였다.

여기서 5를 상수라고 하는데 상수란 데이터 그 자체를 의미 한다. 그렇기 때문에 자체의 값을 변경할 수가 없다. 즉 5 = 100;이라고 하면 5와 100은 서로 상수인데 상수자체의 값을 변경하는 것은 할 수 없기 때문에 틀린 것이다.



2. Java의 기본(데이터 타입)

1. 기본 데이터 타입(Primitive Data Type)

사용자가 많이 사용하는 데이터 타입을 컴파일러 차원에서 미리 제공하는 데이터 타입을 기본 데이터 타입이라고 한다. 이를 이용하여 기본적인 메모리를 만들고 이용하게 된다.

자바에서 제공하는 기본 데이터 타입

1. byte(1byte)
2. char(2byte)
3. int(4byte)
4. long(8byte)
5. float(4byte)
6. double(8byte)
7. boolean(1byte)
8. short(2byte)

데이터 타입의 목적

1. 데이터 타입은 생성할 메모리 크기(Size)를 지정하기 위한 목적으로 사용한다. 즉 메모리를 얻어오는데 있어서 그 메모리의 크기를 지정하기 위하여 쓰는 것이다.
 단순히 변수를 선언하는 도구가 아닌, 메모리를 생성하기 위하여 쓰는 도구라는 것을 명심하도록 하자.
2. 메모리 형태(Type)를 지정하기 위한 목적으로 사용한다. 메모리의 형태란 비트의 조합을 의미한다.

잠시 비트의 조합을 보도록 하자.
int형의 경우 4byte의 int형 메모리는 정수 형식으로 비트가 조합으로 되어있고, float형의 경우 4byte의 float형 메모리는 32비트를 나누어 표현한다.
int의 경우 정수이기 때문에 5  =  00000000/ 00000000/00000000/0000/0101(2진수로 표현)으로 표현이 되고,
float의 경우 실수이기 때문에 5.0 = 0(부호부)/10000000(지수부)/10100000(가수부)/00000000 00000000(2진수로 표현)으로 표현이 된다. 이는 나중에 조금 더 자세히 설명하겠지만 알아 둬야 할 것은 정수형int의 5와 실수형float의 5.0은 메모리에 적재될 때 전혀 다르다는 것이 다.

데이터 타입에 대해 조금 더 예를 들어 보면,

  • int a;는 4바이트의 메모리를 생성하고, 정수형의 메모리이다.
  • float b;는 4바이트의 메모리를 생성하고, 실수형의 메모리이며,
  • char c;는 4바이트의 메모리를 생성하고, 정수 형태의 메모리이다.
다시 한번 강조하고 넘어가도록 하겠다.


데이터 타입은 데이터 타입은 메모리 크기와 메모리 형태를 지정하기 위한 도구이다.

2014년 8월 24일 일요일

1. Java의 기본이해

1. 자바의 기본이해


자바학습에 있어서 C++의 문법과 객체지향 기술을 터득해야 순조롭게 공부가 가능하다. 그 중에서도 가장 중요한 것은 클래스(class)를 이해를 해야만 한다. 이 클래스(class)를 이해하기 위해서는 데이터 타입(data type)에 대한 지식이 있어야 하기 때문에 데이터 타입에 대하여 먼저 공부하도록 한다.

1. 클래스(class) : C++계열 언어에서 등장하는 가장 중요한 부분이다.

2. 데이터 타입(Data Type) : 클래스를 학습하기 위한 기초지식이다.


데이터 타입(Data type) -> 클래스(class)


그렇다면, 데이터 타입이란? 메모리를 생성하기 위한 도구라고 보면 된다. 또한 자바에서 메모리를 생성하기 위한 유일한 방법은 데이터 타입을 이용하는 것이다.(그 외의 방법은 없다.)
그렇다면 메모리를 생성하기 위해서는 우선 메모리의 크기를 설정하는 것이다. 메모리의 크기없이는 메모리의 생성도 불가능 한 것은 당연하기 때문이다. 그렇다면 메모리를 생성하고 사용하기 위한 방법은 무엇일까?

1. 내가 이용할 메모리의 크기(Size)를 설정한다.
2. 크기에 해당하는 메모리를 가져온다.
3. 가져온 메모리에 데이터를 저장한다.

Ex) int number;
       이 int number;에서 int는 데이터 타입의 한 종류이며, 4byte의 데이터 크기를 갖는다.
       즉 int라는 4byte 크기의 상자를 만들고 number라는 이름표를 달아 준것이라고 생각하        면 이해하기 쉬울 것이다. 그리고 number이라는 이름을 이용하여 상자의 값을 할당 할        수 있다.

결론

1.데이터 타입은 메모리를 할당 받기위하여 사용한다.
2. 데이터 타입은 자기에 맞는 크기(Size)가 있다.

자바라는 것은 클래스를 기반으로 사용하기 때문에 클래스를 자유자제로 사용해야 한다. 그래서 클래스를 공부하기 전에 데이터 타입에 대한 간단한 개념을 공부하였다. 다음은 데이터 타입에 대하여 조금 더 알아 보도록 하겠다. 

2014년 8월 23일 토요일