포스트

Java에서의 변수(Variable)

Java에서의 변수(Variable)

1. 변수

변수에 대해 수학에서의 변수와 같다고 생각하면 안된다.

변수는 data(값)을 저장하고 활용할 수 있는 공간이라고 생각하면 된다.

그리고 하나의 값을 저장할 수 있다.

이를 테면 A라는 변수에 1을 넣었는데 2를 넣으면 1은 사라진다.

2. Java에서의 변수

자바에서 변수를 선언(나 변수에요~)

1
2
int age = 30;
String name = "Lee";

여기서

  • age → 정수 데이터를 저장하는 변수이다.

  • name → 문자열 데이터를 저장하는 변수이다.

3. 변수의 초기화

변수는 반드시 initialization(초기화)를 해야한다. 변수는 메모리에 생성되는데
초기화하지 않는다면 쓰레기 값이 넣어져 있기 때문에 오류가 생긴다.

아까 변수는 다른 값을 넣으면 있던 값이 사라진다 하지 않았는가?
그래서 다른 값을 넣으므로 초기화 해준다.

1
int desk = 1;     //초기화

4. 변수 명칭 규칙

가능한 문자

  • 영문자
  • 숫자
  • _ $

숫자로 시작 x

1
	int 1one; //오류

예약어 사용 불가

1
2
int class;   //오류
int public;  //오류

Java Convention (camelCase)

보통 username 이라는 변수명을 사용할 때는

userName 이렇게 명명하는 것이 규칙이다.

5. 변수 종류

종류위치특징
지역 변수 (Local Variable)메서드 내부가장 많이 사용
인스턴스 변수 (Instance Variable)클래스 내부객체마다 값이 다름
클래스 변수 (Static Variable)static 사용모든 객체가 공유

1) 지역변수(Local Variable)

메서드 안에서 선언. 그렇기에 메서드 안에서만 사용 가능하다. 변수는 초기화가 필수이고 메서드 안에서 선언하기 때문에 반드시 초기화가 필요하다.

2) 인스턴스 변수

클래스 안에서 선언되는 변수

1
2
3
4
class User {
    int age;
    String name;
}

그렇기에 객체마다 다른 값을 가짐.

1
2
User user1 = new User();
User user2 = new User();

3) 클래스 변수

static 키워드 사용.

1
2
3
class Counter {
    static int count = 0;
}

변수 종류의 메모리 저장 위치

변수저장 위치
지역 변수Stack
인스턴스 변수Heap
static 변수Method Area

변수는 값 자체가 들어갈 수 있지만 “참조”일 수 있다.

기본 타입

1
int a = 10;

참조 타입

1
User user1 = new User();

이렇게 하는 이유는 메모리 관점에서 보아야 하는데

1) 이유 : 객체 크기

기본 타입은 상대적으로 크기가 매우 작다. 그러나 객체 타입은 매우 큰 크기를 가지고 있다. 예를 들면

1
2
3
4
class User{
	String name;
	String age;
}

라고 했을 때 객체의 내부 정보가 객체의 헤더, 필드 등 많은 정보들이 포함되어 있다.

만약, 여기서 변수를 다 저장하게 되면? 큰 크기들이 메모리에 복사 저장될 것이고

-> 메모리 낭비 + 성능 저하

이렇게 결론이 도출된다.

또한,

2) 이유 : 객체 공유

1
2
3
4
5
6
User u1 = new User();
User u2 = u1;

u1.age = 30;

System.out.println(u2.age);

이 때에

u1, u2는 User의 객체이다. 참조를 통해 서로 공유가 가능하다.

service, repository, DTO, etc.. 이런 구조를 가지기 때문이다.

3) 이유 : Garbage Collection

Java의 특징 중 하나인 Garbage Collection은 객체가 어디도 참조하지 않는다면 Garbage Collection가 삭제한다. 변수를 참조하는 이 구조가 이러한 자동 메모리 관리가 가능하게 한다.

4) 객체 지향

객체 지향이 무엇인가.

식당에서 햄버거를 주문한다고 해서 메뉴를 복사하는 것이 아니라
메뉴판에 있는 레시피를 기반으로 햄버거가 만들어진다.
객체지향에서도 클래스는 설계도이고 객체는 그 설계도로 만들어진 실제 인스턴스이다.

변수에 대입하면 쉬운 예라 생각된다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.