Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

붓, 그리다

자바의 특징, 변수 본문

JAVA/Basic

자바의 특징, 변수

붓그린 2017. 6. 16. 17:04


[ 객체지향언어 4요소]
추상화, 캡슐화, 상속형, 다형성을 다 갖추어야 객체지향언어라고 한다.

자바스크립트 : 객체지향언어가 아니다.
-> TypeScropt(EcmaScropt6)에 추가됨

JVM : 가상컴퓨터

3p. 운영체제 독립적

5p. OS 종속적



자바의 특징
- 자바프로그램을 작성할 때는 운영체제에 대해 독립적이나 
-> 자바 파일을 작성 : 운영체제에 상관없이 다 작성 가능
- 실행할 때에는 운영제체에 의존적이다.
-> 리눅스에서 실행시 리눅스용 JDK가 필요
-> 맥에서 실행시 맥용 JDK설치가 필요



[변수]
- 컴퓨터에게 어떤 자료를 저장시킬 것인지 지정
- 메모리에 공간을 하나 만들어준다

- 프로그램 작성시
1) 사용자로부터 값을 입력을 받을 때 변수 필요 : 출력하기 전
2) 계산을 할때 (1~100까지 합계,,,)
3) 현재 프로그램 실행 상태를 기억을 할 필요가 있을 때
ex. 그림판 실행 -> 사용자가 아직 마우스 버튼을 누르지 않은 상태를 기억
-> 문자, 숫자, 논리값(참 or 거짓) 저장
-> boolean으로 저장


[ 자바의 자료형 ]

문자 : char, string
숫자 : int
논리값 : Boolean



변수이름
자바스크립트
자바

var age
int age

- 자바는 변수를 선언할 때 자료형을 지정한다.
- 자바스크립트는 자료형 선언을 하지 않아 어떤 값이 들어가는지 모른다.

- 자바에서는 값(문자, 숫자, 날짜, 논리값) -> 자료형을 정해준다.
- 자료형(=데이터형) : 저장할 데이터의 종류와 크기를 지정해주는 것
- 자료형 8가지



1) 변수 선언 및 저장

class VarTest
{
    public static void main(String[] args)
    {
        System.out.println("변수 선언 및 저장");
        //자료형(문자, 숫자) 변수명;
        int age; //변수선언(메모리에 공간이 만들어진다)
        age=25; // 25를 변수 age에 저장
        System.out.println("올해 제 나이는"+age+"살 입니다."); //출력
    }
}

---------- 실행 ----------
변수 선언 및 저장
올해 제 나이는25살 입니다.

출력 완료 (0초 경과) - 정상 종료




2) 자료형과 일치하지 않을 경우

class VarTest
{
    public static void main(String[] args)
    {
        System.out.println("변수 선언 및 저장");
        //자료형(문자, 숫자) 변수명;
        int age; //변수선언(메모리에 공간이 만들어진다)
        age="홍길동"; // 25를 변수 age에 저장
        System.out.println("올해 제 나이는"+age+"살 입니다."); //출력
    }
}

---------- 컴파일 ----------
VarTest.java:8: error: incompatible types: String cannot be converted to int
        age="홍길동"; // 25를 변수 age에 저장
            ^
1 error

출력 완료 (0초 경과) - 정상 종료





[ 변수의 종료 ] 

1.1 수치형(정수)
1) byte : (-128~127) 까지만 저장
     - 저장공간( 1 byte)과 헷갈리지 말 것
     - 자바에서 데이터 전송단위 -> 입출력
     ex) 채팅에서 문자열이 저장 : 컴퓨터는 숫자(2진수)로 저장

2) short : 2byte 공간 크기(-32768~32767)
     
★ 3) int : 4byte 공간 크기(-2147483648 ~ 214783647)  
     - 자바에서 연산단위로 사용(+,-,*,/)

4) long : 8byte 공간 크기(기억크기)
     - 저장하는 값 뒤에 반드시 L or l 표시


EX1) 수치형 연산하기

class VarTest
{
    public static void main(String[] args)
    {
        System.out.println("변수 선언 및 저장");
        //자료형(문자, 숫자) 변수명;
        int age; //변수선언(메모리에 공간이 만들어진다)
        age=25; // 25를 변수 age에 저장
        System.out.println("올해 제 나이는"+age+"살 입니다."); //출력

        int x=0; //변수를 선언하면서 동시에 값을 저장한 경우

        byte b=23; // byte는 (-128~127) b는 변수
        short c=12; // short은 (-32768~32767)
        byte sum=b+c; // sum 함수 앞에 반드시 자료형
    }
}

---------- 컴파일 ----------
VarTest.java:15: error: incompatible types: possible lossy conversion from int to byte
        byte sum=b+c; // sum 함수 앞에 반드시 자료형
                  ^
1 error

출력 완료 (0초 경과) - 정상 종료

-> 자료형이 맞지 않다는 오류
-> 연산(+,-,*,,)등을 할 때는 반드시 int 절을 사용

EX2) 수치형 연산 2

