변수



1. 변수는 기억공간에 대한 별칭. 자료형 지정 필수.

-> 별수는 데이터를 저장하기 위한 공간이므로 사전에 미리 준비되어 있어야 한다.


2. 변수명은 식별자 작성 규칙에 맞춰서 작성.

자료형 변수 = 데이터;

자료형 변수 = 구문;


3. 지역 변수와 멤버 변수로 구분. 자동 초기화 지원 여부가 다르다.

지역 변수는 메소드 내부에 선언된 변수.

멤버 변수는 클래스 차원에 선언된 변수.



//자료형의 초기값 예제

//클래스

public class Test10 {

    

    int a; //멤버변수(클래스 안에서 선언하며, 자동초기화 지원)

    int kor, eng, mat; // int 초기값은 0

    double d;  // double 초기값은 0.000000

    char c;    // char 초기값은 '' 즉, 아무것도 없는 빈값

    boolean l; // boolean 초기값은 false

    String str; // 스트링 초기값은 null (참조형 변수 초기값은 null)

    

    //메소드(클래스 선언 후 선언하는 하위개념)

    public void test() {

        int b = 0; //지역변수(메소드 안에서 선언하며, 사용자가 직접 초기화해야함)

        int tot = 0;

        

        System.out.printf("a=%d %n", a);

        System.out.printf("kor=%d %n", kor);

        System.out.printf("b=%d %n", b);

        System.out.printf("tot=%d %n", tot);

        System.out.printf("double=%f %n", d);

        System.out.printf("char=%c %n", c);

        System.out.printf("boolean=%b %n", l);

        System.out.printf("String=%s %n", str);

    }

      

  //main 메소드 -> 프로그램의 진입점

        public static void main(String[] args) {


        Test10 obj = new Test10();

        obj.test(); // 사용자가 지정한 메소드에 실행 명령 호출 부분

}

}




//결과

a=0 

kor=0 

b=0 

tot=0 

double=0.000000 

char=

boolean=false 

String=null 





연산자

◆ 연산자의 종류 ◆

 산술 연산자

 + - * / %

 부호 연산자

 + -

 대입 연산자 (주로 많이 쓰이는 연산자)

 = 복합대입연산자 (+= -= *= /= %=)

 관계 연산자 (주로 많이 쓰이는 연산자)

 > >= < <= instanceof

 등가 연산자

 == != 

 증감 연산자

 ++ --

 논리 연산자

 && || !

 조건 연산자

 ? :

 비트 연산자 (잘 안쓰임)

 & | ^ ~ << >> >>>




1. 산술 연산자 + * * / %


* 곱하기 연산자

/ 나누기 연산자 (몫 연산 가능)

% 나머지 연산자


"예를 들어, 990원에서 500원의 갯수는?" 을 구하려면,

몫 연산을 수행해야 되는데 이때는 나누기 연산에서 정수 나누기 정수 연산을 수행하면 몫으로 정수가 나오는 것을 이용하여 몫을 구할 수 있음.
나누기 연산에서 정수 나누기 실수는 실수임. 즉,

990 / 500 -> 1 (몫)

990 / 500.0 -> 1.98 (나누기)


500원을 뺀 나머지 금액은 아래와 같이 구할 수 있다.

990 % 500 -> 490 (나머지)


정수 값이 저장된 변수 / 정수 값이 저장된 변수 -> 정수 결과 (몫)

정수 값이 저장된 변수 / (double)정수 값이 저장된 변수 -> 실수 결과 (나누기) //(double)은 캐스트 연산자라고 부름




문제) 거스름돈을 환폐단위로 구분해서 출력.
실행예)
금액(10~1000)? 990
총액 : 990원
오백원 1개, 백원 4개, 오십원 1개, 십원 4개





3. 증감 연산자 ++ --


데이터++ -> 데이터는 상수이므로 연산자 사용 불가


변수++ -> 변수는 현재 저장된 값에 대해서 +1 연산을 수행한 후 기존의 값을 덮어쓰기함

변수1++ -> 변수 = 변수1 + 1 과 같은 연산. 변수값을 먼저 사용하고, 더하기 연산은 나중에 함.

++변수1 -> 변수1 = 변수 + 1 과 같은 연산. 더하기 연산을 먼저 수행하고, 변수값을 나중에 사용함.



증감연산자 예

// 클래스

public class Test12 {

    

    //main 메소드. 프로그램 시작점.

