JAVA 변수
1. 변수란?
- 변수 : 단 하나의 값을 저장할 수 있는 메모리 공간"
- 변수 선언시, 메모리의 빈 공간에 "변수 타입"에 알맞은 크기의 저장공간이 확보되고, 앞으로 이 저장공간을 "변수 이름"을 통해 사용
- 변수타입 : 변수에 저장될 값이 어떤 타입(type)인지를 지정하는 것이며, 저장하고자 하는 값의 종류에 맞게 타입을 선택하며 자바에는 정수형, 실수형, 문자형 등 다양한 타입이 존재
- 변수 이름 : 변수에 붙인 이름이며 저장공간(변수)에 값을 저장하고 저장된 값을 읽어오기 위해 붙여줌
2. 변수의 초기화
- 변수의 초기화란 변수를 사용하기 전에 처음으로 값을 저장하는 것
- 변수를 사용하기 위해서 반드시 '변수의 초기화'가 되어야 하며, 메모리는 여러 프로그램이 공유하는 자원이므로 다른 프로그램에 의해 저장된 알 수 없는 값(쓰레기값, garbage value)가 남아있을 수 있기 때문
- 변수에 값을 저장 하기 위해서는 대입 연산자 '='을 사용하여 왼쪽(변수)에 저장하라는 뜻
// 변수 선언 및 출력하는 코드
public class example1 {
public static void main(String[] args){
int year = 0;
int age = 14;
System.out.println(year);
System.out.println(age);
}
}
3. 변수의 명명규칙
- 대소문자가 구분되며 길이에 제한이 없다.(ex. True와 true는 서로 다른 것으로 간주)
- java의 예약어를 사용해서는 안 된다.(ex. true는 예약어라서 사용할 수 없지만 True는 가능)
- 숫자를 사용해서는 안 된다. (ex. top10은 허용하지만, 7up은 허용되지 않는다.)
- 특수문자는 '_'와 '$'만을 허용한다. (ex. '$harp'은 허용되지만, S#arp은 허용되지 않는다.)
4. 자바 프로그래머의 권장 규칙
- 클래스 이름이 첫 글자는 항상 대문자로 한다.
- 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.
- 여러단어로 이루어진 이름은 단어의 첫글자를 대문자로 한다. (ex. lastIndexOf, StringBuffer)
- 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다. (ex. MAX_NUMBER)
- 변수의 이름은 짧을수록 좋지만, 약간 길더라도 용도를 알기 쉽게 '의미있는 이름'을 하는 것이 바람직하다.
5. 변수의 타입
1) 기본형(primitive type)
- 논리형(boolean) : true와 false 중 하나의 값을 갖으며, 조건식과 논리적 계산에 사용된다.
- 문자형(char) : 문자를 저장하는데 사용되며, 변수에 하나의 문자만 저장할 수 있다.
- 정수형(byte, short, int, long) : 정수를 저장하는데 사용되며, 주로 int가 사용된다. byte는 이진 데이터를 다룰 때 사용, short는 C언 어와의 호환을 위해서 사용
- 실수형(float, double) : 실수를 저장하는데 사용되며, 주로 double이 사용된다.
2) 상수와 리터럴(constant & literal)
- 상수(constant)
- 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없으며 변수의 타입 앞에 'final'을 붙여주기만 하면 된다.
- 상수의 이름은 모두 대문자로 하는 것이 암묵적인 관례이며, 여러 단어로 이루어져있는 경우 '_'로 구분한다.
- 상수는 반두시 선언과 동시에 초기화해야 하며, 그 후 부터는 상수의 값을 변경하는 것이 허용되지 않는다.
- ex) final int MAX_SPEED = 10; // 상수 MAX_SPEED를 선언 & 초기화
- 상수는 리터럴에 '의미있는 이름'을 붙여서 코드의 이해와 수정을 쉽게 만든다.
- 리터럴(literal)
- 리터럴은 그 자체로 값을 의미하는 것이며, 우리가 기존에 알고 있던 '상수'의 다른 이름일 뿐이다.
- 변수에 타입이 있는 것처럼 리터럴에도 타입이 있으며, 변수의 타입은 저장될 '값의 타입(리터럴의 타입)'에 의해 결정된다.
// 리터럴과 접미사 코드 예시
public class example1 {
public static void main(String[] args){
int octNum = 010; // 8진수 10, 10진수 8
int hexNum = 0x10; // 16진수 10, 10진수 16
int binNum = 0b10; // 2진수 10, 10진수로 2
long big = 100_000_000_000L; // long big = 100000000000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL; // long hex = 0xFFFFFFFFFFFFFFFFL;
float pi = 3.14f; // 접미사 f 대신 F 사용가능
double rate = 1.618d; // 접미사 d 대신 D 사용가능
float pi_2 = 3.14; // 에러 -> float타입변수에 double 타입 리터럴 저장불가
double rate_2 = 1.618; // OK. 접미사 d는 생략가능
}
}
- 리터럴의 타입은 저장될 변수의 타입과 일치하는 것이 보통이지만, 타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용됨
- 리터럴의 값이 변수의 타입의 범위를 넘어서거나, 리터럴의 타입이 변수의 타입보다 저장범위가 넓으면 컴파일 에러가 발생
int i = 'A'; // 가능 -> 문자'A'의 유니코드인 65가 변수 i에 저장
long l = 123; // 가능 -> int보다 long타입의 더 범위가 넓음
double d = 3.14f; // 가능 -> float보다 double 타입의 범위가 더 넓음
int i = 0x123456789; // 에러 -> int 타입의 범위를 넘는 값을 저장
float f = 3.14; // 에러 -> float타입보다 double 타입의 범위가 더 넓음
- byte와 short타입의 리터럴은 따로 존재하지 않으므로 int 타입의 리터럴을 사용하며, 단 short타입의 변수가 저장할 수 있는 범위에 속한 것이어야 함
byte b = 65; // 가능 -> byte타입에 저장 가능한 범위의 int타입 리터럴
short s = 0x1234; // 가능 -> short 타입에 저장 가능한 범위의 int타입 리터럴
- 문자 리터럴과 문자열 리터럴
char ch = 'J'; // 문자 리터럴은 작은 따옴표로 문자 하나를 감싸야함
String name = "Java"; // 문자열 리터럴에서 두 문자 이상은 큰 따옴표로 감싸야함
String str = ""; // 가능 -> 문자열 리터럴에는 빈 문자열이 허용
char ch = ''; // 에러 -> ''안에 반드시 하나의 문자가 필요
char ch = ' '; // 기능 -> 공백문자로 변수 ch 초기화 가능
3) 문자열(String)
- 원래 String은 클래스이므로 아래와 같이 객체를 생성하는 연산자 new를 사용해야 하지만, 위와 같은 표현도 가능하다.
- 문자열 + any type -> 문자열 + 문자열 -> 문자열
- any type + 문자열 -> 문자열 + 문자열 -> 문자열
String name = new String("Ellen"); //String 객체 생성
//덧셈 연산자를 이용하여 문자열을 결합할 수 있음
String name = "Ja" + "va"; //name은 "Java"
String str = name + 8.0; // str은 "Java8.0"
출처
'Java의 정석' - 남궁성
이 책을 공부하면서 기록하기 위하여 작성하였습니다.
'프로그래밍공부 > JAVA' 카테고리의 다른 글
JVM의 구조와 자바의 실행 (0) | 2022.07.17 |
---|---|
JAVA 언어에 대하여 (0) | 2021.09.03 |