class VarTest
{
    public static void main(String[] args)
    {
        System.out.println("변수 선언 및 저장");
        //자료형(문자, 숫자) 변수명;
        int age; //변수선언(메모리에 공간이 만들어진다)
        age=25; // 25를 변수 age에 저장
        System.out.println("올해 제 나이는"+age+"살 입니다."); //출력

        int x=0; //변수를 선언하면서 동시에 값을 저장한 경우

        byte b=23; // byte는 (-128~127) b는 변수
        short c=12; // short은 (-32768~32767)
        int sum=b+c; // sum 함수 앞에 반드시 자료형
        System.out.println("sum=>"+sum);
    }
}

---------- 컴파일 ----------
출력 완료 (0초 경과) - 정상 종료

---------- 실행 ----------
변수 선언 및 저장
올해 제 나이는25살 입니다.
sum=>35

출력 완료 (0초 경과) - 정상 종료

EX3) long 절

int no=1234567890000;
        System.out.println("합계=>"+(b+c));
        System.out.println("no=>"+no);

---------- 컴파일 ----------
VarTest.java:18: error: integer number too large: 1234567890000
        int no=1234567890000;
               ^
1 error

출력 완료 (0초 경과) - 정상 종료

-> 자료형 크기가 커서 저장이 안됨 : long형으로 입력


long no=1234567890000;
        System.out.println("합계=>"+(b+c));
        System.out.println("no=>"+no);

---------- 컴파일 ----------
VarTest.java:18: error: integer number too large: 1234567890000
        long no=1234567890000;
                ^
1 error

출력 완료 (0초 경과) - 정상 종료

-> long형으로 저장하는 경우 숫자 뒤에 L or l 입력
-> L 입력하지 않으면 무조건 정수로 봄


long no=1234567890000L;
        System.out.println("합계=>"+(b+c));
        System.out.println("no=>"+no);

---------- 컴파일 ----------
출력 완료 (0초 경과) - 정상 종료

---------- 실행 ----------
변수 선언 및 저장
올해 제 나이는25살 입니다.
sum=>35
합계=>35
no=>1234567890000

출력 완료 (0초 경과) - 정상 종료






1.2 실수(소수점) 
1) float : 4byte
     - 소수점 뒤에 F or f를 입력해야 float 형으로 저장

class  VarTest2
{
    public static void main(String[] args)
    {
        System.out.println("소수점을 저장");
        float f=5.3;
        System.out.println("f=>"+f);
    }
}

---------- 컴파일 ----------
VarTest2.java:6: error: incompatible types: possible lossy conversion from double to float
        float f=5.3;
                ^
1 error

출력 완료 (0초 경과) - 정상 종료

-> 무조건 double로 인식에서 에러
-> 소수점 뒤에 F or f를 입력

float f=5.3F;

2) double : 8byte
     - 자바에서 소수점이 있는 실수값은 무조건 double형으로 인식한다.



[데이터 저장시키는 순서]
byte > short > int > long > float > double


class  VarTest2
{
    public static void main(String[] args)
    {
        System.out.println("소수점을 저장");
        float f=5.3f;
        double f2=5.3;
        System.out.println("f=>"+f);
        System.out.println("f2=>"+f2);

        float m_float=123456.789123f;
        double m_double=123456.789123;
        System.out.println("m_float"+ m_float);
        System.out.println("m_double"+ m_double);


    }
}

---------- 실행 ----------
소수점을 저장
f=>5.3
f2=>5.3
m_float123456.79
m_double123456.789123

출력 완료 (0초 경과) - 정상 종료

- float : 소수점 둘째짜리까지 저장하는 경우 사용
- Double : 소수점 둘째짜 이상의 자릿수를 저장하는 경우, 즉 정밀한 값을 저장(ex. 계산기)




2.문자형 : char, String
1) char
     - 문자하나 저장 :홈따옴표'' 사용
     - 2byte (0~65535)까지 저장 가능

char str='a';


★ 2) String : 참조 자료형
 - 문자열(문자하나 이상 나열) : 겹따옴표 "" 사용 'ab' 안됨 -> "ab" 
- 자바에서 문자열은 기본자료형이 아니다.

String str2="abc";


    //문자+문자=문자열
        String s1="자바기초 문법";
        String s2="연산자";
        String s3=s1+s2;
        System.out.println("s3="+s3);

---------- 실행 ----------
s3=자바기초 문법연산자





*아스키코드값(0~255) : 가장 기본적인 문자
  A : 65, B:66, C:67, a:97 -> 컴퓨터가 문자를 숫자로 기억

*유니코드 : 아스키코드값 이상의 문자를 저장할 경우 사용하는 전세계 언어의 코드값
                  (비영어권에서 그 나라 언어로 사용할 수 있도록 하는 언어코드)

*자바스크립트가 객체지향언어가 아닌 경우
- 'ab'와 "ab" 모두 사용 : 일관성이 없다.
- 세미콜론 ;을 쓰지 않아도 된다.




3.논리형 : boolean
- 참과 거짓을 판별할 수 있는 것

