1. 상수란 무엇이며 변수와의 차이는?
- 상수는 초기값이 그대로 변하지 않는 할당량이다. java 에서 상수는 데이터형 앞에 final 을 붙여서 선언한다.
- 변수는 이후 입력에 따라서 초기값이 계속 변할 수 있다.
1-2. 상수 표기법은?
- java 에서 상수는 데이터형 키워드 앞에 final 을 붙인다.
2. 초기화란 무엇인가?
- 변수나 상수를 선언하고 초기값을 설정하는 것을 초기화라고 한다.
3. 리터럴(literals)이란 무엇인가요?
- 선언이 되지 않은 상태에서 메모리에 올라가는 할당량.
- java 에서 정수 리터럴은 int 가 기본적용된다.
- java 에서 실수 리터럴은 double 이 기본적용된다.
4. 아래의 내용이 에러가 나는 이유와 수정 방법은?
System.out.println(3147483647 + 3147483648); //에러남
- println() 의 안쪽에 있는 선언되지 않은 정수의 리터럴은 int 가 기본인데 3147483647 은 int 의 범위를 초과했기 때문에 컴파일 되지 않는다.
- 리터럴의 정수 기본값인 int 로 맞추면 에러가 나지 않는다. 즉 값을 줄여서 int 의 범위에 넣으면 된다.
- 또는 3147483647 의 끝에 L을 덧붙여줄 수 있다. 3147483647L 이면 long 이기 때문에 long 의 숫자범위 안쪽에 있는 3147483647 을 담을 수 있다. 리터럴을 기본값인 int 가 아닌 long 으로 바꿔줬기 때문에 에러 없이 값을 출력시킬 수 있다.
5. 자동 형변환과 명시적 형변환에 대하여 설명하시오.
- java 에서 자동 형변환은 각기 다른 데이터형을 연결시켜주기만 해도 자연스럽게 발생한다. byte 와 short 를 붙여주면 short 로 형변환되고 short 와 int 를 붙여주면 int 로 형변환되고 int 와 long 을 붙여주면 long 으로 자동 형변환된다. char 과 int 를 붙이면 char 의 유니코드 값에 기반한 int 로 형변환되고 long 과 float 을 붙이면 float 으로 형변환되며 float 과 double 을 붙이면 double 로 형변환된다.
- 보통 bits 가 더 큰 값으로 자동형변환되지만 64bits 인 long 은 32 bits 인 float 으로 자동형변환이 이루어진다. 실수의 표현범위가 정수보다 넓어서 그렇다고 한다.
- 명시적 형변환은 개발자가 특정 코드를 추가해서 강제적으로 형변환을 시키는 것을 말한다. 자동 형변환이 안 되는 경우에도 명시적 형변환은 성립할 수 있다.
6. 자동 형변환 규칙에 대하여 설명하시오.
- 5번에서 이미 설명했으니 이번에는 그림을 통해 표현한다.
- 화살표가 진행되는 방향으로 자동 형변환이 이루어진다.
7.아래의 에러가 나는 이유를 설명하고 수정 하시오.
int a = 3;
int b = 4;
double c = a / b;
System.out.println(result);
8. 아래의 값이 나오는 이유를 설명하시오.
char a = 1 + 'A';
//
System.out.println('A' + 'A'); //1번: 130
//
System.out.println(a); //2번: 'B'
System.out.println((int)a); //3번: 66
//
System.out.println("A" + 'A'); //4번: "AA"
System.out.println("A" + 0.09); //5번: "A0.09"
- 1번은 유니코드인 문자 'A'를 literals 기본값인 int 로 연산해서 65 + 65 = 130 이라는 값이 나왔다.
- 2번은 (1 + 'A') 는 1번과 마찬가지로 int 연산해서 66이 나왔으나 a 의 데이터형이 char 이기 때문에 다시 char 로 돌아갔다. 유니코드의 66번 값인 'B' 가 출력된다.
- 3번은 유니코드의 66번 값인 'B'를 다시 int 로 명시적 형변환을 했기때문에 해당하는 int 값인 66이 출력된다.
- 4번은 char 'A' 가 문자열인 "A" 과 만나서 문자열로 자동형변환되었다. 따라서 (문자열 + 문자열)로 "AA"가 출력된다.
- 5번도 마찬가지로 실수의 literals 기본값인 double 0.09 가 문자열 "A"를 만나서 문자열로 자동형변환됐다. 따라서 (문자열 + 문자열)로 "A0.09"가 출력된다.
9. 이스케이프 시퀀스의 종류를 나열하고 기능을 설명하시오.
\b : 출력값의 가장 뒷자리부터 대체한다.
\t : tab 을 넣어서 간격을 벌린다.
\\ : \를 출력한다.
\' : '를 출력한다.
\" : "를 출력한다.
\n : 개행한다.
\r : 출력값의 가장 앞자리부터 대체한다.
10. 아래의 출력 결과를 확인하고, 130이 나오는 이유를 설명하시오.
System.out.println('A'); //1번: char형으로 인식, 메모리에 올라갈 때 65값이 들어감
//
System.out.println('A' + 'A'); //2번: char형으로 65메모리에 올리고,
//int형으로 자동형변환
- 1번은 char 'A'가 다른 값을 만나지 않았기 때문에 char 그대로 출력된다.
- 2번은 char 2개가 만나서 연산하기 위해서 int 로 자동형변환 됐고 그 결과값인 int 130 이 출력된다.
11.결합 방향과 우선순위에 대하여 설명하시오.
- java 의 연산기호들에는 우선순위가 있고 순위가 높은 것들부터 컴퓨터가 처리한다.
- 우선순위가 같은 경우에는 결합 방향에 따라서 처리순서가 결정된다.
12.복합 대입 연산자에 대하여 설명하시오.
- 흔한 예로 +=, -=, *=, /=, %= 가 있다.
- 대상 변수 자신에 대한 연산을 간략하게 표현한다.
- 연산 우선순위가 낮다.
- 명시적 형변환이 자동으로 발생하기 때문에 따로 형변환을 적을 필요가 없다.