본문 바로가기
프로그래밍언어/Java

[자바의 정석] 02. 변수(Variable)

by qkzkdo 2023. 7. 26.
728x90

학원 개강 전 자바의 정석 1권 3회독 2권 1회독으로 예습 후에 개강하였다.
프로젝트와 수료 후 자바 지식이 많이 휘발되어서 복습과 정리를 하기로 했다.

 

 

1. 변수(variable)

1.1 변수란?

단 하나의 값을 저장할 수 있는 메모리 공간

 

1.2 변수의 선언과 초기화

변수 타입 : 변수에 저장될 값이 어떤 타입 인지를 지정하는 것

변수 이름 : 변수에 붙인 이름(메모리 공간에 이름을 붙여주는 것)

변수에 값을 저장하고 저장된 값을 읽어올수도 있음

같은 이름의 변수는 존재할 수 없음

int(변수타입) age(변수이름); //age라는 이름의 변수를 선언

변수의 이름은 메모리 공간에 이름을 붙여주는 것이다. 그래야 그 이름을 이용해서 저장공간(변수)에 값을 저장하고, 저장된 값을 읽어오기도 할 수 있는 것

 

변수의 초기화

변수를 사용하기 전에 처음으로 값을 저장하는 것

변수에 값을 저장할 때는 대입연산자 ’=’ 를 이용

 

두 변수의 값 교환하기

변수를 하나 더 선언해서 x의 값을 위한 임시 저장소로 사용하면 된다.

 

1.3 변수의 명명규칙

‘변수의 이름’처럼 프로그래밍에서 사용하는 모든 이름을 ‘식별자(identifier)’라고하며, 같은 영역 내에서 서로 구분(식별)될 수 있어야 한다

 

식별자 만들 때 규칙

  1. 대소문자가 구분되며 길이에 제한이 없다.
  2. 예약어를 사용해서는 안 된다.
  3. 숫자로 시작해서는 안 된다.
  4. 특수문자는 ‘_’와 ‘$’만 허용한다.

예약어는 키워드(keyword) 또는 '리져브드 워드(reserved word)'라고 한다.

예약어는 클래스, 변수, 메서드 이름으로 사용할 수 없다.

 

그외 자바 프로그래머 권장규칙

  1. 클래스 이름의 첫 글자는 항상 대문자로 한다.
  2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
  3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 ‘_’로 구분한다.

변수의 이름은 용도를 알기 쉽게 ’의미있는 이름’ 으로 하는것이 바람직하다

 

 

2. 변수의 타입

❗메모리에는 1 byte단위로 일련번호가 붙어있는데, 이 번호를 ‘메모 리주소(memory address)’ 또는 간단히 ‘주소’라고 한다. 객체의 주소는 객체가 저장된 메모리 주소를 뜻한다.

기본형 - 변수는 실제 값(data)을 저장

-논리형, 문자형, 정수형, 실수형 계산을 위한 실제 값을 저장한다. 모두 8개

참조형 - 변수는 어떤 값이 저장되어 있는 주소(memory address)를 값으로 갖는다.

-객체의 주소를 저장. 8개의 기본형을 제외한 나머지 타입.

참조형 변수(참조변수)를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 된다.

-새로운 클래스를 작성한다는 것은 새로운 참조형을 추가하는 셈

 

2.1 기본형(primitive type)

기본자료형의 종류와 크기

종류/크기 1byte 2byte 4byte 8byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

2.2 상수와 리터럴(constant&literal)

상수-저장한 값을 변경할 수 없는 변수

변수 타입 앞에 키워드 ‘final’을 붙여주면 된다 선언과 동시에 초기화 해야 함

상수의 이름은 모두 대문자로 하는 것이 암묵적인 관례

 

리터럴

-리터럴은 단지 우리가 기존에 알고 있던 ‘상수’의 다른 이름일 뿐’

  • 변수(variable) : 하나의 값을 저장하기 위한 공간
  • 상수(constant) : 값을 한번만 저장할 수 있는 공간
  • 리터럴(literal) : 그 자체로 값을 의미하는 것

상수가 필요한 이유

상수는 리터럴에 ‘의미있는 이름’을 붙여서 코드의 이해와 수정을 쉽게 만듦

타입의 불일치

타입일 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용된다.

변수(그릇)>리터럴(물건) ok 변수<리터럴 에러

문자 리터럴과 문자열 리터럴

문자 리터럴-char 문자열 리터럴-String

char타입의 변수는 단 하나의 문자만 저장

원래 String은 클래스이므로 객체를 생성하는 연산자 new를 사용해야함

문자열 + any type → 문자열 + 문자열 = 문자열 any type + 문자열 → 문자열 + 문자열 = 문자열

 

