잇연

[국비지원교육] JAVA 1일차_변수_04.29 본문

JAVA

[국비지원교육] JAVA 1일차_변수_04.29

잇연 2022. 4. 29. 22:47

2장 변수

변수란

변수 : 하나의 값을 저장할 수 있는 기억공간

 

변수타입

값(data)의 종류는 다음과 같다.

 

 

데이터 타입은 기본형과 참조형으로 나눈다.

기본형 : 8개 boolean, char, byte short, int, long, float, double, 실제값을 저장

참조형 : 기본형을 제외한 나머지(String, System 등), 객체의 주소를 저장(4 byte, 0x00000000~0xffffffff)

 

문자형과 숫자형으로 나누면 다음과 같다.

  • 문자 : char
  • 숫자
    • 정수 : byte, short, int, long
    • 실수 : float, double

 

기본형

논리형 : true와 fasle중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용된다. 

문자형 : 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

정수형 : 정수 값을 저장하는데 사용된다. 주로 사용하는 것은 int와 long이며,

           byte는 이진 데이터를 다루는데 사용되고,

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

실수형 : 실수 값을 저장하는데 사용된다. float와 double이 있다.

 

byte=8bit (bit는 0,1만 저장이 가능한 공간), 부호비트: 맨앞에 오며, 0(양수), 1(음수)

 

종류                |크기 1 2 3 4
논리형 boolean      
문자형   char    
정수형 byte short int  long
실수형     float double

 

자료형 저장가능한 값의 범위 bit byte
boolean false, true 8 1
char “\u0000’~’\uffff”(0~2^15-1, 0~65535) 16 2
byte -128~127(-2^7~2^7-1) 8 1
short -32768~32767(-2^15~2^15-1,) 16 2
int -21억4천~21억 4천-1 (2^31 2^ 32 4
long -2^63~2^63-1 64 8
float 1.4E-45~3.4(E38) (1.410^(-45)~3.410^38), 소수점 5자리 32 4
double 4.9E-324~1.8E308(4.910^(-324)~1.810^308), 소수점 15자리 64 8

 

 

변수의 선언방법

int score;
score=100;
//변수타입 변수명;
//변수명 = 값;

 

변수의 명명규칙

1. 대소문자가 구분되며 길이에 제한이 없다

2. 자바에서 사용하는 예약어를 사용해서는 안된다

3. 숫자로 시작해서는 안 된다.

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

 

권장사항

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

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

3. 상수의 이름은 전체를 대문자로 한다. 단어는 '_' 로 구분한다.  

 

변수, 상수, 리터럴

변수 : 하나의 값을 저장하기 위한 공간

상수 : 한 번만 값을 저장할 수 있는 공간, 변수타입 앞에 final을 붙인다. 

리터럴 : 그 자체로 값을 의미하는 것 

 

리터럴 타입과 접미사

- 정수형의 경우

  • long타입의 리터럴에 접미사 'l' 또는 'L'을 붙이고 접미사가 없으면 int타입의 리터럴이다. 
  • byte와 short 타입의 리터럴은 별도로 존재하지 않으며 byte와 short 타입의 변수에 값을 저장할 때는 int타입의 리터럴을 사용한다. 

 

- 실수형의 경우

  • float 타입의 리터럴에는 접미사 'f' 또는 'F'를 붙이고
  • double 타입의 리터럴에는 접미사 'd' 또는 'D'를 붙인다. 

- 10진수 외에도 2,8,16진수로 표현된 리터럴을 변수에 저장할 수 있으며, 16진수라는 것을 표시하기 위해 접두사를 붙인다. 

  • 2진법 ⇒ 0bxxx 예) 0b1010 ⇒ 10
  • 8진법 ⇒ 0xxx 예) 012 =10
  • 16진법 ⇒ 0xXXX 예) 0xA =10

8진법은 3개씩 나누고 16진법은 4개씩 나눈다. 

10진법 10은 2진법으로 1010 

2진법 1010=8>진법 => 1 010

                              -- ---- 

                              1    2   =>012

       

Integer.toBinaryString(10) => 2진법 
Integer.toOctalString(10) => 8진법
Integer.toHexString(10) => 16진법 

변수의 초기화

변수의 초기화 : 변수에 처음으로 값을 저장하는 것

