본문 바로가기
Develope_Web&App/01_Java & JavaFX

[Java] chap 02. 변수

by 스타트업_디벨로퍼 2021. 1. 26.

1. 변수란?

변하는 수,

변수란, 단 하나의 값을 저장할 수 있는 메모리 공간

변수의 선언과 초기화 → 변수 타입 + 변수 이름 → ex) int age;

  1. 변수타입은 변수에 저장될 값이 어떤 타입인지를 지정하는 것.

  2. 변수이름은 말 그대로 변수에 붙인 이름.

변수를 선언하면, 메모리의 빈 공간에 '변수타입'에 알맞은 크기의 저장공간이 확보되고, 앞으로 이 저장공간은 '변수이름'을 통해 사용할 수 있게 된다.

변수의 초기화

변수를 선언한 이후부터는 변수를 사용할 수 있으나, 반드시 변수를 '초기화'해야 한다.

메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 저장된 알수 없는 값이 남아있을 수 있기 때문이다. → 이 경우 대입 연산자'='를 이용한다.

int a; int b; int x = 0; int y = 0;

 

위와 같이 변수의 종류가 같은 경우 여러 변수를 한줄에 선언하기도 함.

변수의 초기화란, 변수를 사용하기 전에 처음으로값을 저장하는 것

변수의 명명 규칙

  1. 대소문자가 구분되며 길이에 제한이 없다.
  2. 예약어를 사용해서는 안 된다
  3. 숫자로 시작해서는 안된다.
  4. 특수문자는 '_'와 '$'만을 허용한다.

자바에서 권장하는 규칙

  1. 클래스 이름의 첫 글자는 항상 대문자로 한다.
  • 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.

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

   3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다.

2. 변수의 타입

기본형 (primitive type)

  • 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 계산을 위한 실제 값을 저장한다.

참조형(reference type)

  • 객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입.

1byte : boolean, byte

2byte : short

4byte : int, float(f)

8byte : long(L), double(d)

 

float의 경우, 1.4X10^-45 ~ 3.4x10^38 까지 표현이 가능하며 정밀도가 7자리이며
double의 경우, 4.9X10^-324 ~ 1.8 X 10^308 까지 표현이 가능하며 정밀도가 15자리이다.

*정밀도 : 해당 자리까지 오차없이 저장할 수 있다는 것

상수와 리터럴

상수(constant)란 변수와 마찬가지로 값을 저장할 수 있는 공간이다. 변수와 달리 한 번 값을 저장하면 다른 값으로 변경할 수 없다. 상수를 선언하는 방법은 변수와 동일한데, 변수의 타입 앞에 키워드 'final'을 붙여주기만 하면 된다.

 

final int MAX_SPEED = 10; //상수 MAX_SPEED를 선언 & 초기화 (모두 대문자)

리터럴(literal)

상수를 값을 한 번 저장하면 변경할 수 없는 저장공간으로 정의하였음. 리터럴은 상수의 다른 이름으로 간주하면 된다.

 

변수(variable) 하나의 값을 저장하기 위한 공간

상수(constant) 값을 한번만 저장할 수 있는 공간

리터럴(literal) 그 자체로 값을 의미하는 것

 

 

int year = 2014; //변수, 리터럴 final int MAX_VALUE = 100; //상수

상수는 리터럴에 '의미있느 이름'을 붙여서 코드의 이해와 수정을 쉽게 하기 위해 이용한다.

리터럴의 접미사

Long의 경우 L을 붙이고, floast의 경우 f를 붙이고, double의 경우 d를 붙인다.

// 정수형의 중간자에 구분자를 넣어서 큰 숫자를 편하게 읽게 하기도 한다. O

타입의 불일치

타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용한다. 리터럴의 값이 변수의 타입의 범위를 넘어서거나, 리터럴의 타입이 변수의 타입보다 저장범위가 넓으면 컴파일 에러가 발생한다.

 

 

float f = 3.14; //3.14d에서 접미사가 생략된 것으로 double타입니다.

//이 값을 float 타입으로 표현할 수 있지만, double 타입의 리터럴이므로 float타입의 변수에 저장할 수 없음

문자 리터럴과 문자열 리터럴

String str = ""; //내용이 없는 빈 문자열 char ch = ''; //에러 -> 문자가 있어야 한다. char ch = ' '; // 공백 문자로 변수 ch를 초기화

2.3 형식화된 출력 printf()

printf()는 지시자를 통해 변수의 값을 여러가지 형식을 변환하여 출력함.

지시자(specifier)는 값을 어떻게 출력할 것인지를 지정해주는 역할을 한다.

 

 

 

