Java의 정석 - 변수

원태연·2022년 5월 30일
0

Java의 정석

목록 보기
2/19
post-thumbnail

변수

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

1. 변수 선언

값을 저장할 메모리만 할당, 값 저장 X

	#### int age;

int => 변수 타입,

age => 변수 이름 (할당 된 메모리 공간의 이름)

2. 변수 초기화

값을 저장할 메모리를 할당 한 뒤 = 뒤의 값을 저장

int age = 25;

ex)

class VarEx{
  public static void main(String[] args){
    int x = 10, y = 20;
    int tmp = 0;
    System.out.println("x:" + x + " y:" + y);
    tmp = x;
    x = y;
    y = tmp;
    System.out.println("x:" + x + " y:" + y);
  }
}

3. 변수 명명 규칙

  1. 대소문자 구분

  2. 예약어는 사용하면 안됨

  3. 숫자로 시작X

  4. 특수문자는 '_'과 '$'만 가능

권장)

  • 클래스 이름의 첫 글자는 항상 대문자 //VarEx
  • 카멜케이스 //isDarkMode
  • 상수의 이름은 모두 대문자 이며 '_' 로 단어 구분 //MAX_NUMBER

변수 타입

  • 기본형 : 일반적인 변수 값, 계산을 위한 값을 저장
  • 참조형 : 객체의 주소를 저장

기본형

  • boolean: 1byte | true / false

  • char : 문자를 저장하는데 사용 | 2byte

  • byte, short, int, long : 정수를 저장 | 1,2,4,8 byte이며 -2^(bit - 1) ~ 2^(bit - 1)의 범위를 가짐

  • float, double : 실수를 저장 | 4, 8 byte

상수

final을 붙혀 변수의 값을 한번만 저장하게 만들 수 있다.

리터럴

값 자체를 의미한다

ex)

  int year = 2021;
// year는 변수, 2021은 리터럴

final int BIRTH_YEAR = 1999;
//BIRTH_YEAR는 상수, 1999는 리터럴

리터럴 데이터 타입

변수에도 타입이 있듯이, 값 자체를 사용하는 리터럴에 대해서도 어떤 타입인지 결정해 줄 필요가 있다.

//접두사
// 2진수, 8진수, 16진수등
int binNum = 0b11; //0b11 == 2진수 11, 10진수로 3
int octNum = 010; //011 == 8진수 11, 10진수로 9
int binNum = 0x10; //0x11 == 16진수 11, 10진수로 17

//접미사

long big = 1000000000L; //리터럴 뒤에 L을 붙혀 long타입의 리터럴임을 선언
long big = 1_000_000_000L; //jdk1.7 이후부턴 '_'을 통해 정수형에 구분자를 넣어 큰 수를 편하게 읽을 수 있다

double rate = 1.618d //d을 붙혀 double타입의 리터럴임을 선언
double rate = 1.618 //double타입의 리터럴은 접미사 생략가능
float pi = 3.14 //오류, 접미사가 생략되어 리터럴이 double로 인식
float pi = 3.14f

타입을 넘어서는 범위의 값이나, 다른 타입의 리터럴이 저장되는 경우는 컴파일 에러가 발생한다.

단, int i = 'A'처럼, 문자 리터럴을 정수형 변수에 저장하는 경우, 문자 리터럴의 정수값(유니코드)가 저장된다

i == 65

문자 리터럴과 문자형 리터럴

  • ''""

    문자(char)은 '', 문자열(string)은 ""으로 감싼다.

    ''은 반드시 하나 이상의 문자가 필요하여 char ch = ''은 허용되지 않으나, char ch = ""은 허용된다.

  • 문자와 문자열의 연산

    String name = "Ja" + "va"; //"Java"
    String str = name + 8.0; //"Java8.0"

    이처럼 덧셈 연산자를 통해 문자를 결합할 수 있다.

    뎃셈 연산에 하나 이상의 문자열이 존재한다면 다른 타입들은 모두 문자열로 변환한 다음 결합된다.

    int ageInt = 23; // 23
    String age = ageInt + ""; // "23"

변수의 초기화

변수는 선언 위치에 따라 그 종류가 다른데,

  • 인스턴스 변수
  • 클래스 변수
  • 지역 변수

가 있다.

변수들은 생성되면, 그 값을 저장할 공간을 할당 받는다.

class example{
  int x;
  int y = x;
  void toto(){
    int i;
//  int j = i; ERROR
  }
}

지역 변수는 초기화를 하지 않은 변수를 사용할 수 없다. 지역 변수는 메소드가 호출되는 경우에만 실행 되고 자주 사용되기 때문에 생성될때 마다 항상 공간을 할당받고 저장하는 것이 아닌, 지정된 메모리 공간에 값을 덮어씌우며 사용하기 때문이다.

그렇다면, 지역변수를 제외한 다른 변수들은 선언을 하고 초기화를 해주지 않아도 기본적으로 값이 저장되어 있다는 것을 알 수 있다.

대부분 0으로 초기화 되어있으며, booleanfalse로, 참저형 변수는 null로 초기화 되어있다.

profile
앞으로 넘어지기

0개의 댓글