- 지역변수는 사용되기 전에 반드시 초기화해야 한다. 

 

1)선언과 동시에 초기화

  int a =10;

2)선언 후 나중에 초기화

  int a;

  a=값;

      => 입력값, 랜덤, 파일읽기 가능

 

- 변수가 여러개일 때 

  int a, b, c, d, e; 가능

  int a =10, b=20, c=30, d=40; e=50; 가능

  

타입의 불일치

byte < char < int < long < double

  • 리터럴의 타입은 저장될 변수의 타입과 일치하는 것이 보통이지만 타입이 달라도 저장 범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용된다. 하지만 리터럴 값이 변수 타입의 범위를 넘어서거나 리터럴의 타입이 변수의 타입보다 저장범위가 넓으면 컴파일 에러가 발생한다. 
  • byte과 short 타입의 리터럴은 따로 존재하지 않으므로 int타입의 리터럴을 사용한다. 단 short,byte 타입의 변수가 저장할 수 있는 범위에 속한 것이어야 한다. 

 

문자와 문자열

문자열 + any type = 문자열

any type + 문자열 = 문자열

문자열이 있으면 최종 결과는 문자열이다

 

예시)

"" + 7 + 7 = "7"+7="7"+"7" = "77"
7+7+""=14+""="14"

형식화된 출력 printf()

println은 출력형식을 지정할 수 없으므로 출력형식을 지정할 때는 printf를 쓴다. println과 달리 줄바꿈을 하지 않는다.

 

=System.out.print() : 가로 출력

=System.out.println() : 세로 출력

=System.out.printf(): 서식을 만들고 출력

   System.outprintf("출력형식", 출력할 데이터)

  정수: %d (decimal 10진의 정수형)

  실수: %f (floating-point 부동소수점)

  문자 : %c (character 문자)

  문자열 : %s (string 문자열)

  논리 : %b (boolean 불리언)

 

소수점 n자리로 출력하고 싶을 때

=System.out.printf("%.2f, 10.3333);

 

출력후 줄바꿈을 하고 싶을 때

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

 

공백을 주면서 출력하고 싶을때

=System.out.printf("finger" =[%5d]", finger);  //finger=[   10]  -> 칸을 5개만들고 오른쪽으로, 나머지는 빈칸 

()()()(1)(0)

=System.out.printf("finger" =[%-5d]", finger);  //finger=[10   ] -> 칸을 5개만들고 왼쪽으로, 나머지는 빈칸

(1)(0)()()()

=System.out.printf("finger" =[%05d]", finger);  //finger=[00010] -> 칸을 5개만들고 나머지는 0으로 채우기

(0)(0)(0)(1)(0)

 

특수문자

= \t  => tab (일정 간격)
= \n  => new line (다음줄에 출력)
= \\  => 경로 ( \\ => \ )
= \"  => "  출력 

 

음수의 2진표현

1의보수
2의보수(현재 사용하고 있는 음수표현)
음수표현시 연산자 사용 (~)

 

 

화면에서 입력받기 Scanner

Scanner란?

- 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스

Scanner를 사용하려면

1) import문 추가

   import java.util.*;

2) Scanner 객체의 생성: Scanner클래스를 메모리에 저장 

  Scanner scanner = new Scanner(System.in);

3) Scanner 객체를 사용: 키보드 입력값을 읽어서 변수에 저장

  int num = scanner=nextInt(); //화면에서 입력받은 정수를 num에 저장 

정수 : nextInt() => 정수값 읽기

문자열 : next() => 문자열 읽기

 

 

인코딩과 디코딩

'A' =====> 65
     인코딩 
 'A' <===== 65
      디코딩 

 

오버플로우

저장범위를 벗어나는 것

byte b =(byte)380

 

형변환

 자동 형변환  : upcasting (데이터형이 커진다)
 강제 형변환  : downcasting (데이터형을 낮게)
              <---------------강제형변환
          byte < char < int < long < double
              -------------->  자동형변환         
예) 
int -> char  => (char)65 => 'A'
char -> int  => (int)'A' => 65
double -> int => (int)10.5 => 10
int -> double => (double)10 => 10.0
            

 예) 자동 형변환 
int a='A' => a=65
double d=10 => d=10.0