💻 Study/Java

[Java] 객체지향개념2_변수

와자! 2023. 1. 30. 11:50
728x90
728x90
이 게시글은 남궁성의 정석코딩 - 자바의 정석 기초편(2020최신)을 보고 공부한 내용을 정리한 게시글입니다.
틀린 내용이 있을 수 있습니다. 

 

 

✔ 선언 위치에 따른 변수의 종류

class Test{
  static int j; // 클래스 변수
  int i; // 인스턴스 변수
    
  void method(){
    int k = 0; // 지역변수
  }
}
  선언 위치 특징
클래스 변수 클래스 영역 안에서 선언 - 변수 앞에 static 제어자가 붙어있으면 클래스 변수이다.
- 클래스가 메모리에 올라갈 때 변수가 생성된다.
- 객체 생성 없이 아무때나 사용할 수 있다.
인스턴스 변수 클래스 영역 안에서 선언 - 객체(인스턴스)가 생성됐을 때 변수가 생성된다.
지역 변수 메서드 영역 안에서 선언 - 메서드 종료 시 효력이 사라진다.

 

◾ 클래스 변수와 인스턴스 변수의 차이

클래스 변수 : 공통적으로 가지는 속성

인스턴스 변수 : 개별적으로 가지는 속성 

class Card {
  String kind; // 카드의 무늬, 인스턴스 변수
  int number; // 카드의 숫자, 인스턴스 변수

  static int width; // 카드의 가로 길이, 클래스 변수
  static int height; // 카드의 세로 길이, 클래스 변수
}

카드의 무늬와 숫자는 카드마다 가지는 개별적인 속성으로 인스턴스 변수로 만든다.

카드의 가로와 세로 길이는 공통적으로 가지는 속성이기 때문에 클래스 변수로 만든다.

 

 

◾ 클래스 변수와 인스턴스 변수 호출하기

클래스 변수 호출

class Main {
  public static void main(String args[]) {
    Card.width = 100;
    Card.height = 200;
    System.out.println(Card.width); // 100
    System.out.println(Card.width); // 200
  }
}

- 인스턴스 변수와는 다르게 객체를 생성하지 않고도 사용할 수 있다.

- 클래스명을 이용해서 클래스 변수를 사용한다. (인스턴스 변수처럼 참조변수를 이용해서 클래스 변수를 사용할 수 있지만, 인스턴스 변수와 구분하기 위해 클래스명으로 사용하는 것을 권장)

 

인스턴스(객체) 변수 호출

class Main {
  public static void main(String args[]) { 
    Card c = new Card(); // 객체 생성

    c.kind = "HEART";
    c.number = 10;
    
    System.out.println(c.kind); // HEART
    System.out.println(c.number); // 10
  }
}

- Card 타입을 가진 참조변수 c를 선언하고 Card 객체를 생성해서 객체의 주소를 c에 저장한다.

- 참조변수 c를 통해 인스턴스 변수에 접근하여 값을 할당한다. 

728x90
728x90