-> 8가지 외에 나머지는 번부 객체로 저장(참조 자료형)
기본자료형 : int, byte, short, long, float, double, char, boolean



1) 논리값, 소문자만 가능

class VarTest3
{
    public static void main(String[] args)
    {
        System.out.println("논리적인값 저장");
        boolean b=True;
    }
}

---------- 컴파일 ----------
VarTest3.java:6: error: cannot find symbol
        boolean b=True; //소문자만 가능
                  ^
  symbol:   variable True
  location: class VarTest3
1 error

출력 완료 (0초 경과) - 정상 종료


2) 수식으로 논리값 설정 가능

boolean c=2>3; // 수식으로 표시 가능


3) 아스키코드값, 16진수

class VarTest3
{
    public static void main(String[] args)
    {
        System.out.println("논리적인값 저장");
            boolean b=true; //소문자만 가능
            boolean b2=2>3; //수식을 표시
            System.out.println("b=>"+b+",b2=>"+b2);

        System.out.println("=문자형=");
            char c1='A';
            char c2=65; // int c2=65-> 숫자, char c2=65(아스키코드값)
            char c3='\u0041'; //16진수형태로 저장(문자형태)
            // 16진수 : '\u0000' ~ '\uffff' -> 뒤에서부터 계산
            System.out.println("c1의 값은 "+c1);
            System.out.println("c2의 값은 "+c2+", c3의 값은 " + c3);
    }

}

---------- 실행 ----------
논리적인값 저장
b=>true,b2=>false
=문자형=
c1의 값은 A
c2의 값은 A, c3의 값은 A

출력 완료 (0초 경과) - 정상 종료





[ 변수의 특성 ]


class  VarTest4
{
    public static void main(String[] args)
    {
        System.out.println("변수의 특성");
        // 자료형 변수명=값; : 같은 자료형의 변수를 연달아서 여러번 선언
            int num,num2; //,로 구분해여 나열
            num=17;
            System.out.println("num="+num);
            num=18; //증간에 값이 변경되면 그 변경된 값을 기억
            System.out.println("num="+num);
            // 상수 : 값이 정해지면 바뀌지 않는 값
            int num6=40;
            System.out.println("num6="+num6);
    }

}

---------- 실행 ----------
변수의 특성
num=17
num=18
num6=40

출력 완료 (0초 경과) - 정상 종료



2) 상수

class  VarTest4
{
    public static void main(String[] args)
    {
        System.out.println("변수의 특성");
        // 자료형 변수명=값; : 같은 자료형의 변수를 연달아서 여러번 선언
            int num,num2; //,로 구분해여 나열
            num=17;
            System.out.println("num="+num);
            num=18; //증간에 값이 변경되면 그 변경된 값을 기억
            System.out.println("num="+num);
            // 상수 : 값이 정해지면 바뀌지 않는 값
            final int num6=40; //변수 앞에 final이 붙으면 상수가 된다.
            num6=50 ;
            System.out.println("num6="+num6);
    }

}

---------- 컴파일 ----------
VarTest4.java:14: error: cannot assign a value to final variable num6
            num6=50;
            ^
1 error

출력 완료 (0초 경과) - 정상 종료

-> num6 값이 상수여서 'num6=50'으로 변경할 수 없다는 오류






*에디터플러스 디버깅 방법(에러 잡는 방법)
콘솔창의 에러메세지를 더블플릭하면 에러가 발생된 문장으로 커서 이동
-> 앞뒤 라인을 확인(대부분이 오타)



[변수의 사용범위]

- 초기값 : 변수를 맨 처음 만들고 나서 맨 처음으로 저장된 값
- 변수를 선언하고 나서는 바느시 값을 입력해야 한다.

class VarTest5
{
    public static void main(String[] args)
    {
        System.out.println("변수의 사용범위(scope)");
        int su1;
        System.out.println("su1->"+su1);
    }
}

---------- 컴파일 ----------
VarTest5.java:7: error: variable su1 might not have been initialized
        System.out.println("su1->"+su1);
                                   ^
1 error

출력 완료 (0초 경과) - 정상 종료




2) 블록처리안 변수는 블록 안에서만 사용 가능하다.

class VarTest5
{
    public static void main(String[] args)
    {
        System.out.println("변수의 사용범위(scope)");
        int su1=10;
        {//블럭처리, 블럭안에 변수는 안에서만 사용 가능
            int su2=20;
            System.out.println("su2->"+su2);
        }
        System.out.println("su1->"+su1);
        System.out.println("블록 밖에 있는 su2->"+su2);


    }
}


---------- 컴파일 ----------
VarTest5.java:12: error: cannot find symbol
        System.out.println("블록 밖에 있는 su2->"+su2);
                                            ^
  symbol:   variable su2
  location: class VarTest5
1 error

출력 완료 (0초 경과) - 정상 종료
























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

객체지향언어  (0) 2017.06.16
다중IF문, While문, For문  (0) 2017.06.16
이클립스 설치 및 환경설정  (0) 2017.06.16
환경설정 2  (0) 2017.06.16
Java의 설치 및 환경설정  (0) 2017.06.16
Comments