ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (국비교육) 3 - 변수와 자료형
    개발/국비교육 2023. 6. 2. 17:56

    ■ 편리한 기능

     

    1. 이클립스 작업표시줄 고정하여 지속 사용

     

    Close All

    2. .java 파일 모두 닫기 위해서는 오른쪽 버튼 클릭 후 "Close All" 클릭 

     

    ■ 메인메소드 기본 구조

     

     

    ■ 변수

     

     

    - 변수: 변하는 수 <-> 상수 : 변하지 않는 수(불변) ex)파이

    - 변수는 프로그램이 진행할 때 중간의 값을 저장해두기 위한 공간

    - 데이터 타입 변수이름; = 변수선언

    ex) int number;

    - 값 대입

    ex) number = 100

    - 대입 : 오른쪽의 값을 왼쪽에 넣다. (=)

    같다의 의미랑 다르며, 같다는 " == " 이다. 

    ex) 1 + 2 == 3

    - 변수 선언 + 값 대입 == 변수 초기화

    ex) int num = 101; 

    - 리터럴 = 고정된 값

    - 실수형 타입

    ex) double num1 = 1.000009;

    - 문자열 타입 ("")

    ex) String num2 = "Hello";

    - 실수형 타입

    ex) int num3 = 10;

    - 대입 기호 기준으로 양 변의 테이터 타입이 동일해야 대입

    ex) int num3= num;

    ※ num 이 정수형이기 때문에 num3도 int 타입이기 때문에 에러x

    - 형변환 = 데이터타입 변환

    ex) num3 = (int) 10.33333;

    ※ num3 이 정수형이기 때문에 (int)를 붙여 10.3333 을 형변환 시킨다.

    이를 위해 cast( = 값의 절삭)를 사용하면 되나, 값을 잃을 수 있다. 

    System.out.println(num3); 했을 경우 값은 10.33333 이 아닌 10 이 나온다.

    - 자동 대입 = 프로모션

    ex) 
    int iNumber = 14;
    double dNumber = iNumber; 
    ※ 왼쪽변이 실수이고 오른쪽은 정수형으로 왼쪽이 더 큰타입이라 int가 자동 대입됩니다. 

    값은 실수를 따라 14.0 으로 나온다.

     

    * 변수는 우리가 이미 익숙하게 사용하고 있는 개념입니다. 

    * 예를 들어 하나의 연삭식이 있을 떄
    * 1 + 2 = 3
    * 3 + 3 = 6
    * 8 - 5 = 3


    * 변수를 사용하는 주 목적은 같은 타입(type)의 값이 프로그램 실행시에
    자주 변경되어야 할 때 이를 변수에 담아서 활용하기 위함


    변수 선언(초기화) 규칙 (꼭 기억)

     

     

    1. 변수는 특정 블럭 {} 내부에 어디서건 선언 가능합니다.
    만약 메소드 바디 내부에서 선언 = 지역 local 변수
    클래스 바디에서 선언되어지면 = 인스턴스 instance 변수 
    (인스턴스 변수는 나중에 객체지향시간에 배울 예정)

    2. 변수가 처음 선언될 때 반드시 변수의 좌측에
    변수타입(type) 일명 데이터 타입이 선언되어야 합니다. 


    3. 변수는 한번 선언되면 그 변수를 포함하고 있는 블럭 내에선
    절대 재선언이 불가능 합니다. 

     


    4. 같은 타입의 변수는 한 라인에 ; 없이 계속 선언 가능

    각 변수는 , 로 구분하며 마지막에 ; 를 붙입니다. 

     

    5. 지역변수는 반드시 사용 전에 초기화 되어야 합니다. 

     

    ■ 이름 만들기 (변수명, 클래스명, 메소드명, 상수명)

     

     

    1. 사용 가능한 문자 : 영어 소문자, 대문자, 숫자, $, _
    숫자는 이름 첫머리에 올 수 없습니다.

     


    2. 클래스 이름 : 위 사용 가능한 문자를 조합합니다.
    반드시 첫글자는 대문자이어야 합니다.
    한 단어 이상의 단어들의 조합일 때는 새로운 단어
    첫머리글자를 대문자로 합니다. = 파스칼 표기법

     

     

    3. 메소드명, 변수명 : 사용가능한 문자를 조합합니다.
    첫 글자는 소문자로 시작합니다.
    두 단어의 결합이라면 뒤에 오는 단어 첫 글자를 대문자
    = 카멜 표기법

     


    4. 상수명 : 모든 단어를 대문자로 구성.
    두 단어의 결합이라면 두 단어 사이에 _ 붙입니다.
    스네이크 표기법

     

    [참고] : https://heytech.tistory.com/294

     

    스네이크 표기법 vs 카멜 표기법 vs 파스칼 표기법

    프로그래밍 시 변수명, 함수명 등의 관습(convention) 표기법 3가지에 대해 알아봅니다. 스네이크 표기법(snake_case) 단어 사이에 underscore(_)를 활용하는 표기법 Python에서 주로 사용 변수명, 함수명, 데

    heytech.tistory.com

     

     

     

    5. 사용할 수 없는 이름 : 예약어는 사용 불가 (이클립스 보라색으로 표시)
    자바에서 프로그래밍 진행에 필요한 단어를 미리 등록하고 사용하고 있습니다. 

     

    ■ 데이터 타입 (정수/실수/문자/논리)

     

     

    - 각 타입마다 메모리 크기가 엄격하게 제한됩니다.
    - 정수 타입
     * byte
     * short
     * int(integer)_기본타입
     * long
     
     - 실수 타입
     * float
     * double_기본타입

    - 문자 타입 = 글자 한글자 = A, 가
     * char(character)

     

    - 논리 타입 = true 참/ false 거짓
     * boolean

     

    ■ 프로모션과 캐스트

     


     - 프로모션 : 변수를 대입할 때 작은 타입을 큰 타입에 대입하는 형태 = 자동 대입
     - 캐스트 : 큰 타입을 작은 타입에 대입할 때 범위를 초과하므로

    반드시 해야하는 연산 (type)을 명기해서 값을 대입시킵니다.
    이때 주의할 점은 상위 비트를 대입되는 타입에 맞게 잘라내기 때문에 값의 변화가 올 수 있습니다.

     

    괄호를 하는 이유는 괄호를 하지 않으면 연산 순서 법칙에 따라 32767을 short 타입으로 먼저 바꾸게 되어,

    범위안에 들어오지 않기 때문이다.

     

    ■ 식별자(표식자)

     

    - 최댓값 : MAX_VALUE

    - 최솟값 : MIN_VALUE 

     

     long lNum 의 값이 9223372036854775807 로 요청 받았으나, 정수의 기본형은 int이다.

    이는 int의 허용 범위를 넘었기 때문에 long로 인식시켜줘야 한다. 

    따라서 이를 위해 식별자 "L" 을 적어주면 오류 없이 컴파일 가능하다.

     

     

    마찬가지로 float fNum 의 값이 3.14로 요청 받았으나, 실수의 기본형은 double이다.

    오른쪽의 숫자가 double로 인식되기 때문에 오류가 나지 않기 위해서는 float로 인식시켜줘야 한다.

    따라서 이를 위해 식별자 "F" 을 적어주면 오류 없이 컴파일 가능하다.

     

    ■ 기본 타입 크기 순서

     

    - 정수보다 실수를 더 큰수로 인지합니다.

    - byte < short < int < long < float < double

     

    ■ 예제 문제1

     

    먼저 사과, 배, 오렌지를 변수를 선언하고 초기화 해준다.

    이후에 총 생산갯수를 total, 시간당 생산 갯수를 avg 로 선언한다.

     

    선언이 완료되면 total = apple + pear + orange; 로 대입해주고, avg를 구해준다.

    avg는 총 생산 갯수를 시간(24) 로 나누면 되는데, total / 24 를 하면 0.7083333333333333 이 나와야 하지만

    total과 24 모두 int 형으로 정수 0 이 나오게 된다.

     

    따라서 24를 24.0 double 로 만들어 주고, int / double 을 하게 되면 double 로 표시하게 나온다.

    왜냐면 계산에서 서로 다른 타입이 계산된다면 최고 큰 타입으로 변환이 일어나기 때문이다.

     

    문제에서 평균 변수는 float 타입으로 선언해달라 했으므로 캐스팅을 통해

    (float) 처리하여 avg = (float) (total / 24.0); 로 만들어준다.

     

    이후 예시와 같이 출력을 위해 문자("") 와 + 를 사용하여 연결시켜준다. 

     

    ■ 문자형

     

    - 문자형 : 한글자만 저장합니다. 

    - 문자 하나를 저장하기 위한 타입
    - 반드시 값으로는 문자 하나만 존재해야 하며
    - 하나 이상일 경우엔 String(문자열)에 저장합니다.
    - char 타입은 정수 타입입니다.

    - 크기는 음수가 없는 2byte의 범위를 가집니다. (0 ~ 65,535)
    - 문자값을 표현할 때에는 반드시 홀따옴표를 이용

    EX) String 문자열 " ", char 캐릭터 ' '
    - 정수타입이기 때문에 int에 프로모션 됩니다. 

    ※ int 가 char 보다 크기 때문이다.
    - int값 또한 문자로 변경될 수 있습니다. (cast)

    ※ 큰 타입 int가 작은 타입 char 에 대입하여 범위를 초과하여 cast 처리해준다.

     

    Q) 아스키코드? (시작 순서와 끝나는 숫자는 기억! 시작: 0 끝: 127)

    A)  컴퓨터는 문자를 문자로 기억하지 않는다. 그대신 순자로 기억하고 표현한다.

    예를 들면 문자 'A'는 65로, 'B'는 66으로 표현한다. 모든 사람이 공통적으로 쓸 수 있는 표준 규격이 필요한데, 이것이 바로 아스키(ASCII : American Standard Code for Information Interchange)다. 1967년에 만들어졌고 알파벳에 기초를 둔 문자 인코딩 방법이다.

     

    1바이트로 구성되어 있는 아스키 코드는 8비트(==1바이트) 중 7개의 비트만 사용한다. 나머지 1비트는 Parity Bit이라고 불리는 오류 체크를 위한 비트로 사용

     

    Q) 유니코드?

    A) 유니코드는 전 세계의 문자를 일관되게 표현할 수 있도록 설계된 표준이다.

    유니코드는 1바이트가 아닌 2바이트, 즉 16비트로 문자를 표현한다. 따라서 2^16=65536 개의 문자를 표현

     

    https://stepbystep1.tistory.com/10

     

    아스키 코드표(ASCII Table)

    아스키 코드표다. 컴퓨터는 문자를 문자로 기억하지 않는다. 그대신 순자로 기억하고 표현한다. 예를 들면 문자 'A'는 65로, 'B'는 66으로 표현한다. 그런데 사람마다 규칙을 개인대로 정하면 자칫

    stepbystep1.tistory.com

    아스키코드(ASCII Code)와 유니코드(Unicode)에 대하여 (tistory.com)

     

    아스키코드(ASCII Code)와 유니코드(Unicode)에 대하여

    아스키 코드란? 아스키 코드(ASCII)는 American Standard Code for Information Interchange를 줄인 말이다. 이름 그대로 미국에서 정의한 정보 교환용 부호체계이다. 아스키 코드는 영문 알파벳을 사용하는 대표

    code-lab1.tistory.com

     

     

    문자열 자르기 .charAt(자리수)

    -> char 타입으로 나옵니다.

     

    0  1   2   3   4 (각 자리 숫자)

    안 녕 하 세 요

     

    문자형 '9' 는 그대로 9가 나온다.

     

    num 값은 33이 나오지만

    num 값을 캐스팅한 (char) num 값은 아스키코드에 따라 !(33) 가 나온다.

     

    ch 값이 위에는 9 밑에는 B가 나오는데 57은 아스키코드로 하면 숫자 9이다. 

    B는 (ch + 9) 를 먼저 계산해서 66 정수를 char로 캐스팅하여 B가 나온 것이다.

     

    아래는 for 반복 구문을 통해 아스키코드 소문자 a 부터 z까지 표현한 것이다.

     

    10진법 2진법

     

    10진수   2진수
         0        0 

         1        1 = 1비트
         2       10 
         3       11
         4      100
         5      101
         6      110 
         7      111 = 3비트 = 2^2 + 2^1 + 2^0 
         8     1000 
         9     1001
        10     1010 = 4비트 (bit 자리수)

     

    ■ 논리형(boolean)

     

     

    - 저장할 수 있는 값 : true 참 ON 1 / false 거짓 OFF 0

    - == : 같다 라는 의미

    - 계산 순서는 대입이 제일 마지막

     

     

     

    - ! 는 반전 not을 의미. 따라서 !true 값은 false 가 나온다.

     

    ■ 자바 기본타입(p) 정리

     

     

    ■ 연산자 (+ - / *)


    - 모든 프로그램에서느 데이터의 계산을 위해서 연산자를 사용합니다.
    - 지금 배울 연산자는 다른 프로그래밍에서도 비슷하게 씁니다.
    - 주의해서 보셔야 할 것은 연산자의 연산 순서 입니다.

     

    ■ 연산자 순서


    1. 최우선 연산자
    . 클래스 또는 객체 소유의 변수, 메소드 등을 호출
    [] 배열
    ()  

     

    2. 단항 연산자
    !(논리부정) ~(비트반전) +/-(부호연산) ++/--(선행증감)
        
    3. 산술 연산자 +, -, /, *, %(모듈러:나머지 값)

     

    4. 쉬프트 연산자 <<, >>, >>>


    5. 관계 연산자 <, >, <=, >=, ==, !=


    6. 비트 연산자 &, |, ^


    7. 논리 연산자 &&, ||, !


    8. 삼항 연산자   조건식 ? 참일때 : 거짓일때;


    9. 배정대입 : =, +=, -=, %=, /= 등등  


    10. 후행증감
    ++/--

     

    ■ 연산순서 실습

     

     

    ++ 가 2번째, = 9번째 순서이므로 num 값은 1에서 1이 증가한 2

    num2는 2로 바뀐 num의 대입이므로 2가 된다.

     

    ++가 두번째 이므로 num은 3 num2는 3이 된다.

    증가한 num과 num2를 + 가 세번째 이므로, 합한 것을 9번째 대입하면 num3가 나온다.

    따라서 num3 값은 6이 된다.

     

    --와 ++가 두번째 순서이므로 num은 2 num2는 4가 된다.

    2가 된 num과 4가 된 num2를 3번째 + 로 더해주고 이를 num3에 대입해준다.

    따라서 num3은 6이 된다.

     

    이번에는 - 3번째이므로 num에서 num2를 빼서 9번째인 =  을 대입하면 num3이 된다.

    따라서 num3은 -2가 된다.

    이후 10번째 -- 를 각각 해주면 num은 1 num2는 3이 된다. 

     

    +가 3번째 이므로 num 과 num2를 더하고 9번째인 =  을 대입하면 num3이 된다.

    따라서 num3은 4가 된다.

    이후 10번째 --를 각각 해주면 num은 0 num2는 2이 된다. 

     

    ■ 몫과 나머지 (/, %)

     

    나눈 후 몫은 / 로 표현하고, 나눈 후 나머지 값은 % 로 표현할 수 있다.

     

     

    해당 코드에서 ssnCode = 1 로 홀수이며 이에 대한 나머지 값이 result 변수에 대입된다.

    1에 대한 나머지 값은 1이므로 조건문 if 에서 result 값이 0과 같다에서 else 값을 나타나게 된다.

    ※ 1 % 2 와 같이 나눌 숫자가 나누는 수보다 작으면 그대로 1을 반환한다. 

    따라서 "당신은 남자 입니다." 가 출력된다.

     

    ■ 쉬프트 연산자

     

     

    Integer.toBinaryString(sh) 는 sh 값을 이진수로 표현해준다.

     

    여기서 <<  3 는 이진수를 왼쪽으로 3칸 이동해달라는 말이다.

    즉 2의 이진수 10은 왼쪽으로 3칸 이동하면

    10

    10000 이 된다.

     

    >>는 아래 10의 이진수 1010은 오른쪽으로 2칸 이동해 달라는 뜻으로

    즉 10의 이진수 1010은 오른쪽으로 2칸 이동하면

    1010

    10 이 된다.

     

    >>> 의 경우 오른쪽으로 이동하되, 이동에 따른 빈공간은 0으로 채운다.

    따라서 30칸 오른쪽으로 이동하면 빈공간은 0으로 채워져 11이 나오게 된다.

     

    >>와 >>> 의 차이는 >> 는 이동에 따른 빈공간은 음수의경우엔 1, 양수의 경우엔 0으로 채우지만,

    >>> 는 이동에 따른 빈공간은 0으로 채운다.

     

     ■ TEST

     

     

    = 대입이 9번째, --가 10번째로 

    num9의 값이 먼저 num10에 대입돼 num10은 1이 되고,

    이후 --로 num9 값을 빼주면 0이 된다. 

     

    2번째인 --먼저 하여 num9값은 -1이 되고,

    num9 + num9 는 -2가 되어 num11에 대입하게 된다.

    이후 num9 값을 -1 해주면 num9는 -2가 된다. 

     

    ※ 기호 설명

    - /*   */ : 주석 설정

    - /** : 문서 주석

     

    ※ 단축키

    - 정렬 : Ctrl + Shift + F

Designed by Tistory.