
변수
데이터(자료)를 임시로 담을 수 있는 상자(메모리 공간)
변수선언
변수를 사용하려면 먼저 변수를 선언해야 한다
- 변수 타입: 변수에 저장될 값이 어떤 '타입(type)'인지 지정
- 변수 이름: 변수에 붙인 이름 (메모리 공간에 이름을 붙여 주는것)
- 변수의 초기화: 변수를 선언한 이후로 변수를사용할수 있지만 그 전에 반드시 초기화를 해야한다(다른 프로그램에 의해 알 수없는 쓰레기값이 남아있을 수 있기 때문)
변수 명명 규칙
1. 대소문자가 구분되며 길이에 제한이 없다.
2. 예약어를 사용해서는 안된다.
3. 숫자로 시작해서는 안된다.
4. 특수 문자는 '_'와 '$'만 허룔한다.
변수의 타입
기본형과 참조형
기본형 변수: 실제 값을 저장
1 byte | 2 byte | 4 byte | 8 byte | |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
* 문자형인 char는 문자를 내부적으로 정수(유니코드) 저장한다, 떄문에 정수형/실수형과 연산 가능함
만약 어떤 문자의 유니코드를 알고 싶으면, char형 변 수에 저장된 값을 정수형(int)으로 반환 하면 된다.
ex) int code = (int)ch;
* 정수형(byte, short, int, long)의 경우 -2^(n1-) ~ 2^(n-2)-1 (n=bit수)의 범위를 갖는다
* int는 CPU가 가장 효율적으로 처리할 수 있는 타입이다
* 메모리를 절약하려면 int 보단 byte나 short 사용
참조형 변수: 어떤 값이 저장되어 있는 주소를 값으로 가짐
- 객체의 주소를 저장한다
- Java는 참조형 변수 간의 연산을 할 수 없음으로 실제 연산에 사용되는 것은 모두 기본형 변수
- 참조형 변수를 선언할 때 변수의 타입으로 클래스의 이름을 사용함으로 클래스의 이름이 참조변수의 타입이됨
( 변수의 타입이 기본형이 아닌 것들은 모두 참조 변수)
- 객체를 생성하는 new 연산자의 결과는 생성된 객체의 주소이다
Date today = new Date(); //Date 객체를 생성해서, 그 주소를 today에 저장
상수와 리터럴
상수(constant)는 변수와 마찬가지로 '값'을 저장할 수 있는 공간'이지만 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다.
상수 선언 방법은 변수의 타입 앞에 키워드 'final'만 붙여주면 된다. 또한, 반드시 선언과 동시에 초기화 해야한다.
ex) final int MAX_SPEED = 10;
원래 값(123, 'A', '3.14)들은 '상수'라고 하는데, 상수를 위와같이 정의했기 때문에, 다른 이름인 '리터럴(literal)'이라는 용어를 사용한다.
리터럴의 타입과 접미사
종류 | 접미사 |
논리형 | 없음 |
정수형 | L |
실수형 | f, d |
문자형 | 없음 |
문자열 | 없음 |
정수형과 실수형에는 여러 타입이 존재하므로, 리터럴에 접미사를 붙여서 타입을 구분한다.
long big =100_000_000_000L; // 1000000000000L;
float pi = 3.14f;
double rate = 1.618d;
float 3.14; // error, float타입 변수에 double타입 리터럴 저장 불가
double 1.68; // ok, 접미사 d 생략 가능
* 3.14에 접미사가 붙지 않았으므로 double타입으로 간주된다. 그래서 3.14가 float타입의 범위에 속한 값임에도 불구하고 컴파일 시에 애러가 발생한다.
* 리터럴의 값이 변수 타입의 범위를 넘어서거나, 리터럴의 타입이 변수 타입보다 저장범위가 넓으면 컴파일 애러가 발생한다.
출력문(printf())
* 줄바꿈을 사용하려면 println()함수 사용, printf()에서의 줄바꿈 사용은 출력할 문장의 마지막에 %n을 붙여주면 된다.
ex) System.out.printf("age: %d%n", age);
지시자 | 설명 |
%b | boolean 형식으로 출력 |
%d | 10진(decimal)정수의 형식으로 출력 |
%o | 8진(octal) 정수의 형식으로 출력 |
%x, %X | 16진(hexa) 정수의 형식으로 출력 |
%f | 부동 소수점(floating point) 형식으로 출력 |
%e, %E | 지수(exponent) 표현식의 형식으로 출력 |
%c | 문자(character)로 출력 |
%s | 문자열(string)로 출력 |
* 지시자 %x와 %o앞에 "#"를 붙이면 접두사 '0x'와 '0'이 각각 붙는다. 그리고 '%X'는 16진수에 사용되는 접두사와 영문자를 대문자로 출력한다.
System.out.printf("hex = %x%n", hex); // hex = ffffffff
System.out.printf("hex = %#x%n", hex); // hex = 0xffffffff
System.out.printf("hex = %#X%n", hex); // hex = 0Xffffffff
10진수를 2진수로 출력해주는 지시자는 없기 때문에, 정수를 2진 문자열로 변환해주는 Integer.toBinaryString(int i)를 사용해야 한다.
Sytem.out.print("binNum = %s%n", Integer.toBinaryString(binNum);
'%f'는 전체 자리수와 소수점 아래의 자리수를 지정할 수 있다.
System.out.printf("d = %14.10f%n", d); // 전체 14자리 중 소수점 아래 10자리
'%s'에도 숫자를 추가하면 원하는 만큼의 출력공간을 확보하거나 문자열의 일부만 출력할 수 있다.
System.out.printf("%20s%n", url); //최소 20글자 출력공간 확보 (우측 정렬)
System.out.printf("%-20s%n", url); //최소 20글자 출력공간 확보 (좌측 정렬)
System.out.printf("%.8s%n", url); //왼쪽에서 8글자만 출력
'Language > Java' 카테고리의 다른 글
4.1 객체 지향 프로그래밍 (클래스와 객체) (0) | 2021.07.06 |
---|---|
문자열 함수 종류 (0) | 2021.07.05 |
3. 연산자 (1) | 2021.07.01 |
[JAVA] 1. 자바 프로그램 작성 (0) | 2021.06.29 |
[JAVA] 0. 자바 기초 ( OOP, JDK, JRE, JVM) (0) | 2021.06.29 |