강의 내용 및 자료 출처: Java로 배우는 자료구조(권오흠 교수님)

 

Theme. 변수

 

Java 프로그램은 하나 혹은 그 이상의 클래스로 구성된다. 

즉, Java는 class의 집합이고, class는 method의 집합이다.

main method는 프로그램 실행이 시작되는 곳이다.

 

변수는 "적용 범위(scope)"를 가진다.

메서드(블록) 내부에 선언된 변수는 그 메서드(블록) 내부에서만 사용 가능하고, 

메서드 외부에(클래스 내부) 선언된 변수는 그 클래스 내에서 사용가능하다.

 

"==" 연산자를 통한 동일성 비교는 기본형끼리는 가능하지만, 아래와 같이 String 간의 비교 등에서는 불가능하다.

String 간의 비교는 equals()를 사용한다.

 

 

Theme. 변수, 상수, 리터럴의 구분

변수(variable): 하나의 값을 저장하기 위한 공간

상수(constant): 한 번만 값을 저장할 수 있는 변수

리터럴(literal): 그 자체로 값을 의미하는 것

일반적으로 우리가 아는 상수가 자바에서는 리터럴을 의미하는데, 보다 확실한 구분을 위해 아래 예를 살펴보자.

색을 달리하여 구분해보자면, 변수 / 상수 / 리터럴 

 

int score = 100;

     score = 200;

final int MAX = 100;  //final을 붙여서 상수임을 나타냄

             MAX = 200; // 에러 발생

char ch = 'A';

String str = "abc";

 

Theme. 리터럴의 접두사와 접미사

종류 리터럴 접미사
논리형 false, true 없음
정수형 123, 0b0101, 077, 0xFF, 100L L(long을 의미)
실수형 3.14, 3.0e8, 1.4f, 0x1.0p-1 f(float), d(double, 생략가능)
문자형 작은 따옴표 안, 'A', '1', '\n' 없음
문자열 큰 따옴표 안 "ABC", "123", "A" 없음

추가적인 설명을 하자면, 

변수에 값을 저장하기 위해서 변수의 타입과 리터럴의 타입을 일치시켜야 하고,

 

byte b = 127;

byte b = 128; //에러

왜냐하면, byte는 -127 ~ 128의 리터럴만 변수에 저장할 수 있다.

 

0b0101에서 앞의 "0b"는 2진 접두사로 이진수를 나타낼 때 사용한다.

같은 논의로

0100에서 맨앞 '0'은 8진수를,

0x100에서 앞의 "0x"는 16진수를 나타낼 때 사용한다.

 

long l = 10_000_000_000L; // 100억은 long 타입의 리터럴로 반드시 뒤에 L을 붙여줘야 한다.

int는 20억까지 가능하므로 int l = 10_000_000_000은 불가능하다.

float f = 3.14f; // f 생략 불가능

double d = 3.14d; // d 생략 가능

즉, 리터럴이 실수형인데 f가 안붙으면 double로 간주하게 된다.

아래 리터럴들의 타입에 대해 알아보자

10. - > 10.0

.10 - > 0.10

둘다 double

10f - > 10.0f로 float

1e3 - > e는 10^n을 의미하고, 즉 1 * 10^3이므로 1000.0을 의미(double타입)

 

Theme. 변수와 리터럴의 타입 불일치

변수는 그릇, 리터럴은 물건처럼 생각해보자

 

1. 범위가 "변수  >  리터럴"인 경우, 가능!

int i = 'A'; // 변수(int) > 리터럴(char), ASCII 코드와 관련있는데, A의 ASCII 코드 값은 65다.

long l = 123; // 변수(long) > 리터럴(int)

double d = 3.14f; // 변수(double) 리터럴(float)

 

2. 범위가 "변수  <  리터럴"인 경우, 에러 발생

int i = 30_0000_0000; // int의 범위 (-20억 ~ 20억) 벗어남

long l = 3.14f; // long이 8byte이고, float가 4byte이지만, 실수형이 정수형보다 저장범위가 커서 에러 발생

float f = 3.14; // 3.14는 double이므로 float < double이어서 에러 발생

'Java > 자바의 정석 정리' 카테고리의 다른 글

Data Type(값의 타입)  (0) 2023.01.17
문자와 문자열  (0) 2023.01.16
변수(variable)  (0) 2023.01.03

Theme. 변수란?

하나의 값을 저장할 수 있는 메모리 공간(메모리 공간은 RAM을 의미한다)

 

전체 메모리 공간을 1byte 단위로 나누고, 각각의 저장공간에 0,1,2,3,4.. 처럼 연속된 번호를 붙여준다. 이를 메모리 주소라고 한다.

원래는 메모리에 값을 저장할 때 메모리 주소를 이용해야 하지만, 메모리 주소가 복잡하여 사람이 이용하기 불편하다.

따라서, 특정 메모리 영역에 이름을 붙이고 주소 대신에 이름을 통해 메모리에 값을 저장하고, 읽을 수 있게 하는 것이 변수다.

변수는 하나의 값만 저장할 수 있기 때문에 변수에 새로운 값을 저장하면 기존의 값은 지워지고 새로 저장한 값만 남게 된다.

 

Theme. 변수의 선언

메모리에 값을 저장하려면 먼저 변수를 선언해야 한다.

즉, 값(data)를 저장할 공간을 마련하기 위해 변수를 선언하는 것이다.

변수를 선언하는 방법: 변수타입 변수이름;

예) int age; // 정수(int)타입의 변수 age를 선언

그 결과 아래와 같은 age라는 이름의 저장공간이 생기게 된다.

 

Theme. 변수에 값 저장하기

1. 변수에 값 저장하기

int age; //정수(int)타입의 변수 age를 선언

age = 25; //변수 age에 25를 저장

혹은 int age = 25;

이때, '='는 등호가 아니라 '=' 오른쪽 값을 왼쪽 변수에 대입하는 대입연산자이다.

2. 변수의 초기화

변수에 처음으로 값을 저장하는 것을 말한다.

int x = 0; // 변수 x를 선언 후, 0으로 초기화

int y = 5; // 변수 y를 선언 후, 0으로 초기화

혹은 int x = 0, y = 0;

변수의 종류로 클래스 변수, 인스턴스 변수, 지역변수가 있는데, 

클래스변수, 인스턴스 변수는 자동으로 초기화되지만, 지역변수는 그렇지 않으므로

지역 변수는 읽기 전에 반드시 초기화를 해줘야 한다.

 

Theme. 변수의 타입

변수의 타입은 저장할 값의 타입에 의해 결정된다.

저장할 값의 타입과 알치하는 타입으로 변수를 선언해야 한다.

char ch = '가';

double pi = 3.14;

 

데이터의 기본형(기본 타입)

값을 크게 문자, 숫자, 논리형(true/false)으로 나누었을 때, 

문자 - char

숫자 - 정수( byte, short, int, long), 실수(float, double)

논리 - boolean

변수를 선언할 때 이중 적합한 타입을 선택하여 선언한다.

 

 

 

 

'Java > 자바의 정석 정리' 카테고리의 다른 글

Data Type(값의 타입)  (0) 2023.01.17
문자와 문자열  (0) 2023.01.16
변수, 상수, 리터럴  (2) 2023.01.04

+ Recent posts