냠냠뇸
[Java의 정석] 변수(Variable)-변수와 상수/변수의 타입 본문
1.변수
1-1. 변수의 선언과 초기화
변수란 "단 하나의 값을 저장할 수 있는 메모리 공간"을 뜻하며
선언 및 초기화 방법은 다음과 같다.
int age;
변수타입(int)뒤에 변수이름(age)을 지정해준다.
변수를 선언한 이후부터는 쓰레기값(garbage value)이 남아있는것을 막기위해
대입연산자 '='를 사용하여 초기화를 시켜줘야한다.
int age=28;
해당 코드는 age 변수에 28로 초기화 해준 모습이다.
변수는 이처럼 한줄에 하나씩 선언하는것이 보통이지만
int a, b;
int x = 0, y = 0;
이렇게 타입이 같은경우 콤마',' 구분자로 여러변수를 한 줄에 선언하기도 한다.
예제
class VarEx1{
public statics void main(String[] args){
int year=0;
int age=14;
System.out.println(year);
System.out.println(age);
year = age + 2000;
age = age + 1;
System.out.println(year);
System.out.prtinln(age);
}
}
해당 예제는 정수형 변수 year 과 age를 선언하여 각각 값을 초기화한뒤의 값과
연산을 거쳐 변수에 새롭게 대입된 값을 출력한다.
1-2.변수의 명명규칙
'변수의 이름'처럼 프로그래밍에서 사용하는 모든 이름을 '식별자(indenrifier)'라고 하며
식별자는 같은 영역 내에서 서로 구분(식별)될 수 있어야 하며 다음 규칙을 지켜야 한다.
1. 대소문자가 구분되며 길이에 제한이 없다.
- True 와 true는 서로 다른것으로 간주된다.
2. 예약어*를 사용해서는 안 된다.
- true는 예약어라서 사용 할 수 없지만, True는 사용 가능하다.
3. 숫자로 시작해서는 안 된다.
-top10은 허용되지만, 7up은 허용되지 않는다.
4. 특수문자는 '_'와 '$'만을 허용한다.
-$harp는 허용되지만, S#arp는 허용되지 않는다.
cf. 예약어(keyword, reserced word): 프로그래밍 언어의 구문에 사용되는 단어.
예약어는 클래스나 변수, 메서드의 이름(identifier)으로 사용할 수 없다.
2. 변수의 타입
변수의 자료형은 저장하려는 값의 특성을 고려하여 알맞은 타입으로 선택하면 된다.
자료형은 크게 '기본형'과 '참조형'으로 나뉜다.
기본형(primitive type)
- 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)
계산을 위한 실제값을 저장하며 총 8가지가 있다.
참조형(reference type)
- 객체의 주소를 저장하며, 위의 8가지 기본형을 제외한 나머지 타입.
참조형 변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로클래스의 이름이 곧 참조변수의 타입이 된다.
그래서 새로운 클래스를 작성한다는것은 새로운 참조형을 추가하는 셈이다.
참조변수를 선언하는 방법은 다음과 같다.
클래스이름 변수이름;
Data today = new Date(); // Date객체를 생성해서, 그 주소를 today에 저장
2-1.기본형(primitive type)
1byte | 2byte | 4byte | 8byte | |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
각 자료형이 가질 수 있는 값의 범위는
정수형의 경우 '2^(n-1) ~ 2^(n-1)-1' (n은 bit수)이라는 정도만 알고 있으면 된다.
예를 들어 int형의 경우 32bit(4byte)이므로
-2^31 ~ (2^31)-1 의 범위를 갖는다
2-2. 상수와 리터럴(constant & literal)
상수(constant)는 변수와 마찬가지로 값을 저장할 수 있는 공간이지만,
변수와는 달리 한번 값을 저장하면 다른값으로 변경할 수 없다.
상수를 선언하는 방법은 변수와 동일하며,
단지 변수의 타입앞에 키워드 'final'을 붙여주기만 하면 된다
final int MAX_SPEED = 10 ; // 상수의 선언 & 초기화
또한 상수는 반드시 선언과 동시에 초기화 되어야 하며,
그 후 부터는 상수의 값을 변경하는 것이 허용되지 않는다.
final int MAX_SPEED; // 에러. 선언과 동시에 초기화 되어야함.
final int MAX_VALUE = 100; // OK.
MAX_VALUE = 200; // 에러. 상수의 값은 변경할 수 없음.
상수의 이름은 모두 대문자로 하는것이 암묵적 관례이며,
여러 단어로 이루어져 있는 경우 '_'로 구분한다.
리터럴(literal)
원래 1,123,3.14,'A'같은 값들이 '상수'인데 프로그래밍에서는
상수를 '값을 한번 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문에
이와 구분하기 위해 상수를 다른이름으로 불러야 했고, 리터럴 이라는 용어를 사용하게 되었다.
즉, 리터럴은 단지 우리가 기존에 알고 있는 '상수'의 다른 이름이다.
리터럴의 타입은 접미사를 붙여 구분한다.
int octnum = 010; // int타입 리터럴: 정수형 중 접미사가 없음
long big = 100_000_000_000L; // long타입 리터럴: 정수형 중 접미사가 l 또는 L
// 구분자 '_' 사용가능 (큰 수 편하게 읽기)
float pi = 3.14f; // float타입 리터럴: 실수형 중 접미사가 f 또는 F
double rate = 1.618d; // double타입 리터럴: 실수형 중 접미사가 d 또는 D (생략도 가능)
float pi = 3.14; //에러. float타입에 double타입 리터럴 저장 불가
// (실수형에 접미사가 붙지 않으면 double타입 리터럴로 간주)
double rate = 1.618; //OK. 접미사 d는 생략가능
2-3. 형식화된 출력 - printf()
println()은 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다.이때, printf()를 사용하면 되는데 printf()는 지시자(specifier)를 통해 변수의 값을여러가지 형식으로 변환하여 출력하는 기능을 가지고 있다.
System.out.printf("age:%d", age);
System.out.printf("age:%d", 14);
System.out.printf("age:14"); //지시자 %d 를 사용하여 14를 출력한다.
출력하려는 값이 여러개라면 지시자도 여러개를 사용해야 하며,
출력될 값과 지시자의 순서는 일치해야 한다.
println()과 달리 printf()는 출력 후 줄바꿈을 하지 않기에,
지시자 %n 을 따로 넣어줘야 한다.
System.out.printf("age:%d%n",age); //출력 후 줄바꿈을 한다.
printf()의 지시자 중 자주 쓰이는것들은 다음과 같다.
%b | 불리언(boolean) 형식으로 출력 |
%d | 10진(decimal) 정수의 형식으로 출력 |
%o | 8진(octal) 정수의 형식으로 출력 |
%x, %X | 16진(hexa-decimal) 정수의 형식으로 출력 |
%f | 부동 소수점의 형식으로 출력 |
%e, %E | 지수(exponent) 표현식의 형식으로 출력 |
%c | 문자(character)로 출력 |
%s | 문자열(string)로 출력 |
2-4. 화면에서 입력받기 - Scanner
화면으로 부터 입력받는 Scanner클래스를 사용하기 위해
아래의 한 문장을 추가해줘야 한다.
import java.util.*; //Scanner 클래스를 사용하기 위해 추가
그 다음엔 Scanner 클래스의 객체를 생성한다.
Scanner scanner = new Scanner(System.in); // Scanner 클래스의 객체를 생성
그리고 nextLine()이라는 매서드를 호출하면,
입력대기 상태에 있다가 입력을 마치고 엔터키를 누르면 입력한 내용이 문자열로 반환된다.
String input = scanner.nextLine(); // 입력받은 내용을 input에 저장
int num = Integer.parseInt(input); // 입력받은 내용을 int타입의 값으로 변환
만일 입력받은 문자열을 숫자로 변환하려면,
Integer.parseInt()라는 매서드를 이용한다.
예제
import java.util.*; //scanner를 사용하기 위해 추가
class ScannerEX {
public static void main(String[] args) {
Scanner scanner = new Scanner (System.in);
System.out.print("두자리 정수를 하나 입력해주세요.>");
String input = scanner.nextLine();
int num = Integer.parseInt(input); //입력받은 문자열을 숫자로 변환
System.out.println("입력내용 :"+input);
System.out.printf("num=%d%n",num);
}
}
'JAVA > 자바의 정석' 카테고리의 다른 글
[Java의 정석] 배열(array) (0) | 2022.01.26 |
---|---|
[Java의 정석] 조건문과 반복문 (0) | 2022.01.24 |
[Java의 정석] 연산자(operator) (0) | 2022.01.23 |
[Java의 정석] 변수(Variable)-기본형(primitive type), 형변환(casting) (0) | 2022.01.23 |