    public static void main (String [] args){

        

        //지역 변수. 사용자 직접 초기화필수

        int a = 0;

        

//증감 연산자는 변수의 값을 1씩 증가시킨다.

        System.out.printf("%d %n", a++);

        System.out.printf("%d %n", a);

        System.out.printf("%d %n", ++a);

        System.out.printf("%d %n", (++a + ++a));

        System.out.printf("%d %n", (a++ + a++));

System.out.printf("%d %n", a);

    }

}


//결과

6





4.대입 연산자 = 복합대입연산자


자료형 변수 = 데이터; // 데이터를 변수에 대입시킨다.

자료형 변수 = 구문;   // 구문의 결과 값인 데이터를 변수에 대입시킨다.


자료형 변수 += 데이터;  //-> 자료형 변수 = 변수 + 데이터 를 의미함.

자료형 변수 -= 데이터;  //-> 자료형 변수 = 변수 - 데이터 를 의미함.

자료형 변수 *= 데이터;

자료형 변수 /= 데이터;

자료형 변수 %= 데이터;




5. 관계 연산자 > >= < <= instanceof

-> 결과값은 true, false만 리턴.


a > b     a의 값이 b보다 큰지 확인해주는 연산자. 

a >= b    a의 값이 b보다 크거나 같은지 확인해주는 연산자. 


예제는 조건 연산자 문제와 함께 확인가능.



6. 조건 연산자(삼항연산자) ? :


자료형 변수 = (조건)? 값1 : 값2;

-> 조건의 결과가 true이면 값1, false이면 값2를 리턴.




문제) 두 개의 숫자 중에서 가장 큰 숫자 구하기.

실행 예)

숫자1? X

숫자2? Y

입력 받은 숫자: X, Y

가장 큰 숫자: X



문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기.

실행예문)

숫자1? X

숫자2? Y

숫자3? Z

입력 받은 숫자: X, Y, Z

가장 큰 숫자: X




문제) 세 개의 숫자 중에서 가장 작은 숫자 구하기.

숫자1? X

숫자2? Y

숫자3? Z

입력 받은 숫자: X, Y, Z

가장 작은 숫자: X






7. 등가 연산자 == !=

-> 결과값은 true, false를 리턴.
-> 기본자료형인 경우에만 정상적으로 결과출력가능.


변수 == 데이터 -> 변수의 값이 데이터와 같은지 확인.

변수 != 데이터 -> 변수의 값이 데이터와 같지 않은지 확인.



참조형(String..)인 경우는 == 연산으로 비교 불가. equals() 메소드를 이용했을때만 참조형의 값 비교가 가능함.
참조형은 기본 자료형과는 달리 메모리 내부적으로 참조주소값을 사용하기 때문에 등가 연산자가 사용이 되지 않는 것임.
(equals()는 참조주소값이 아닌 실제 진짜 데이터를 비교하는 메소드)


잠깐!!!    if 구문에 대해


if (조건) {

//조건이 참인 경우 실행할 부분

}else{

//조건이 거짓인 경우 실행할 부분

}




등가연산자의 사용방법 예

import java.io.*;


public class Test16 {

    public static void main (String [] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        

        System.out.print("비밀번호(숫자만 입력 가능)?");

        String password = br.readLine();

        

        /*

        //비교연산을 수행하기 위해서 양쪽의 데이터 타입(자료형)을 일치시켜야 한다.

        if(Integer.parseInt(password) == 1234){

            System.out.println("암호가 맞습니다.");

        }else{

            System.out.println("암호가 틀렸습니다.");

        }

        */

        

        //문자열 자료형을 비교하는 올바른 방법.

        if(password.equals("1234")){

            System.out.println("암호가 맞습니다.");

        }else{

            System.out.println("암호가 틀렸습니다.");

        }

    }

    

}


//결과

비밀번호(숫자만 입력 가능)?1234

암호가 맞습니다.





tips. 메소드에 대한 짧은 설명


Integer 클래스에서 Integer.parseInt(**)에서 parseInt(**)는 클래스의 하위 멤버중 하나인 메소드



WRITTEN BY
빨강꼬마

,

CMD HERE 레지스트리 등록 

 - 가고자 하는 폴더에서 우클릭메뉴를 통해 CMD 디렉토리 바로 이동


cmdhere.reg





참고


- 넷빈에서 한 프로젝트내에 두개 이상의 main이 있을 때 특정 .java파일을 실행하기 위해서는 shift + F6 단축키를 사용한다.

- 넷빈에서는 import를 자동으로 하려면 Alt+Enter키를 이용함.

- 키보드에서 받는 데이터는 무조건 String 일수밖에 없음

- 실수형을 계산할때는

int + int = int

int + double = double

