230713 TIL Chapter 2. 변수(Variable) , 상수 , 형변환(Casting)

최규연·2023년 7월 13일
0

TIL

목록 보기
3/57

변수 (Varialble)

오늘은 어제에 이어 변수를 배웠다.
자바의 기본 자료형은 8가지가 있고 추가로 문자열 String (참조형)이 있다.

표현식 (메모리 크기)

논리형 : boolean (1byte)
정수형 : byte (1byte) , short (2byte) , int (4byte) , long (8byte)
실수형 : float (4byte) , double (8byte)
문자형 : char (2byte , 유니코드 사용)

표현식1byte2byte4byte8byte
논리형boolean
정수형byteshortintlong
실수형floatdouble
문자형char

변수 선언이란 메모리에 값을 저장할 공간을 할당하는 것을 뜻하며 변수 값 대입은 변수에 값을 집어 넣는 것이다.
또한 자료형에 따라 리터럴 표기법이 다른데 밑에 코딩을 보면서 설명하겠다.

int intNumber = 1234567890;

int는 자료형 / intNumber은 변수명 / 1234567890은 리터럴

long과 같은 자료형의 경우

long longNumber = 10000000000;

이렇게 코드를 작성하면 long이라는 자료형을 사용했음에도 int로 인식해 에러가 뜨는데

long longNumber = 10000000000L;

값의 마지막에 L 또는 l 이라는 리터럴을 붙여주면 long의 자료형으로 인식해서 에러가 사라진다.
위와 같은 예로 float도 코딩을 하면

float floatNumber = 1.2345;

로만 하면 에러가 뜨고 F 나 f를 위처럼 마지막에 붙여서 코딩을 하면 제대로 인식한다.

float floatNumber = 1.2345f;

정수형과 실수형을 알아봤는데 이제 문자형(char)을 알아보자

char의 경우 문자형 리터럴 표기법은 ''(홑따옴표)를 해주고 문자는 하나만 사용 가능하다.

char ch ='A'
char ch2 = '66'

System.out.println("ch : " + ch );
		System.out.println("ch2 : " + ch2 );

이렇게 코딩하면 콘솔창엔
ch : A
ch2 : B
라고 나오는데 char 자료형에 숫자가 대입될 수 있는 이유는 컴퓨터엔 문자표가 존재하고 숫자에 따라 정해져 있는 문자가 매핑되어 있으므로 '66'이라는 숫자는 B로 변환되어 출력이 된다.

변수 명명 규칙

  • 카멜표기법을 따른다.
  • 숫자로 시작하면 안 된다.
  • 예약어를 사용하면 안 된다.
  • 대,소문자를 구분하고 길이제한은 없다.
  • 변수명은 언어를 가리지 않는다. 그러나 쓰이지 않는다.
  • 특수문자는 $ 와 _ 두가지만 사용 가능하지만 쓰이지는 않는다.

상수 (Immutable variable or Constant variable)

상수란 JAVA에서는 한번만 저장(기록)할 수 있는 메모리를 의미하는데 쉽게 풀이하면 변하지 않고 항상 같은 수를 뜻한다.

상수의 특징

  • 상수도 변수의 한 종류이다.
  • 한번 값이 대입되면 다른 값을 재대입 할 수 없다.

상수 명명 규칙

  • 모두 대문자, 여러단어 작성 시 _ 사용

상수를 사용하는 경우

  • 변하면 안되는 고정된 값 EX) π (원주율)
  • 특정한 값에 의미를 부여할 때

형변환 (Casting)

형변환이란 값의 자료형을 변환하는 것! (boolean은 제외한다.)

형변환이 필요한 이유

  • 컴퓨터는 기본적으로 같은 자료형끼리만 연산이 가능하다.
  • 다른 자료형끼리 연산 시 오류가 발생한다.

위와 같은 이유로 형변환을 해서 같은 자료형으로 만든 뒤 연산을 한다.

형변환은 자동 형변환, 강제 형변환이 존재하는데 예시코드와 함께 자동 형변환부터 알아보자.

자동 형변환