%b 불리언 형식으로 출력

%d 10진 정수의 형식으로 출력

%o 8진 정수의 형식으로 출력

%x, %X 16진 정수의 형식으로 출력

%f 부동 소수점의 형식으로 출력

%e, %E 지수 표현식의 형식으로 출력

%c 문자로 출력

%s 문자열로 출력

 

package chap02;

public class PrintEx1 {
	public static void main(String[] args) {
		byte b =1;
		short s = 2;
		char c = 'A';
		
		int finger = 10;
		long big = 100_000_000_000L;
		long hex = 0xFFFF_FFFF_FFFF_FFFFL;
		
		double d = 1.23456789;
		
		int octNum = 010;
		int hexNum = 0x10;
		int binNum = 0b10;
		
		System.out.printf("b=%d%n",b);
		System.out.printf("s=%d%n",s);
		System.out.printf("c=%c, %d %n",c,(int)c);
		System.out.printf("finger=[%5d]%n",finger);
		System.out.printf("finger=[%-5d]%n",finger);
		System.out.printf("finger=[%05d]%n",finger);
		System.out.printf("big=%d%n",big);
		System.out.printf("hex=%#x%n",hex);
		
		System.out.printf("d=%14.10f%n", d);
		
		System.out.printf("octNum=%o,%d%n",octNum, octNum);
		System.out.printf("hexNum=%x, %d%n",hexNum, hexNum);
		System.out.printf("binNum=%s, %d%n",Integer.toBinaryString(binNum),binNum);
	}

}
b=1
s=2
c=A, 65 
finger=[   10]
finger=[10   ]
finger=[00010]
big=100000000000
hex=0xffffffffffffffff
d=  1.2345678900
octNum=10,8
hexNum=10, 16
binNum=10, 2

 

 

'%x'와 '%o'에 여기서 '#'을 사용하면 접두사 '0x'와 '0'이 각각 붙는다. 그리고 '%X'는 16진수에 사용되는 접두사와 영문자를 대문자로 출력한다.

%14.10f%n을 설정하면 전체자리 / 소수점 아래자리로 계산되어 출력된다.

2.4 화면에서 입력받기 Scanner

 

package chap02;

import java.util.*; //Scanner 클래스를 사용하기 위해 추가
public class ScannerEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in); //Scanner 클래스의 객체를 생성
		
		System.out.print("두자리 정수를 하나 입력해주세요. >");
		String input = scanner.nextLine(); //입력받은 내용을 input에 저장
		int num = Integer.parseInt(input); // 입력받은 내용을 input 타입의 값으로 변환
		//int num = scanner.nextIn(); //정수를 입력받아서 변수 num에 저장		


		System.out.println("입력내용 :"+input);
		System.out.printf("num=%d%n", num);
	}

}

 

두자리 정수를 하나 입력해주세요. >22 입력내용 :22 num=22

4. 기본형(primitive type)

4.1 논리형

boolean의 경우에서는 true, false만 가능하다 대문자가 들어가면 안된다.

대분분 YES /NO, ON/OFF

4.2 문자형 - CHAR

문자형 역시 하나가지 자료형 밖에 없다. 문자가 저장되는 것이 아니라 문자의 유니코드가 저장되는 것이다. char ch = 'A'; 는 사실 65가 저장되는 것이다.

특수 문자 다루기

tab : \t backspace : \b form feed : \f new line : \n carriage return : \r 역슬래쉬 : \\ 작은 따옴표 : \' 큰따옴표 : \" 유니코드(16진수) 문자 : \u0041

5. 형변환 (캐스팅, casting)

형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것

형변환하는 방법은 (타입) 피연산자로 만든다.

정수형간의 변환의 경우 예를 들어 int에서 byte로 변환하는 경우 끝의 8비트만 적히게 된다.

실수형 간의 형변환의 경우, double을 floatd으로 형변환하는 경우 뒤의 29자리가 없어진다.

자동 형변환

기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다.

  1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이가능하다.
  2. 기본형과 참조형은 서로 형변환할 수 없다.
  3. 서로 다른 타입의 변수 간의 연산은 형변환을 하는 것이 윈칙이지만, 값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.
반응형

'Develope_Web&App > 01_Java & JavaFX' 카테고리의 다른 글

[Java] Chap04 조건문과 반복문  (0) 2021.01.27
[Java] 03 연산자(Operator)  (0) 2021.01.26
객체지향 디자인패턴2  (0) 2020.12.26
객체지향 디자인 패턴  (0) 2020.12.26
객체지향 프로그래밍  (0) 2020.12.26