ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. 변수 ..?? 넌 누구냐..
    Programming/JAVA 2010. 5. 3. 20:56

    1 변수
    1.1 변수란?

    값을 저장할 수 있는 메모리상의 공간을 의미

    변경이 가능

    하나의 변수에는 단 하나의 값만을 저장할 수 있다

    즉, 변수란, 단 하나의 값을 저장할 수 있는 공간이다!
    1.2 변수의 선언

    변수를 사용하기 위해서는 변수를 선언해야 한다.

    변수가 선언되면 메모리에 변수의 타입에 알맞은 크기 의 공간이 확보되어 값을 저장할 준비가 된다.

    문법
    변수타입변수명;


    int number; // 정수형변수number를선언한다.

    변수를 선언할 때에는 변수의 타입과 이름을 함께 써 주어야 한다.

    변수타입은 담을 값의 종류와 범위를 충분히 고려해야 한다.
    1.2 변수의 선언

    변수의 초기화

    변수선언 후에는 변수를 사용할 수 있다

    변수를 사용하기에 앞서 적절한 값을 저장하여 주어야 한다.

    이를 변수의 초기화라고 하며 보통 다음과 같이 한다.


    //정수형변수number를선언하고변수의값을10으로초기화
    int number = 10;
    //다음과같이두개의문장으로나눌수도있다.
    int number;
    Number = 10;

    변수의 종류에 따라 초기화를 생략 할 수도 있지만 사용하 기 전 적절하게 초기화 하는 것이 좋다.

    참고 : 변수중 지역변수(메서드내에 선언된 변수)는 반드시 초기화를 해야 한다.
    1.3 Naming convention : 명명규칙

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

    변수명은 대소문자와 _(under bar), $(달러)로 시작이 가능

    길이에 제한이 없다

    ‘, 빈칸, -(dash)는 사용할 수 없다

    특수문자는 _와 $만 사용이 가능하다

    Java program내의 keyword(예약어)는 사용할 수 없다.
    1.3 Naming convention : 명명규칙

    참고 : 자바 키워드(예약어)

    기본 타입 : boolean, true, false, byte, short, int, long, float, double, char

    제어문 관련 : break, continue, case, default, do, else, switch, while, for, if

    접근 제한자 : private, protected, public

    클래스, 메서드, 멤버 : final, abstract, static

    클래스 관련 : interface

    기타 : synchronized, transient, volatile, native, strictfp

    클래스 관련 : class, new, super, this, instanceof

    예외 관련 : try, catch, finally, throw, throws

    메소드 관련 : return, void

    디버그 관련 : assert

    상속/구현 관련 : extends, implements

    패키지 관련 : package, import

    기타 : const, goto, enum
    1.3 Naming convention : 명명규칙

    다음은 필수적이지는 않으나 권장되는 규칙이다.

    클래스의 첫 글자는 항상 대문자로 한다.

    여러 개의 단어로 연결된 변수나 메서드를 만들 경우,

    시작하는 단어는 소문자로

    연결되는 다음단어의 첫 글자는 대문자로 한다

    예 : myVariable

    상수의 이름은 모두 대문자로 한다.

    여러단어로 이루어진 경우 각 단어는 _로 연결한다.

    예 : MAX_NUMBER, PI

    식별하기 쉽고 의미를 알 수 있게 작성한다.

    이러한 규칙들은 필수적이지는 않으나 코드의 가독성 과 이해도를 높이기 위한 프로그래머 사이의 암묵적인 약속이다.
    2 변수의 타입
    2.1 개요

    모든 변수에는 타입(type또는 형(形)이라고 한다)이 있다.

    이 타입에 따라 저장할 수 있는 값의 종류와 범위가 결정된다.

    변수의 타입은

    기본형, 참조형이두가지가있다.

    기본형변수

    실제의 값을 저장하고 있다

    참조형 변수

    어떤 값이 저장되어 있는 주소를 값으로 갖는다.

    주소값을 참조한다는 표현을 하기도 해서 참조형 변수라고 한다.
    2.1 개요

    기본형변수는 모두 8개가 지정되어 있다.

    참조형 변수는 프로그래머가 필요에 따라 직접 만들어 추가할 수 있기 때문에 그 숫자가 정해지지 않는다.

    즉 8개의 기본형 변수를 제외한 나머지가 참조형 변수이다.

    참조형 변수를 선언하는 방법

    클래스이름 변수명;

    예: Date today;

    참조변수는 null또는 객체의 주소를 값으로 가진다.

    초기화는 다음과 같이 한다.

    Date today = null;
    혹은 Date today = new Date();
    2.1 개요

    기본형 데이터 타입 : 종류

    정수형 : byte, short, int, long

    정수값을 저장하는데 사용된다.

    byte는 이진데이터를 다루는데 주로 사용되며,

    Short는 C언어와의 호환을 위해 추가되었다.

    실수형 : float, double

    실수값을 저장하는데 사용된다.

    문자형 : char

    문자를 저장하는데 사용된다.

    논리형 : boolean

    true/false중 하나를 값으로 가지며 조건식 등에 사용됨

    boolean을 제외한 나머지 데이터 타입은 서로 변환가능

    보통 정수형은 int를 실수형은 double을 사용한다.
    2.2 기본형 데이터 타입

    데이터 타입의 범위
    자료형
    범위
    크기
    bit
    byte
    boolean
    false, true
    8
    1
    char
    \u0000~\uffff(0 ~ 216-1, 0 ~ 65535)
    16
    2
    byte
    -27 to 27 -1 (-128 ~ 127)
    8
    1
    short
    -215 to 215 -1 (-32,768 ~ 32,767)
    16
    2
    int
    -231 to 231 -1 (-2,147,483,648 ~ 2,147,483,647)
    32
    4
    long
    -263 to 263 -1(-9,223,372,036854,775,808 ~ 9,223,372,036854,775,807)
    64
    8
    float
    1.4E-45 ~ 3.
    32
    4
    double
    4.9E-324 ~ 1.7976931348623157E308
    64
    8
    2.2 기본형 데이터 타입

    범위

    각 자료형의 범위를 정확하게 기억할 필요는 없다.

    다만, int형의 경우 -231 ~ 231-1의 범위를 갖는다.

    10이 대략 23이므로 231은2*109 즉 약 20억의 값을 가진다.

    따라서 20억 이상의 데이터를 처리할 경우 long을 사용하는 것이 좋다.

    실수형의 경우는 보통 double을 사용하기 때문에 사용상의 큰 유 의점은 없다.
    2.3 논리형

    boolean 타입밖에 없다.

    true/false 두 가지 값만을 가진다.

    기본 값은 false이다.
    2.4 문자형

    char 타입밖에 없다.

    16bit(2byte)크기의 단 문자로 구성된다

    C언어의 경우 문자형은 1byte이지만

    Java에서는 unicode 문자체계를 사용해서 2byte이다

    char형의 크기는 2byte이므로 16진수로 0000부터 ffff까 지, 문자를 표현하는데 65536개의 코드가 사용이 가능하 다.



    char colorCode = ‘A’;
    또는

    char colorCode = ‘\u0041’;
    //16진수 41은 10진수로 65
    2.4 문자형

    char, short는 크기가 모두 2byte지만 범위가 다르다.

    그래서실제로표현할수있는값은다를수가있다.

    둘다모두표현할수있는값의개수는65536개로같다.

    그러나 char은 음수를 필요하지 않기 때문에 2진수로 표시 했을때 첫번째 자리가 부호를 나타내는 값이 아니다.

    반면에 short는 첫번째 자리를 부호로 표현하는데 사용하기 때문에 서로 다른 값의 범위를 가지게 되는 것이다.
    2.4 문자형

    예제
    class CharToCode{
    public static void main(String[] args) {
    char ch= 'A'; // char ch= '\u0041';로바꿔써도같다.
    int code = (int)ch;// ch에저장된값을int형으로변환한다.
    System.out.println(ch);
    System.out.println(code);
    }
    }

    실행결과
    A
    65
    2.4 문자형

    설명

    위의 예제를 실행하면 65가 출력된다.

    문자 A의 코드가 10진수로 65이기 때문이다.

    특정문자의 유니코드를 알고 싶으면 예제에서와 같이 char 형 변수를 정수형(int)로 변환하면 된다.

    char형변수에저장되는값은부호없는정수의형태로저 장된다.

    이 값은 해당문자의 유니코드인데 char ch = ‘A’;가 수행되 면ch에는문자‘A’의 유니코드인 65가 저장되는 것이다.

    즉 모든 데이터는 숫자로 저장된다.

    println() 메서드는 변수를 출력할 때 변수의 타입이 정수형 이면 정수 값을 출력하고 char형이면 정수값에 해당하는 문자를 찾아 출력한다.
    2.4 문자형

    예제
    class CodeToChar{
    public static void main(String[] args) {
    int code = 65; // 또는int code = 0x0041;
    char ch= (char)code;
    System.out.println(code);
    System.out.println(ch);
    }
    }

    실행결과
    65
    A
    2.4 문자형

    설명

    이 예제는 유니코드 65가 어떤 문자값을 나타내는지에 알 아내는 방법을 잠시 소개한 예제이다.

    상기 두 예제에서 볼 수 있듯이 char형의 변수를 정수형으 로 casting(형변환)하면 변수에 저장되어 있는 유니코드를 10진수로 얻을 수 있다.

    반대로 특정 유니코드가 어떤 문자를 나타내는지 알고 싶다 면 이를 정수형 변수에 저장한 후 char형으로 변환하여 확 인하면 된다.
    2.4 문자형

    여러개의 문자를 저장하기 위해서는 char형으로는 부 족하다

    그래서 사용되는 것이 String 클래스이다.
    char ch= ‘J’;
    String name = “Java”;

    String은 클래스이다.

    String name = new String(“Java”); 와 같이 표현해야 한다.

    하지만 워낙 자주, 많이 쓰여서 위와 같은 표현도 가능하다.

    게다가 덧셈 연산자인 +를 통해서 문자열간의 결합도 가능 하다.
    String name = “Ja”+”va”;
    2.4 문자형

    여러개의 문자를 저장하기 위해서는 char형으로는 부족하다

    덧셈 연산자 중 하나가 문자열이면 다른 한쪽은 String형 으로 변환 즉, 문자열로 변환된 다음 다른 문자열과 결합 된다.

    즉, 7 + “7”의결과는“77”이되는것이다.

    기본형 데이터의 값을 문자열로 변환할 때는 아무런 내용이 없 는빈문자열을더해주면된다.
    String s = 7 + “”;
    2.4 문자형

    예제
    class StringTest {
    public static void main(String[] args) {
    double dd= 1D;
    String a = 7 + " ";
    String b = " " + 7;
    String c = 7 + "";
    String d = "" + 7;
    String e = "" + "";
    String f = 7 + 7 + "";
    String g = "" + 7 + 7;
    System.out.println(a);
    System.out.println(b);
    System.out.println(c);
    System.out.println(d);
    System.out.println(e);
    System.out.println(f);
    System.out.println(g);
    }
    }

    실행결과
    7
    7
    7
    7
    14
    77
    2.4 문자형

    설명

    기본형과 참조형의 구별 없이 어떤 타입의 변수도 문자열과 덧셈연산을 수행하면 그 결과는 문자열이 된다.

    문자열 + any type => 문자열

    any type + 문자열 => 문자열
    2.5 정수형

    4개의 자료형이 있다

    byte, short, int, long

    크기순으로 나열하면 다음과 같다.

    byte(1) < short(2) < int(4) < long(8)

    byte부터 long까지 2배로 증가한다는 것을 할 수 있다.

    이중에서 기본 자료형은 int이다.
    2.5 정수형

    저장하려는 변수값의 범위에 따라 선택하면 되겠지만 byte, short보다는 int를 사용하도록 하는게 좋다.

    int보다 크기가 작아 메모리를 절약 할 수는 있으나

    표현할 수 있는 값의 범위를 넘어선 값이 할당될 경우 잘못 된 결과를 얻을 가능성이 있다.

    그리고 연산시 피연산자 스택이 피연산자를 4byte 단위로 저장하기 때문에

    4byte보다 작은 자료형을 연산할 경우 4byte로 변환하여 연산 이 수행된다.
    2.5 정수형

    변수의 선언과 초기화는 다음과 같이 한다.
    byte b = 1;
    short s = 2;
    int i = 3;
    long l = 4L;

    long type의 리터럴에는 접미사 L또는 l을 반드시 붙 여야 한다.

    이게 없으면 int type으로 간주한다.

    리터럴

    그 자체로 데이터인 것을 리터럴이라고 한다.

    예를 들어 ‘A’, “AB”, 123가 리터럴이다.
    2.5 정수형

    값의 범위

    정수형은 0과 1로 이루어진 2진수로 저장된다

    예를 들어 byte형의 변수 1은 다음과 같이 표현된다

    0000 0001

    8자리로 구성되어 있으며, 각 자리는 0, 1의 값을 표현한다

    그래서 28(256)가지의 값을 표현할 수 있다.

    맨 첫 자리는 양수/음수를 표현하는 부호자리(sign bit)이다

    그래서 실제로 값을 표현하는 자리수는 모두 7자리 즉 표현할 수있는값의범위는±27이되는것이다.

    따라서 변수의 값의 범위는 -27 ~ 27-1(-128 ~ 127)이 되는 것이다.
    2.5 정수형

    예제 - 표현 범위를 넘어서는 경우
    public class ByteOverflow{
    public static void main(String[] args){
    byte b = 0;
    int i = 0;
    for(intx=0; x <= 270; x++){
    System.out.println(b++ + “\t” + i++);
    }
    }
    }
    2.5 정수형

    표현 범위를 넘어서는 경우

    실행결과
    00
    1

    127 127
    -128 128
    -127 129

    -2 254
    -1 255
    0 256
    1 257


    설명

    범위를 넘어서는 경우 위와 같은 결과를 초래 할 수 있다.

    저장범위를 넘어서는 경우 에러가 발생하지는 않는다.

    하지만 overflow가 발생하여 원치 않는 값을 얻을 수 있다.
    2.4 정수형

    정수형 변수는 자신이 저장할 수 있는 범위를 넘어서 면 마치 자동차의 주행표시기와 같이 최소값서부터 반복한다.

    만일 세자리 숫자의 주행 표시기라면 000부터 999까지 밖에 표현하지 못하므로 999다음의 숫자는 000으로 시작 한다.

    byte의 경우 -128부터 시작해서 127을 넘으면 다시 - 128부터 시작한다.

    다른 정수형 타입인 short, int, long 역시 저장할 수 있는 값의 범위를 넘는 경우 이와 같은 방식으로 처리된다.

    그러나 변수의 범위를 넘는 값으로 초기화하는 것은 허용 하지 않는다.
    byte b = 128;// compile error발생
    2.4 정수형

    정수형 데이터 타입의 기본형

    정수형 기본 데이터 타입 : int


    short a, b, c;
    a = 1;
    b = 2;
    c = a + b;//컴파일에러!

    c는 short형의 변수가 연산되는 순간 int형으로 형변환된다

    에러를 없앨려면?

    c를 int형으로 선언
    int c;

    또는 downcasting
    c = (short)(a+b);
    2.5 실수형

    float와 double 두가지 타입이 있다.

    소수점이 있는 데이터 즉, 실수를 저장할 때 사용된다.

    크기는 각각 4byte, 8byte로 int와 long의 크기와 같지만,

    정수형과는 다른 저장방식으로 인하여 정수형보다 훨씬 더 큰 범위의 값을 표현할 수 있다.

    부동소수점방식 : floating-point

    실수를 ±aX10n의 방식으로 표현

    a를 가수, n을 지수라고 한다

    예 : 3.1415  0.31415 X 101

    가수는 0.31415, 지수는 1
    2.5 실수형

    float : 1 + 8 + 23 = 32bit = 4byte

    double : 1 + 11 + 52 = 64bit = 8byte

    가수의 범위가 double이 float의 두 배가 넘기 때문에 보다 많은 값을 표현할 수 있다.

    따라서 높은 정밀도가 요구되는 경우에는 double을 사용하는 것이 좋다.

    그리고 정수형에서는 int가 기본형인 것처럼 실수형에서는 double이 기본형이다.
    S(1)
    E(8)
    M(23)
    S(1)
    E(11)
    M(52)
    2.5 실수형

    실수형 데이터 타입의 기본형

    실수형 기본 데이터 타입 : double


    float f = 27.9;//컴파일에러!

    숫자 뒤에 아무런 표시가 없으면 complier는 double형으로 인 식한다.

    에러를 없앨려면?

    f를 double형으로 선언 : double f;

    또는 27.9뒤에 F, f를 붙인다 : 27.9F, 27.9f
    2.6 변수의 할당

    변수 선언 및 할당의 여러가지 방법

    변수의 값 할당
    char myChar= ‘G’;

    변수를 다른 변수에 할당
    int ID = 0;
    int saleID= ID;//saleID에는ID의값인0이할당된다!

    변수에 상수 할당하기
    double price = 12.99;
    boolean isOpen= false;

    한줄에여러개의변수선언및할당하기

    문법

    데이터형변수명= 값[, 변수명= 값];
    double price = 0.0, wholesalePrice= 0.0;
    2.7 상수

    변수 : 변경가능

    double salesTax= 6.25;

    상수 : 변경 불가능

    final double SALES_TAX = 6.25;

    법칙

    대문자로 생성한다.

    여러 단어가 연결되어 있는 경우 단어 사이를 _로 연결한다.
    3 형변환
    3.1 형변환이란?

    형변환(Casting)

    모든 변수에는 타입이 있다

    원래 연산은 같은 타입의 변수와 수행하여야 한다

    그러나 프로그램을 작성하다 보면 서로 다른 타입간의 변수 와연산을하여야할때가있다

    이때 한쪽의 변수의 타입을 다른쪽 변수 타입과 맞춰 주어 야한다

    이를 형변환이라고 한다

    즉,

    형변환이란 특정타입의 변수를 다른 타입으로 변환하는 것이다
    3.2 형변환의 방법

    기본 법칙!

    기본형과 참조형 모두 형변환이 가능하다.

    하지만 기본형과 참조형간에는 형변환은 가능하지 않다!
    3.2 형변환의 방법

    형변환의 방법

    문법
    (타입)피연산자


    int score = (int)85.5;

    double형을 int형으로 변환하는 것으로 score에는 85가!
    byte b = (byte)score;

    score에 저장된 값을 byte형으로 변환하여 byte에 저장

    피연산자 앞에 변환하고자 하는 타입의 이름을 괄호에 넣어 주면 되는 아주 간단하게 형변환이 된다.
    3.3 기본형 데이터 타입의 형변환(Casting)

    기본형 데이터 타입은 boolean을 제외하고는 자유로 이 변환이 가능

    단, 큰 자료형이 작은 자료형으로 변환될 경우

    표현할 수 있는 값의 범위가 큰 자료형의 데이터가 손실될 수있다.

    예,

    int i = (int)1.6f;

    이 경우 i에는 1값이 저장이 된다.

    이를 허용하는 이유는 프로그래머의 선택이기 때문이다.

    그러나 작은 자료형을 큰 자료형으로 변환할 경우에는 손실 이없다.
    3.3 기본형 데이터 타입의 형변환(Casting)

    예제
    public class CastingTest {
    public static void main(String[] args){
    byte b = 10;
    int i = (int)b;
    System.out.println("i=" + i);
    System.out.println("b=" + b);
    int i2 = 128;
    byte b2 = (byte)i2;
    System.out.println("i2=" + i2);
    System.out.println("b2=" + b2);
    }
    }

    실행결과

    i=10

    b=10

    i2=128

    b2=-128  이 결과에 주목하자!
    3.3 기본형 데이터 타입의 형변환(Casting)

    작은 자료형에서 큰 자료형으로의 변환은 자동적으로 됨

    이를 upcasting은 묵시적으로 이루어진다고 표현한다

    큰 자료형으로의 변환은 값의 손실이 없기 때문이다

    아래의 순서로 큰 자료형으로의 변환이 이루어진다

    upcasting순서!

    메모리의 크기상으로는 8byte인 long이 4byte인 float 보다 크다

    그러나 표현의 범위는 float가 long보다 훨씬 크기 때문에 큰 자료 형으로 간주 된다.
    byte
    short
    int
    long
    float
    double
    char

    'Programming > JAVA' 카테고리의 다른 글

    4. 조건문, 반복문.. 계속 돌아돌아~  (0) 2010.05.03
    3. 연산자.. 덧셈. 뺼셈  (0) 2010.05.03
    JDBC API 를 이용한 프로그래밍.  (0) 2010.05.03
    클래스와 객체  (0) 2010.05.03
    자바를 소개합니다. ^^  (0) 2010.05.03
Designed by Tistory.