본문 바로가기

자바의 정석

02 변수 variable

1. 변수

1.1 변수(variable)란?

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

1.2 변수의 선언과 초기화

int age;
// 변수타입 변수이름
  • 변수의 초기화
    • 변수를 사용하기 전에 처음으로 값을 저장하는 것
    • 변수를 선언하고 변수를 사용하기 전에 적절한 값으로 초기화하는 것이 좋음
// 덧셈연산자 '+'는 두 값을 더하기도 하지만,
// 문자열과 숫자를 하나로 결합하기도 함
Syetem.out.println("x:" + x + " y:" + y);

1.3 변수의 명명규칙

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

필수는 아니지만 권장하는 규칙

  1. 클래스 이름의 첫 글자는 항상 대문자로
    1. 변수와 메서드의 첫 글자는 항상 소문자로
  2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로
  3. 상수의 이름은 모두 대문자로 함. 여러 단어로 이루어진 경우 '_'로 구분함

 

2. 변수의 타입

  • 값(data)의 종류(type)은 크게 '문자와 숫자'로, 숫자는 다시 '정수와 실수'로 나눌 수 있음
  • 자료형(data type)
    • 값이 저장될 공간의 크기와 저장형식을 정의한 것
    • 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 등

기본값과 참조형

  • 자료형은 크게 '기본형'과 '참조형' 두 가지로 나눌 수 있음
  • 기본형 변수(primitive type) 
    • 실제 값(data)를 저장함
    • 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 총 8개
  • 참조형 변수(reference type)
    • 어떤 값이 저장되어있는 주소(memory address)를 저장함
    • 8개의 기본형을 제외한 나머지 타입
  • 자바는 C언어와 달리 참조형 변수 간의 연산을 할 수 없으므로 실제 연산에 사용되는 것은 모두 기본형 변수임
  • 참조변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름=참조변수의 타입임
  • 새로운 클래스를 작성한다는 것 = 새로운 참조형을 추가하는 셈
  • 참조변수를 선언하는 방법
// 기본형 변수와 같이 변수이름 앞에 타입을 적어줌
// 참조변수의 타입은 클래스이름임
클래스이름 변수이름; // 변수의 타입이 기본형이 아닌 것들은 모두 참조변수임
Date today = new Date(); // Date객체를 생성해서 그 주소를 today에 저장
  • 객체를 생성하는 연산자 new의 결과는 생성된 객체의 주소

2.1 기본형(primitive type)

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

 

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

상수(constant)

  • 값을 한 번만 저장할 수 있는 공간
  • 변수 타입앞에 키워드 'final'을 붙이면 됨
  • 상수는 반드시 선언과 동시에 초기화해야 함
final int MAX_SPEED = 10; // 상수 MAX_SPEED를 선언 & 초기화

리터럴(literal)

  • 프로그래밍에서의 상수와 우리가 기존에 알고 있던 상수를 구분하기 위해 부르는 용어
  • 그 자체로 값을 의미함 ex) 2014, 100...

리터럴의 타입과 접미사

종류 리터럴 접미사
논리형 false, true 없음
정수형 123,... L
실수형 3.14,... f, d
문자형 'A',... 없음
문자열 "ABC",... 없음

타입의 불일치

타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용됨

int i = 'A'
long l = 123;
double d = 3.14f;

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

  • char타입의 변수는 단 하나의 문자만 저장할 수 있음
  • 여러 문자(문자열)을 저장하려면 String 타입을 써야 함
  • 문자열 리터럴은 '빈 문자열(empty string)을 허용함
  • 반면에 문자 리터럴은 반드시 ''안에 하나의 문자가 있어야 함
String str = ""; // OK
char ch = ' '; // OK
char ch2 = ''; // error
  • 원래 String은 클래스이므로 new를 사용한다면 다음과 같은 표현도 허용됨
String name = new String("Java");
  • 덧셈 연산자(+)는 피연산자가 모두 숫자일 때는 두 수를 더하지만, 어느 하나가 String이면 나머지 한 쪽을 먼저 String으로 변환한 다음 두 String을 결합함
    • 기본형과 참조형 구별 없이, 어떤 타입의 변수도 문자열과 덧셈연산을 수행하면 그 결과는 문자열이 됨
문자열 + any type → 문자열 + 문자열 → 문자열
any type + 문자열 → 문자열 + 문자열 → 문자열
  • 덧셈 연산자는 왼쪽에서부터 연산을 수행하기 때문에 결합 순서에 따라 결과가 달라진다는 점을 유의해야 함
class StringEx{
	System.out.println(7 + 7 + ""); // 14
    	System.out.println("" + 7 + 7); // 77
}

 

2.3 형식화된 출력 -  printf()

  • println()은 변수의 값을 그대로 출력하므로 값을 변환하지 않으면 다른 형식으로 출력할 수 없음
  • printf()는 '지시자(specifier)'를 통해 변수의 값을 여러 형식으로 변환해 출력할 수 있음
  • println()과 달리 printf()는 줄바꿈을 하려면 '%n'을 따로 넣어줘야 함
지시자 설명
%b 불리언 (boolean) 형식으로 출력
%d 10진 (decimal) 정수의 형식으로 출력
%o 8진 (octal) 정수의 형식으로 출력
%x, %X 16진 (hexa-decimal) 정수의 형식으로 출력
%f 부동 소수점 (floating-point)의 형식으로 출력
%e, %E 지수 (exponential) 표현식의 형식으로 출력
%c 문자 (character)로 출력
%s 문자열 (string)로 출력
  • 실수형 값 출력할 때
%전체자리.소수점아래자리f

소수점 아래의 빈자리는 0으로 채우고 정수의 빈자리는 공백으로 채워 전체 자리수를 맞춤

 

2.4 화면에서 입력받기 - Scanner

 

import java.util.Scanner; // Scanner 클래스를 사용하기 위해 추가
Scanner sc = new Scanner(System.in); // 입력한 값을 한 Byte 단위로 읽는 스캐너 객체 생성
String input = sc.nextLine(); // 입력받은 한 줄을 input에
int num = Integer.parseInt(input); // 입력받은 내용을 int로
int num = sc.nextInt(); // 로 바로 정수로 입력받아 저장할 수도 있음

 

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

07 객체지향 프로그래밍 2 요약  (0) 2022.06.19
06 객체지향 프로그래밍 1 요약  (0) 2022.06.19
01 자바를 시작하기 전에  (0) 2022.05.04