형으로 출력되는 것을 기억하여 예를 들어 3을 나누어 주어야 하고 결과값이 실수가 나올수도 있을 경우라고 가정하면

3을 3.0으로 표기하여 코딩하면 올바른 값이 출력될 수 있다.




넷빈 다운로드 및 설치


1. http://www.oracle.com에서 넷빈(NetBeans IDE)다운로드

2. 넷빈에서는 자바 소스코드 작성을 위해서 프로젝트 단위로 생성.

1. New project > Categories: Java > Projects: Java Application
2. Project Name: 프로젝트 이름 입력 > Project Location: 위치지정
3. Create Main Class: 클래스 이름 입력
4. 끝!
5. 편집창에서 자바 소스 코드 입력
6. Run > Run Project (F6)





자바 기본 입출력


1. 표준 출력

프로그램 목적: 외부 데이터 입력 -> 내부적인 가공(연산) -> 결과 출력


표준 출력 스트림인 System.out 필드 -> PrintStream 자료형 반환

PrintStream 클래스의 하위 메소드인 println() 메소드 이용해서 데이터 출력.


예를 들어서,

System.out.println("메세지");

System.out.println(123);


-- 첫글자가 대문자인 단어는 클래스

-- 모든글자가 소문자인 단어는 키워드

-- 데이터 타입형은 클래스도 있고, 키워드도 있고....



println()과 printf()메소드를 자주 사용.

-- ln은 자동줄바꿈.

-- f는 포맷의 의미로 결과 출력시 서식과 함께 출력하고 줄바꿈을 자동으로 하지 않음.


System.out.printf("%s %n","메세지"); -- %s 는 문자 %d 는 숫자 라는 데이터의 서식을 지정

System.out.printf("%d %n",123);      -- %n 은 줄내림



//서식 지정의 예

public class Test05 {


    public static void main(String[] args) {

        System.out.println("hello, java world!");

        

        System.out.printf("%s %n","Hello, Java World!");

        System.out.printf("%s %s %s %n", "Kim", "Hyun", "Wook"); // 서식수에 맞추어 데이터수도 동일하게 

        

        System.out.printf("%d + %d = %d %n", 10, 20, (10+20)); // (x, ....) 안에 x에서는 데이터타입과 함께 화면에

                                                                                     // 그대로 출력할 내용도 함께 직접 쓸수 있음.

        System.out.printf("%d - %d = %d %n", 10, 20, (10-20));

        System.out.printf("%d * %d = %d %n", 10, 20, (10*20));

        System.out.printf("%d / %d = %d %n", 10, 20, (10/20)); // 연산결과가 0이 나오게 됨

        System.out.printf("%d / %.1f = %.1f %n", 10, 20.0, (10/20.0)); // 연산결과가 0.5가 나오게 됨.

    }

}


//결과

hello, java world!

Hello, Java World! 

Kim Hyun Wook 

10 + 20 = 30 

10 - 20 = -10 

10 * 20 = 200 

10 / 20 = 0 

10 / 20.0 = 0.5 




2. 자료형

-> 컴퓨터 내부에서 자료를 취급하는 방법.

-> 기본자료형과 참조형으로 나눈다.


▶ 기본 자료형은 크기가 고정적이고, stack 메모리에서 관리된다. 또한, 요청시 바로 데이터를 받을 수 있다.

- 기본자료형 - 정수형: byte, short, int, long (대표는 int)

                - 실수형: float, double (대표는 double)

- 논리형: boolean

- 문자형: char


-> 문자열은 String 클래스 자료형이다. 문자열은 "ABC"



▶ 참조형은 크기가 가변적이고, heap 메모리에서 관리된다. 또한, 요청시 데이터를 바로 받는 것이 아니라 참조값을 받게된다. 참조값은 실제 데이터를 찾을 수 있는 주소값이다.

- 참조형(가변형) - 배열 참조형

- 클래스 참조형: System, Object, String

- 인터페이스 참조형


메모리형식

Stack: 데이터를 바로 가져올수 있음.(복사의 개념. 원본은 남음). 기본자료형이 저장되는 공간

Heap: 데이터를 바로 가져올수 없으나, 가상의 값(참조값)을 가져올수 있다.(복사의 개념. 원본은 남음) 참조형이 저장되는 공간




3. 표준 입력

-> 키보드로부터 문자열(String 클래스 자료형)(enter를 입력할때까지 입력되는 문자들)을 입력 받을 때 사용

// String strData;    ->   strData로 선언된 변수에 대한 자료형 정의 구문

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String strData = br.readLine();  // 최상단 String strData; 구문을 없애고 strData 변수 앞에 String으로 써줘도 오케이


