4강. 변수와 자료형(3)

  • Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
  • Section 0. 자바 기본 익히기
  • 4강 "변수와 자료형(3)"
  • 상수 -> 리터럴 -> 형 변환

상수 : 변하지 않는 값

  • final 키워드를 사용하여 상수를 선언하며, final로 선언된 상수는 다른 값을 대입할 수 없다.
    프로그램 내에서 변경되지 말아야 하는 값을 상수로 선언해두고, 혹시 변경되는 경우에는 선언된 값만 수정한다.
  • 상수는 관용적으로 대문자로 표현한다.
public class Constant {
	public static void main(String[] args) {
		final float PI = 3.14F;
		PI = 3.15F;		//error! final로 선언된 값은 변경 불가
	}
}

Eclipse에서 실행하면 에러가 나는 것을 확인할 수 있다.

리터럴(literal)

  • 리터럴 : 프로그램에서 사용하는 모든 숫자, 값, 논리 값
    (변수 또는 상수에 리터럴이 대입되는 방식)
  • 리터럴에 해당되는 값은 특정 메모리 공간인 상수 풀(constant pool)에 저장되어 있고,
    필요한 경우 상수 풀에서 가져와서 사용한다.
  • 상수 풀에 저장할 때 정수는 int로, 실수는 double로 저장하기 때문에 long이나 float 값으로 저장해야 하는 경우에는 식별자 (L, F)를 명시해야 한다.

형 변환(type conversion)

  • 자료형은 각각 사용하는 메모리의 크기와 방식이 다르기 때문에 서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어난다.
  • 묵시적 형변환 : 작은 수에서 큰 수로, 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우 자동으로
    형 변환이 발생한다.
  • 명시적 형 변환 : 묵시적 형 변환의 반대의 경우로, 변환되는 자료형을 명시해야한다.
    (자료의 손실이 발생할 수 있다.)

묵시적 형 변환 예시

public class ImplicitConversion {
	public static void main(String[] args) {
		byte bNum = 10;
		int num = bNum;		//byte보다 int가 더 크기 때문에 묵시적 형 변환
		System.out.println(num);
		
		long lNum = 10;		//10은 int값인데 long이 더 크기 때문에 L을 붙이지 않아도 묵시적 형 변환
		float fNum = lNum;	//long보다 float이 더 정밀한 수이기 때문에 묵시적 형 변환
		System.out.println(fNum);
		
		double dNum = fNum + num;
		// fNum(float)과 num(int)를 더할 때 int가 float으로 묵시적 형 변환
		// 더한 결과(float)이 더 정밀한 double로 묵시적 형 변환
		System.out.println(dNum);
	}
}


형 변환을 명시적으로 작성하지 않아도 자동으로 형 변환이 발생하여 정상 출력되는 것을 확인할 수 있다.

명시적 형 변환 예시

public class ExplicitConversion {
	public static void main(String[] args) {
		int iNum = 1000;
		byte bNum = (byte)iNum;
		// 1000은 2진수로 0011 1110 1000
		// byte는 1바이트(8비트)이므로 뒤쪽의 1110 1000 값만 대입됨
		System.out.println(iNum);
		System.out.println(bNum);	// 1110 1000 은 10진수로 -24
		
		double dNum = 3.14;
		iNum = (int)dNum;
		System.out.println(iNum);
		
		float fNum = 0.9F;
		int num1 = (int)dNum + (int)fNum;	//각각을 형변환 후 덧셈 3+0=3
		int num2 = (int)(dNum + fNum);		//덧셈 후 형변환 3.14+0.9=4.04 -> 4
		System.out.println(num1);
		System.out.println(num2);
	}
}


명시적 형 변환을 할 경우 데이터가 원하지 않는 값으로 바뀔 수 있다는 것을 예시를 통해 확인 할 수 있다.

좋은 웹페이지 즐겨찾기