KDT 풀스택 공식 2일차: JAVA 상수, 리터럴, 형변환, 확장열, 우선순위 기초

jk·2024년 1월 2일
0

kdt 풀스택

목록 보기
3/127

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);
  • 원인: result 를 선언하지도 않았고 초기화하지도 않았기 때문에 오류가 발생한다.
  • 해결1: result 를 선언하고 값을 초기화한다.
    int a = 3;
    int b = 4; 
    double c = a / b;
    //
    boolean result = true;
    //
    System.out.println(result);
    
  • 해결2: result 를 지운다. println() 에는 c 를 넣을 수 있다.
    int a = 3;
    int b = 4; 
    double c = a / b;
    //System.out.println(result);
    System.out.println(c);
    



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.복합 대입 연산자에 대하여 설명하시오.

  • 흔한 예로 +=, -=, *=, /=, %= 가 있다.
  • 대상 변수 자신에 대한 연산을 간략하게 표현한다.
  • 연산 우선순위가 낮다.
  • 명시적 형변환이 자동으로 발생하기 때문에 따로 형변환을 적을 필요가 없다.
profile
Brave but clumsy

0개의 댓글