Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

자바 레퍼런스 변수

2010. 5. 25. 01:45programming/java

728x90

클래스를 사용하기 위해서는 반드시 메모리에 생성해주어야 한다.

이렇게 메모리상에 생성된 클래스를 클래스객체 혹은 인스턴스(instance)라 한다.

 

레퍼런스 변수는 메모리상에 생성된 인스턴스를 가리키는데 사용되는 변수이다.

모든 인스턴스는 레퍼런스 변수만을 통해서 사용이 가능하다.

레퍼런스 변수는 일반적인 데이터를 넣어두는 변수가 아니고 인스턴스를 가리키는 값이다.

레퍼런스 변수는 인스턴스의 멤버변수와 메서드를 가리킬 수 있도록 되어 있다.

 

인스턴스의 멤버변수나 메서드를 사용하는 방식은 다음과 같이 점(.)을 사용한다.

     레퍼런스변수.멤버변수

     레퍼런스변수.메서드()

 

다음과 같은 클래스가 있다고 하자.

 

 

class Car{
 int velocity; // 속도를 정수형으로 선언
 int wheelNum; // 바퀴의 수를 정수형으로 선언
 String carName; // 차의 이름을 String 클래스로 선언

 

 // 속도를 높인다.
 // 멤버 변수인 velocity에 1을 더해주는 동작을 한다.
 public void speedUp(){
  velocity = velocity + 1;
 }

 

 // 속도를 낮춘다.
 public void speedDown(){
  velocity = velocity - 1;
  if(velocity < 0)
   velocity =0;
 }

 

 // 멈춘다.
 public void stop(){
  while(velocity>0){
   speedDown();
  }
 }

 

 public static void main(String args []){
  Car myCar;

  myCar = new Car();
  myCar.speedUp();
  myCar.carName = "소나타";
  System.out.println(myCar.carName + "의 속도는 " + myCar.velocity);
 }
};

 

인스턴스를 생성하고 사용하는 경우 레퍼런스 변수는 3군데에 걸쳐서 사용되었다.

   *레퍼런스 변수의 정의 :::                    Car myCar;

   *인스턴스 생성            :::                    myCar = new Car();

   *인스턴스 접근            :::                    myCar.velocity = 0;

                                                            myCar.speedUp();

# 레퍼런스 변수 정의

 일반적으로 변수를 정의하는 것은       

      데이터형 변수_이름;

 의 형태를 가진다. 이점은 인스턴스 변수도 다른 일반적인 데이터와 다르지 않다. 다만, 데이터형 대신에

 클래스 이름이 들어간다는 점이 차이가 있다. 즉,

      클래스이름 변수_이름;

 의 형태가 된다. 따라서 앞의 Car 클래스의 변수를 선언하기 위해서는

      Car myCar;

 와 같은 형태의 변수 선언이 된다.

 

# 인스턴스의 생성과 레퍼런스 변수

 자바에서 인스턴스를 생성하기 위해서는 new 연산자가 필요하다. new 연산자의 사용법은 보통 다음과 같다.

      new 클래스이름();

 이렇게 인스턴스를 생성하면 메모리상에 Car 인스턴스가 생성되고, new 연산자는 생성된 인스턴스를 가리키는

 레퍼런스를 반환한다. 이 값은 "=" 연산자에 의해 myCar 레퍼런스 변수에 저장된다. 중요한 점은 레퍼런스 변수는 인스턴스 그 자체가 아니고, 단지 인스턴스를 가리키기 위한 변수라는 점이다.

 

# 레퍼런스 변수르 이용한 인스턴스의 사용

 인스턴스의 생성을 통해 레퍼런스 변수를 얻으면 해당 객체이 멤버변수와 메서드를 사용할 수 있다.

 사용법은 레퍼런스 변수명 뒤에 점(.)을 붙이고 메서드명이나 변수명을 붙이면 된다.

      레퍼런스_변수.메서드이름();

      레퍼런스_변수.멤버변수_이름;

 

# null 레퍼런스

 null 레퍼런스 상수가 의미하는 것은 해당 값을 가진 레퍼런스 변수의 경우 가리키고 있는 인스턴스가 없다는 것을 의미한다. 이렇게 null 레퍼런스로 지정된 경우에는 레퍼런스 변수를 사용해도 컴파일 에러는 발생하지 않는다. 단, 실행시에 NullPointerException이 발생한다.

 class RefTest{
 int velocity;

 void speedUp(){
  velocity += 1;
 }

 public static void main(String args []){
  // RefTest 클래스의 레퍼런스 변수 선언
  RefTest rt2;
  //rt2.speedUp(); // 이렇게 하면 컴파일 에러

  RefTest rt = null;

  rt.speedUp();
 }
}

 출처 : http://kin.naver.com/open100/detail.nhn?d1id=1&dirId=1040201&docId=917959&qb=7J6Q67CUIOugiO2NvOufsOyKpA==&enc=utf8&section=kin&rank=1&sort=0&spq=0&pid=f/qVVwoi5TGssawJKbGsss--187851&sid=S-qss3KU@ksAAFw7Ebk

728x90

'programming > java' 카테고리의 다른 글

에디터 플러스 설정  (0) 2011.02.24
java 다중 상속이 안되는 이유  (0) 2010.06.22
JDK, JRE, JVM  (0) 2010.05.05
자바?  (0) 2010.05.04
Scanner next() 와 nextLine() 차이  (2) 2010.04.07