즉, 자료형 변수 = 데이터;

자료형 변수 = 외부 데이터 입력 구문;

자료형 변수;

변수 = 데이터;

동일하다는 의미임.


-> 변수의 자료형과 데이터의 자료형은 정확하게 일치하는 것이 권장하는 방법.

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader; // import java.io.*; 로 세줄을 하나로 처리할 수 있다.

클래스 선언{

public static void main (String [] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String 변수명 = br.readline();

프로그램 코딩소스~~~ 

.....

}

}


◆ 형광색 부분의 의미 

입력데이터를 받기위해(readline()) 항상 같이 사용해야는 부분으로, 

반드시 import와 throws 구문이 필요함.




//입력부터 처리, 출력 과정을 같이 실행하는 예   //Test06.java

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Test06 {

    public static void main(String [] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("이름:");

        String strData = br.readLine();

        

        //처리

        String message = String.format("당신의 이름은 %s입니다.", strData);

        

        //출력

        System.out.println(message);

                

    }

}



//결과

이름:kimhw

당신의 이름은 kimhw입니다.






잘못된 산술연산의 예

import java.io.*;


public class Test07 {

    public static void main(String [] args) throws IOException {

       

        //입력

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("국어:");

        String kor = br.readLine();

        

        System.out.print("영어:");

        String eng = br.readLine();

        

        System.out.print("수학:");

        String mat = br.readLine();

                

        //처리

        //총점=국어+영어+수학;

        String tot = kor + eng + mat ;

        

        //출력

        System.out.printf("입력된 데이터는 %s, %s, %s입니다.%n", kor, eng, mat);

        System.out.printf("총점은 %s 입니다.%n", tot);        

        

        

    }

}



//결과

국어:100

영어:90

수학:80

입력된 데이터는 100, 90, 80입니다.

총점은 1009080 입니다.


원인.

변수인 kor, eng, mat의 자료형은 String인 상대에서 + 산술이 이루어 졌기 때문에 "100", "90", "80"으로 컴퓨터가 인식하여

위와 같은 결과가 출력된 것이므로, Integer.parseInt(변수명) 을 통해 int 형으로 변환하여 처리해야 한다.



Integer.parseInt("숫자모양");

>> 스트링형인 것을 숫자로 형변환 시킬수 있음





입력된 숫자 데이터를 형변환하여 숫자로 바꾸는 과정(올바른 산술연산의 예)

-> 외부에서 입력된 데이터는 모두 자료형이 문자열형(String)이므로 필요시 숫자(int)로 변환하려면 Integer.parseInt()메소드를 이용해야 한다.


import java.io.*;


public class Test08 {

    public static void main(String [] args) throws IOException {

                        

        //입력

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("국어:");

        String kor = br.readLine();

        

        System.out.print("영어:");

        String eng = br.readLine();

        

        System.out.print("수학:");

        String mat = br.readLine();

                

        //처리

        //총점=국어+영어+수학;

        

        int tot = Integer.parseInt(kor) + Integer.parseInt(eng) + Integer.parseInt(mat);      

        

        

        //출력

        System.out.printf("입력된 데이터는 %s, %s, %s입니다.%n", kor, eng, mat);

        System.out.printf("총점은 %d 입니다.%n", tot);

                

    }

}




//결과

국어:100

영어:90

수학:80

입력된 데이터는 100, 90, 80입니다.

총점은 270 입니다.






문제) Test08 소스에서 평균 계산해서 출력하는 과정 추가






문제) 현재 원-달러 환율은 1달러에 1119원입니다.

특정 달러 금액을 입력하면 원화금액을 출력하는 프로그램 작성


실행 예)

달러 금액? 10

10 달러 -> 11190원





WRITTEN BY
빨강꼬마

,