2.3 형식화된 출력 - printf()

println()은 변수의 값을 그대로 출력, 다른 형식으로 출력할 수 없다.

printf()는 ‘지시자(specifier)’를 통해서 변수의 값을 여러 가지 형식으로 변환하여 출력하는 기능을 가지고 있다.

지시자 설명
%b 불리언(boolean) 형식으로 출력
%d 10진(decimal) 정수의 형식으로 출력
%o 8진(octal) 정수의 형식으로 출력
%x, %X 16진(hexa-decimal) 정수의 형식으로 출력
%f 부동 소수점(floating-point)의 형식으로 출력 / 기본적으로 소수점 아래 6자리까지만 출력
%e, %E 지수(exponent)표현식의 형식으로 출력
%c 문자(character)로 출력
%s 문자열(string)로 출력

 

2.4 화면에서 입력받기 - Scanner

화면으로부터 입력받는 방법

Scanner클래스를 이용(Console클래스도 있으나 이클립스같은 IDE에서 작동 잘 안됨)

  1. import java.util.*; 추가
  2. Scanner 객체 생성
  3. Scanner 객체를 사용

 

 

3. 진법

10진수 : 1-진법으로 나타낸 수(체계)를 의미하며 우리 일상에서 가장 많이 쓰이는 수.

우리가 일상생활에서 주로 사용하는 것은 10진법이다.

전기가 흐르면 1, 흐르지 않으면 0, 만으로 동작하도록 설계되었다

 

 

4. 기본형(primitive type)

4.1 논리형 - boolean

boolean형 변수에는 true와 false 중 하나를 저장할 수 있으며 기본값은 false

 

4.2 문자형 - char

단 하나의 문자만을 저장할 수 있다.

문자가 저장되는 것이 아닌 ‘문자의 유니코드(정수)’가 저장된다.

 

특수문자 다루기

특수문자를 표현하는 방법

특수 문자 문자 리터럴
tab \t
backspace \b
form feed \f
new line \n
carriage return \r
역슬래쉬(\) \\
작은따옴표 \’
큰따옴표 \”
유니코드(16진수)문자 \u유니코드(예: char a=’\u0041’)

 

4.3 정수형 - byte, short, int, long

타입 저장 가능한 값의 범위 bit byte
byte -128 ~ 127 (-2(7승)~2(승)-1) 8 1
short -32,768 ~ 32.767 (-2(15승)~2(15승)-1) 16 2
int -2,147,483,648 ~ 2,147,483,647 (-2(31승)~2(31승)-1, 약 ±20억) 32 4
long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (-2(63승)~2(63승)-1) 64 8

해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우(overflow)라고 한다.

최소값에서 1을 빼면 최대값이 되고, 최대값에 1을 더하면 최소값이 된다는 것을 확인할 수 있다.

 

4.4 실수형 - float, double

타입 저장 가능한 값의 범위(양수) 정밀도 bit
float 1.4E-14 ~ 3.4E38 (1.4×10(-45승)~3.4×10(38승) / 정밀도 7자리 7자리 32
double 4.9E-324 ~ 1.8E308(4.9×10(-324승)~1.8×10(308승) / 정밀도 15자리 15자리 64

 

 

5. 형변환

5.1 형변환(캐스팅, casting)이란?

변수 또는 상수의 타입을 다른 타입으로 변환하는 것

5.2 형변환 방법

형변환 하고자 하는 변수나 리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주기만 하면 된다.

(타입)피연산자

여기서 괄호()는 ‘캐스트 연산자’또는 ‘형변환 연산자’라고 하며, 형변환을 ‘캐스팅(casting)이라고도 한다.

형변환 연산자는 그저 피연산자의 값을 읽어서 지정된 타입으로 형변환하고 그 결과를 반환할 뿐이다.(변수의 값은 안바뀜)

기본형에서 boolean을 제외한 나머지 타입들은 서로 형변환이 가능하다.

큰 값을 작은 타입의 정수에 넣을 때 (형변환)을 사용하면 된다.

 

5.6 자동 형변환

자동 형변환의 규칙

기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다.

표현범위가 좁은 타입에서 넓은 타입으로 형변환 하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환 된다.

기본형의 자동 형변환이 가능한 방향

[小] byte → short → int → long 정수형)→ float → double [大] char↑

  1. boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.
  2. 기본형과 참조형은 서로 형변환할 수 없다.
  3. 서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 원칙이지만, 값의 범위가 작은 타입에서 큰 타입으로 형변환은 생략할 수 있다.

char와 short는 자동형변환 불가능

 

 

 

출처 : 남궁성. 「자바의 정석」. 도우출판. 2016

728x90