기타/프로그래밍 분류

Java - 20.참조

zelkova 2011. 7. 3. 17:49
 '참조'는 특정 객체가 메모리에 생성되며 가지는 유일한 주소값을 통해 해당 객체(클래스,인터페이스, 등)에 접근한다.
쉽게 말하자면 일반적인 변수를 만들면 곧바로 메모리가 만들어지고 그 메모리에 값을 넣지만 참조 타입은 메모리에 메모리를 하나 더 만들고 첫번째 메모리는 두번째 메모리의 주소값을 넣고 두번째 메모리에 값을 넣는다.
더 쉽게 말하면

보통 변수는
철수야~ 하면 철수가 오지만
변수 -> 데이터

참조 타입(레퍼런스 타입)은
철수야~ 하면 철수집주소를 아는 녀석이 주소를 적어주고 그 주소대로 찾아가야 철수를 만날 수가 있다.
변수 -> 데이터의 주소 -> 데이터

참조타입은 클래스 타입, 인터페이스 타입, 배열 타입, 열거 타입 등으로 구성된다. '참조'는 특정 객체가 메모리에 생성되며 가지는 유일한 주소값을 통해 해당 객체(클래스, 인터페이스 배열 등)에 접근한다'라는 의미가 있다.

레퍼런스 타입
 기본타입을 메서드의 매개인자로 넘길 경우 Call by Value라고 하는데 이는 메서드의 호출시 데이터값 자체가 넘어가고 다른 변수로 취급된다. 하지만 Call by referance 를 쓰면 데이터 주소를 거쳐서 해당 메모리에 직접 접근이 가능하다.

 예를 들자면

public class Test{
   public static void main(String [] args)
   {
      int num1=5;
      Test test = new Test();
      test.function1(num1);
      System.out.println("num1 =" +num1);
   }
   public void function1(int num1){
      num1=30;
   }
이렇게 넣으면 결과값은 5가 나온다. 하지만 참조 형식을 쓴다면

public class Test{
   public static void main(String [] args)
   {
      Number number = new Number(5);
      Test test = new Test();
      test.function1(num1);
      System.out.println("num1 =" + number.num1);
   }
   public void function1(int num1){
      number.num1=30;
   }
}

class Number{
   int num1;
   }
   public Number(int num1, int num2){
      this.num1 = num1;
      this.num2 = num2;
   }
}

클래스 필드에서 참조 타입 활용방법
말로하려면 너무 복잡합니다. 예제로 이해하세요...

public class MainClass{
   public static void main(String[] args){
      SecondClass secondClass = new SecondClass(new thirdClass(5, 8));
      secondClass.printResult();
   }
}

public class SecondClass{
   private Number number;

   public SecondClass(ThirdClass thirdClass){
      this.thirdClass = thirdclass;
   }

   public void printResult()
   {
      System.out.println(this.number.getNum1() + this.number.getNum2());
   }

class Number{
   private int num1;
   private int num2;

   public Number(int num1, int num2)
   {
      this.num1 = num1;
      this.num2 = num2;
   }

   public int getNum1(){
      return this.num1;
   }

   public int getNum2(){
      return this.num2;
   }

   public void changeNumber(int num1, int num2){
      this.num1 = num1;
      this.num2 = num2;
   }
}
인터페이스 타입
참조 타입인 인터페이스 타입도 클래스 타입과 마찬가지로 메서드의 매개인자 및 클래스의필드로 존재할 수 있다.

열거형 타입
상수화된 데이터값들을 열거형으로 지정하여 사용할 수 있는 참조 타입이다. 
사용방법
-------number.java----------
enum Number{ //enum은 예약어이다.
   num1,num2,num3,num4,num5,num6
}
-------EnumTest.java--------
public class EnumTest{
   public static void main(String[] args)
   {
      Number number = Number.num2;
      EnumText.testMethod(number)
   }
   public static void testMethod(number)
   {
      System.out.println(day)
   }

반응형

'기타 > 프로그래밍 분류' 카테고리의 다른 글

Java - 22문자열  (0) 2011.07.12
Java - 21자바 표준 라이브러리  (0) 2011.07.09
JAVA - 19 인터페이스  (0) 2011.07.03
JAVA - 18.추상 메서드와 추상 클래스  (0) 2011.07.03
JAVA - 17.오버라이드,오버로드  (0) 2011.07.02