- 데이터 타입의 종류
 - 숫자타입: number (정수 및 실수 모두 포함)
          표현범위: number(5) -> -99999 ~ 99999
                    number(3) -> -999 ~ 999
                    number(5,2) -> -999.99 ~ 999.99
                    number(6,3) -> -999.999 ~ 999.999


 - 문자타입
   ①char: 고정형 문자타입
     name char(10) -> name 컬럼에 입력되는 데이터의 크기는 무조건 10Byte로 들어온다. 단, 10Byte가 넘는 데이터는 입력이 불가함.
                          -> 한글의 경우 한글자당 2Byte 영문은 1Byte. (키보드에서 한키로 입력되는 숫자, 영어등은 1Byte. 없는 것은 2Byte)

            ex: '이순신'             -> 10바이트로 고정되서 들어옴
                '김구'               -> 10바이트로 고정되서 들어옴
                '이에리사'           -> 10바이트로 고정되서 들어옴
                '박차고나온애가이뻐' -> 18바이트이므로 입력불가


   ②varchar2: 가변형 문자타입
     name char(10) -> name 컬럼에 입력되는 데이터의 크기는 해당 데이터의 크기만큼 들어온다. 단, 10Byte가 넘는 데이터는 입력이 불가함.

            ex: '이순신'             -> 6바이트로 맞추어 들어옴
                '김구'               -> 4바이트로 맞추어 들어옴
                '이에리사'           -> 8바이트로 맞추어 들어옴
                '박차고나온애가이뻐' -> 18바이트이므로 입력불가

   ③Nchar , Nvarchar2: 크기의 단위가 Byte가 아니라 글자수를 나타냄
            name Nchar(10) -> name 컬럼에 입력되는 데이터의 크기가 유니코드등을 포함하여 글자수 최대 10글자까지 입력됨. 넘으면 당연히 입력 불가

            ex: '이순신'             -> 10개의 글자수로 고정되어 들어옴. -> 20Byte
                '김구'               -> 10개의 글자수로 고정되어 들어옴. -> 20Byte
                '박차고나온애가이뻐' -> 10개의 글자수로 고정되어 들어옴. -> 20Byte
                'John michael'       -> 12개의 글자수(공백포함)이므로 입력불가.
                           
            name Nvarchar2(10) -> name 컬럼에 입력되는 데이터의 크기가 유니코드등을 포함하여 글자수 최대 10글자까지 입력됨. 
                                              넘으면 당연히 입력 불가

            ex: '이순신'             -> 3개의 글자수로 들어옴. -> 6Byte
                '김구'               -> 2개의 글자수로 들어옴. -> 4Byte
                '박차고나온애가이뻐' -> 9개의 글자수로 들어옴. -> 18Byte
                'John michael'       -> 12개의 글자수(공백포함)이므로 입력불가.


 - 날짜타입: date
          date예문:
    select sysdate, current_date from dual;
    select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'),
    to_char(current_date, 'yyyy-mm-dd hh24:mi:ss')  from dual;

※ 컬럼명에 숫자가 들어온다 하더라도 가장 앞에 숫자 0이 들어올 수 있는 개연성이 있을 경우 number 형이 아닌 문자형으로 지정하여야 한다
※ 문자는 시작과 끝에 반드시 '을 사용해야 함. 사용하지 않을 경우 숫자로 인식함.


- table에 대한 comment 처리문
comment on table [table명] is '[주석내용]';

- table내 각 column에 대한 comment 처리문
comment on column [table명].[table내 주석처리할 column명] is '[주석내용]';


- 특정 테이블에 있는 각 컬럼에 대한 주석확인 처리문

select column_name, comments
from user_col_comments
where table_name = '[table명]';



- 특정 테이블의 컬럼명과 데이터 타입 조회 명령어

describe [table명];
혹은
desc [table명];



- 특정 테이블 데이터 조회
select * from [table명];



- 데이터 입력하기
insert into [table명] values([column1 데이터], [column2 데이터], ~~~~~~~, [마지막 column 데이터]);




※ insert 명령어로 입력한 데이터는 디스크에 기록되는 것이 아닌 메모리에 기록하는 것. commit으로 디스크에 기록함



- 데이터 변경하기
update [table명] set [변경할 컬럼명1] = [변경할 데이터], [변경할 컬럼명2] = [변경할 컬럼명2] + [변경할 데이터] where [변경대상인 컬럼행] = [변경대상의 컬럼 데이터];



※ where 구문이 없을 경우 모든 행의 해당 컬럼이 변경됨
※ 변경 데이터중, X = X + 200 으로 예를 들면 X컬럼에 있는 값과 200을 합산한 결과 데이터를 최종데이터로 치환한다는 의미임
※ update 명령어로 변경한 데이터는 디스크에 기록되는 것이 아닌 메모리에 기록하는 것. commit으로 디스크에 기록함



- 데이터 삭제하기
delete [table명] where [삭제할 컬럼행] = [삭제할 컬럼행에 있는 열 데이터];




※ delete 명령어로 삭제한 데이터는 디스크에서 삭제하는 것이 아닌 메모리에서 삭제하는 것. commit으로 디스크에서 삭제함.



- commit
메모리에 상주된 데이터를 디스크에 기록하는 명령어
ex: commit;

- rollback
메모리에 상주된 데이터를 삭제하는 명령어
ex: rollback;


WRITTEN BY
빨강꼬마

,