Languages/Java

[HUFS/객체지향프로그래밍] #2 변수와 타입

성중 2022. 12. 23. 15:23

변수 선언

값을 저장할 수 있는 메모리의 특정 번지에 붙여진 이름을 변수(Variable)라 한다

 

메모리에 다양한 타입의 값을 저장/읽기 가능

변수 사용을 위해서 먼저 변수 선언을 해줘야 한다

 

타입과 변수 이름
같은 타입의 변수는 한 번에 선언 가능
변수 이름 작성 규칙
자바에서 의미를 가지고 사용되는 예약어(키워드)는 변수 이름으로 사용 불가

변수의 속성

  • 이름: 변수의 이름
  • 주소: 변수의 값이 저장될 메모리 주소
  • 값: 배정문에 의해 부여된 변수의 값
  • 타입: 변수가 가질 수 있는 값의 범위와 이 값에 대한 연산들의 집합
  • 영역: 변수의 사용이 허락되는 범위
  • 수명: 변수가 메모리 주소에 할당되어 있는 기간

 

값 저장

대입 연산자(=)를 사용해 변수에 값을 저장할 수 있으며, 변수에 최초로 값이 저장될 때 메모리에 변수가 생성되는 것을 초기화, 이 때의 값을 초기값이라 한다

 

초기화하지 않은 변수는 메모리에서 값을 읽을 수 없음

변수 사용

변수의 값을 이용해 출력문이나 연산식을 수행하는 것을 변수 사용이라 한다

 

변수 사용 예시
변수의 값을 다른 변수에 저장하는 변수 값 복사 가능

 

변수 사용 범위

메소드 블록 내에서 선언된 변수를 로컬 변수라고 한다

* 메소드 블록 전체에서 사용하려는 경우 메소드 블록 첫머리에 선언

 

메소드 블록 내에서만 사용이 가능하고 메소드 실행이 끝나면 자동 삭제
해당 중괄호 블록 내에서만 사용 가능

기본 타입: 정수

자바 언어는 정수, 실수, 논리값을 저장하는 총 8개의 기본 타입을 제공한다

 

자바의 기본 타입

정수 타입의 종류에 따라 메모리 사용 크기와 저장되는 값의 허용 범위가 다르다

 

정수 타입

소스 코드에서 프로그래머에 의해 직접 입력된 값을 리터럴(literal)이라 한다

 

위의 경우 자바에서 정수로 인식

자바에서는 하나의 문자를 유니코드로 변환해 char 타입으로 저장한다

 

작은 따옴표로 감싼 하나의 문자 리터럴 저장 가능
정수 타입이므로 10진수나 16진수 유니코드 형태의 저장도 가능

하나 이상의 문자들은 String 타입 변수로 저장한다

 

큰 따옴표로 감싼 문자열 리터럴 저장 가능

문자열 내부의 이스케이프 문자로 특정 문자를 포함시키거나 출력을 제어할 수 있다

 

이스케이프 문자 예시
이스케이프 문자 종류

기본 타입: 실수

실수 타입

소스 코드에서 소수점 있는 리터럴은 10진수 실수로 인식되며, 알파벳 e 또는 E가 포함된 숫자 리터럴도 지수 및 가수로 표현된, 소수점 있는 10진수 실수로 인식한다

 

자바는 실수 리터럴은 기본적으로 double 타입으로 해석
float 타입으로 지정하려면 뒤에 f 또는 F를 붙여 표시

 

double 타입이 float 타입보다 2배 가량 정밀도 높음

기본 타입: 논리

논리 타입은 참과 거짓에 해당하는 true와 false 리터럴을 저장하는 타입이다

 

두 가지 상태 값에 따라 제어문의 실행 흐름을 변경하는데 사용

타입 변환

변수 값을 다른 타입의 변수에 저장할 때 타입 변환이 발생할 수 있다

 

타입 변환이 발생하는 경우

값의 허용 범위가 작은 타입이 큰 타입으로 저장될 경우 자동 타입 변환(promotion)이 발생한다

 

기본 타입의 허용 범위 순
char 타입의 경우 int 타입으로 자동 변환되며 유니코드 값 저장

값의 허용 범위가 큰 타입을 작은 타입으로 저장하려 할 경우 강제 타입 변환(casting)이 발생한다

 

작은 허용 범위 타입으로 강제로 나누어 한 조각만 저장
캐스팅 연산자 괄호를 사용 / 괄호 안이 나누는 단위
캐스팅 연산자 괄호를 사용 / 괄호 안이 나누는 단위
강제 타입 변환 예시

1. 정수 타입 변수가 산술 연산식에서 피연산자로 사용되는 경우

 

byte, char, short 타입 변수는 int 타입으로 자동 변환된다

따라서 특별한 경우가 아니라면 정수 연산에 사용하는 변수는 int 타입으로 선언하는 것이 효과적이며, 피연산자 중 하나가 long 타입이면 다른 피연산자는 long 타입으로 자동 변환된다

 

2. 실수 타입 변수가 산술 연산식에서 피연산자로 사용되는 경우

 

피연산자 중 하나가 double 타입인 경우 다른 피연산자도 double 타입으로 자동 변환
다른 타입 연산이 필요한 경우 먼저 강제 변환한 뒤 연산 수행
정수 연산의 결과를 실수로 저장하는 방법
피연산자가 모두 숫자일 경우 덧셈 연산 / 하나라도 문자인 경우 결합 연산
먼저 수행된 연산이 결합 연산인 경우 이후 모든 연산은 숫자여도 결합 연산
문자열을 기본 타입으로 강제 변환 (문자열이 숫자 외 요소를 포함할 경우 예외 발생)

String.valueOf() 메소드로 기본 타입을 문자열로 강제 변환할 수 있다

ex) String str = String.valueOf(3);

 

변수와 시스템 입출력

  • System.out: 시스템의 표준 출력 장치(모니터)로 출력
  • System.in: 시스템의 표준 입력 장치(키보드)에서 읽음

 

시스템 입출력
다양한 출력 메소드 ex) System.out.println(리터럴 또는 변수);
printf() 메소드는 위와 값의 타입에 따라 형식화된 문자열을 출력 / d(정수), f(실수), s(문자열)
포함될 값이 2개 이상인 경우 값의 순번(argument_index$) 표시
다양한 형식 문자열

키보드에서 키를 입력해 프로그램에서 System.in의 read() 메소드로 숫자로 된 키코드를 읽는다

 

얻은 키코드는 대입 연산자를 사용해 int 변수에 저장

System.in.read()는 2개 이상의 키가 조합된 한글을 읽을 수 없어 Scanner를 사용해야 한다

 

자바가 제공하는 Scanner 클래스로 통문자열 읽기 가능
기본 타입과 문자열의 값 비교