int num1 = 10;
double num2 = 3.5;
		
System.out.println("자동 형변환 결과 : " + (num1 + num2));

결과 값은 ( 자동 형변환 결과 : 13.5 )라고 나온다. 원래라면 정수 + 실수로 에러가 발생해야 하지만 실수 + 실수로 자동 형변환이 이루어진 덕분에 발생하지 않고 원하는 결과가 나온것을 볼 수 있다.

강제 형변환

강제 형변환은 기존 자료형을 원하는 자료형으로 강제 변환 시키는 것으로 값의 범위가 큰 자료형을 작은 자료형으로 변환하거나 출력되는 데이터의 표기법을 변환시키고 싶을때 사용한다.

강제 형변환 방법

  • 자료형을 변환 시키고 싶은 값 또는 변수 앞에 (자료형)을 입력.
double temp = 3.14;
int num = (int)temp;

단, 강제 형변환 시 데이터의 손실이 발생 할 수 있으므로 데이터의 변형, 손실을 감수하고 강제 변환을 진행해야 한다.

int iNum = 290;
byte bNum = (byte) iNum;

System.out.println(iNum); // 290
System.out.println(bNum); // 34

같은 정수형 끼리의 변환이라도 값의 범위 차이 때문에 데이터 손실이 발생한다.


오버플로우 (Over flow)

오버플로우란 결과값이 자료형의 최대값을 벗어나 생기는 오류로 코딩상의 에러는 아니지만 원하는 결과값이 나오지 않는 것으로 컴퓨터는 이 현상을 미리 예측이 불가능하고 개발자가 미리 예측 해야한다.

int i6 = 2147483647; // int의 최대값
int result6 = i6 + 1 ;
System.out.println(result6);

위 코드에서 i6 + 1 은 i6 값이 7에서 8로 올라간다고 생각되지만 주석 뒤 설명대로 이미 int의 값이 양수의 최대값이라 수식이 진행 되었을때 -2147483648 음수로 나타나기 때문에 원하는 결과값을 얻지 못하기에 신경을 써서 코딩을 해야한다.


출력메소드

System.out.print();

위 코드는 단순 출력 (출력 후 줄바꿈 없음)

System.out.println();

print 구문과 동일하게 출력해주지만 출력 후 줄바꿈을 해주는 메소드

줄바꿈이라는 차이는 있지만 괄호안에 내용이 그대로 출력되는 것은 공통점.

System.out.printf();

출력될 문자열 형식을 패턴으로 지정하는 출력구문 (print 구문과 동일하게 출력 후 줄바꿈 없음)

printf 구문 패턴

%d -> 정수형
%o -> 8진수
%x -> 16진수

%c -> 문자
%s -> 문자열

%f -> 실수(소수점 아래 6자리)
%e -> 지수형태표현
%g -> 대입값 그대로

%A -> 16진수 실수

%b -> 논리형

printf 구문 사용법

System.out.printf("패턴" , 패턴에 들어갈 값);

예를 들어 10 + 5 = 15 라는 출력값을 원한다면

int iNum1 = 10;
int iNum2 = 5;

System.out.printf("%d + %d = %d\n", iNum1 , iNum2 , iNum1+iNum2);

이렇게 코딩하면 출력값이 원하는 대로 나온다.

boolean(%b), 문자(%c), 문자열(%s)으로 사용해보면

boolean isTrue = false;
char ch = '조';
String str = "안녕하세요";

System.out.printf("%b / %c / %s\n" , isTrue , ch , str);

false / 조 / 안녕하세요 라는 출력값이 나온다.


escape 문자

이스케이프 문자는 일반 문자가 아닌 특수문자 표현이다.

System.out.println("\\"); //백슬래시(역슬래시) 출력방법
System.out.println("a\tb\tc\t"); // \t (tab출력) : 한공간씩 표현 X , 한번에 공간차지
System.out.println("\u0041"); //유니코드 이스케이프 , 유니코드 (16진수) , 65 나누기 16은 몫 4 나머지 1

출력값
\
a b c d
A

0개의 댓글