210728~29

Joy·2022년 2월 14일
1

JAVA

목록 보기
1/22

변수

  • 변수(Variable)

메모리(RAM)에 값(Data)을 기록하기 위한 공간

  • 변수 사용 목적

가독성이 좋아진다.

재사용성 증가로 인한 코드량 감소, 유지 보수가 용이하다.

  • 변수에 값 기록 이유

프로그램 실행 시 사용할 값(Data)이 있다면 그 값은 먼저 메모리에 기록되어야 한다.

  • 변수의 선언

메모리 공간에 데이터를 저장할 수 있는 공간을 할당하는 것

자료형(변수 타입 지정) + 변수명(변수명 지정) + ;(마침)

자료형변수명bytebit표기
논리형 변수 선언boolean isTrue;1byte8bit
문자형 변수 선언char ch;2byte16bit
문자열 변수 선언String str;참조형
정수형 변수 선언byte bnum;1byte8bit
short snum;2byte16bit
int inum;4byte(정수 기본 자료형)32bit
long lnum;8byte64bit0L
실수형 변수 선언float fnum;4byte32bit0.0f
double dnum;8byte(실수 기본 자료형)64bit0.0 또는 0.0d

  • 데이터 저장 단위

저장 공간이 제한적이기 때문에 저장 크기에 대한 기준과 CPU가 데이터를 처리할 때 일정한 기준이 필요하다.

  • 비트(bit)

-컴퓨터가 나타내는 데이터의 저장 최소 단위, 2진수 값 하나를 저장할 수 있는 메모리 공간을 의미한다.

  • 바이트(byte)

-데이터 처리 또는 문자의 최소 단위. 8개의 비트가 모여 하나의 바이트를 구성한다.

  • 변수 저장 가능 범위

->컴퓨터는 2진수로 인지하기 때문에 2ⁿ(n=비트 크기)로 범위를 할당한다.

  • 변수의 명명 규칙
  1. 대소문자가 구분되며 길이 제한이 없다.

  2. 예약어를 사용할 수 없다.

  3. 숫자로 시작할 수 없다. ex) age1(o) / 1age(x)

  4. 특수문자는 '_'와 '$'만을 허용한다.

  5. 여러 단어 이름은 단어의 첫 글자를 대문자로 한다.

    단, 첫 시작 글자는 소문자로 하는 것이 관례이다. ex) userName


  • 값 대입과 리터럴

  • 값 대입

생성한 변수(저장 공간)에 값을 대입하는 것

ex)int age;
   age = 10;
   age = 20;

변수는 한 개의 데이터만 보관!! 마지막에 대입한 값은 보관한다.

-> 20을 마지막에 대입했으니 10은 지워진다.

  • 리터럴

변수에 대입되는 값 자체

ex) long l = 10000L;

  • 변수의 초기화

변수를 사용하기 전에 처음으로 값을 저장하는 것

-> 지역변수는 반드시 초기화.

ex)int age;       또는      int age = 100;
   age = 100;
 (선언 후 초기화)          (선언과 동시에 초기화)

출력메서드

  • System.out.print()

() 안의 변수, 문자, 숫자, 논리 값은 모니터에 출력해 주는 메서드

ex) System.out.print("안녕하세요");

  • System.out.println()

print 문과 동일하게 출력은 해주지만 출력 후 자동으로 출력 창에 줄 바꿈을 해주는 메서드

ex) System.out.println("안녕하세요");

  • System.out.printf("%형식", 변수 등)

정해져 있는 형식에 맞춰서 그 형식에 맞는 값(변수)을 줄 바꿈 하지 않고 출력

%d :정수형, %o :8진수, %x :16진수
%c :문자, %s :문자열
%f :실수(소수점 아래 6자리), %e :지수 형태 표현, %g :대입 값 그대로
%A :16진수 실수
%b :논리형

*정렬방법
-%nd : n 칸을 확보하고 오른쪽 정렬
-%-nd : n 칸을 확보하고 왼쪽 정렬
-%.nf : 소수점 아래 n 자리까지만 표시


상수

  • 상수

수학에서는 변하지 않는 값을 의미한다.

컴퓨터(JAVA)에서는 한 번만 저장(기록) 할 수 있는 메모리를 의미한다.

  • 상수 선언 방법

