Java 변수 종류 멤버변수 지역변수 매개변수

벼랑 끝 코딩·2025년 2월 20일

Java

목록 보기
3/40

자바 변수

자바 변수에도 종류가 있는데, 헷갈리지 않게 초장에 개념을 잡고 들어가는게 중요하다.

멤버 변수

  • 멤버 변수는 객체 생성 시, 자동 초기화된다.

클래스 변수(정적 변수)

  • static 키워드로 선언된 변수로, 모든 인스턴스가 공유한다.
class Clazz {
	public static int clazzVar = 0; // 클래스 변수
}
Clazz clazz1 = new Clazz();
Clazz clazz2 = new Clazz();
// clazz1.clazzVar => 0
// clazz2.clzzVar => 0

clazz1.clazzVar = 1;
// 클래스 변수는 모든 인스턴스가 공유하므로 값이 변하면 변한 값을 공유한다.
// clazz1.clazzVar => 1
// clazz2.clazzVar => 1

인스턴스 변수

  • static 키워드로 선언되지 않은 변수로, 각 객체마다 별도로 생성된다.
class Clazz {
	public static int clazzVar = 0; // 클래스 변수
    public int insVar = 0; // 인스턴스 변수
}
Clazz clazz1 = new Clazz();
Clazz clazz2 = new Clazz();
// clazz1.insVar => 0
// clazz2.insVar => 0

clazz1.insVar = 1;
// 인스턴스 변수는 각 객체마다 별도로 생성되므로 공유하지 않는 고유 값을 가진다.
// clazz1.insVar => 1
// clazz2.insVar => 0

지역 변수

  • 메서드 내부에 선언되며 해당 메서드 내에서만 사용 가능
  • 직접 초기화해야 한다.
class Clazz {
	public static int clazzVar = 0; // 클래스 변수
    public int insVar = 0; // 인스턴스 변수
    
    public void clazzMethod() {
    	int localVar = 0; // 지역 변수
    }
    
    // 메서드 밖에선 localVar 사용 불가
}

매개 변수

  • 메서드에 전달되는 인자를 저장하는 변수
class Clazz {
	public static int clazzVar = 0; // 클래스 변수
    public int insVar = 0; // 인스턴스 변수
    
    public void clazzMethod(int paramVar) { // 매개 변수
    	int localVar = 0; // 지역 변수
        // 메서드 내부에서 paramVar 사용 가능
    }
}

변수 타입

실무 사용

  • int : 정수 기본 사용
  • long : 정수가 20억이 넘는 경우 사용
  • double : 실수 사용
  • String : 문자열(문자) 사용
  • boolean : 조건문 사용
  • byte : 파일을 다룰 때 사용

리터럴

  • 개발자가 직접 입력한 고정된 값
  • int a = 100, String str = "hello"

왜 이것들만 써?

정수에 short, 실수에 float, 문자에 char 등
다른 변수 타입도 있는데 왜 이것들만 사용하느냐?

과거 하드웨어가 좋지 않았던 시절,
이런 타입 하나도 속도에 영향을 미쳤던 고대 시절에는
무시할 수 없었던 부분이라고 한다.

하지만 고성능 하드웨어를 탑재한 지금에는,
이런 타입에 신경을 쓰고 얻는 이점보다
나중에 이 타입을 바꿔야할 때 드는 유지보수 비용이 더 커지기 때문
타입 최적화가 가능하다고 하더라도 개발의 효율을 위해
대표적인 변수 타입만을 사용한다고 한다.


변수는 기본 중의 기본.
개념들을 초장에 확실히 머릿속에 익혀두고 클래스 레벨로 넘어가도록 하자.

profile
복습에 대한 비판과 지적을 부탁드립니다

0개의 댓글