final int AGE;

*상수명은 일반적으로 대문자로 표기

  • 상수 초기화 방법

1) 선언과 동시에 초기화

final int NUM = 100;

2) 선언 후 초기화

final int NUM;

NUM = 100;

*초기화 이후 다른 데이터(값)를 대입할 수 없다.

  • 데이터 오버플로

127+1을 하면 범위를 초과한 128이 되고 허용된 범위 이상의 비트를 침범하게 되는 현상이다.

1byte : -128~127

127 + 1 = -128

ex) 전자시계를 예로 들었을 때, 23:59:59(127, 전자시계가 표현할 수 있는 가장 큰 범위)에
    1초를 더하면 00:00:00(-128, 가장 작은 값)으로 바뀌는 것과 같은 원리

  • 0 1 1 1 1 1 1 1

부호 비트를 제외한 모든 자리를 1로 채워 넣으면 byte 자리에서 bit로 표현할 수 있는 최댓값.
10진수로는 127.

*가장 앞자리는 부호 비트의 용도. 0이면 양수, 1이면 음수

  • 1 0 0 0 0 0 0 0

byte형 허용범의 최솟값. -128.


형 변환

  • 형 변환(casting)

값(Date)의 자료형을 바꾸는 것 (boolean 제외)

  • 컴퓨터의 값 처리 원칙
  1. 같은 종류 자료형만 대입 가능하다.

  2. 같은 종류 자료형만 계산 가능하다.

  3. 계산의 결과도 같은 종류의 값이 나와야 한다.

ex) int형 변수에는 int 값만 대입할 수 있고, int형 변수끼리만 계산 가능,
    그 결과 역시 int형이 나와야 한다.

*원칙이 지켜지지 않은 경우(ex) 프로그램에서 정숫값과 실숫값을 더하는 연산이 필요한 경우)에 형 변환이 필요하다.

  • 형 변환 예시
123456789 -> 123456789.0
  (int)        (double)
  
   'A'    ->     65
  (char)        (int)
 
  3.14f   ->      3
 (float)        (int)

*형 변환하고자 하는 값과 자료형의 표현 범위 차이에 따라 형 변환 방법이 나뉜다.(자동 형 변환, 강제 형 변환)

  • 자동 형 변환

컴파일러가 자동으로 값의 범위가 작은 자료형을 값의 범위가 큰 자료형으로 변환

               어떻게 정수형 long(8byte)에서  실수형 float(4byte)로 변환이 가능할까? 
               정수와 실수의 저장방법에 차이가 있기 때문에 가능하다.
               float가 bit 수는 적지만, long보다 표현 가능한 수의 범위가 더 넓다.
               문자형 char가 어떻게 정수형 int로 변환이 가능할까?
               컴퓨터는 각각의 문자에 해당하는 숫자를 두어서 처리한다.
               ex) A는 65의 숫자로 처리*short는 음수~양수, char의 경우는 양수


ex) int a = 12;
    double d = 3.3;
    double result = a+d;
    
    a+d -> 12+3.3 -> 12.0+3.3 -> 15.3
    (a가 double로 자동 형 변환되어 15.3이라는 결과가 나온다.)
    
    *단, byte와 short 자료형 값의 계산 결과는 무조건 int로 처리한다.

  • 강제 형 변환

값의 범위가 큰 자료형을 값의 범위가 작은 자료형으로 변환

강제 형 변환 시 데이터 손실이 발생할 수 있다. -> 데이터의 변형, 손실을 감수하고 강제 변환하는 것임!

ex) double temp;
 int name = (int) temp;
 
-> 8byte인 double형 변수 temp를 4byte인 int형 변수 name에 담고자 할 때는
   () 안에 변환하고자 하는 자료형인 int를 명시해 주어야 한다.

  • 데이터 손실
ex) int num = 290;
    byte num2 = (byte) num;

               int(4byte, 32bit) 공간에 290이라는 수가 bit로 표현이 되어 있지만,
               이를 byte로 강제 형 변환하면 8bit 공간 밖에 남지 않기 때문에 앞의 자료는 손실,
               34라는 전혀 다른 숫자가 되어 버린다.
profile
👻

0개의 댓글