본문 바로가기

[TIL] 참조 변수

인포꿀팁 발행일 : 2020-07-31

참조변수 Reference Variables 란?

참조 변수는 기본형을 제외한 나머지 타입으로 주 기억 장치에 저장되어 있는 객체 주소 값을 가리킨다.

 

기본형 변수는 선언만 하면 기본형에 해당 하는 값을 가질 수 있지만

참조형 변수의 선언은 단지 객체의 위치를 나타내는 메모리만 확보된 상태이다.

따라서 객체를 생성하여 그 위치를 참조형변수에 할당하여야 한다.

 

참조변수의 종류

  • 배열 참조형
  • 클래스 참조형
  • 인터페이스 참조형
  • enum 참조형

 

참조 변수 선언

new 연산자를 이용하여 메모리를 할당한 후에 사용 가능하다.

인스턴스 변수와 인스턴스 메소드 접근

인스턴스 변수와 메소드 접근은 객체를 생성후 "."을 이용하여 접근한다.

 

null

기본 자료형과는 다르게 레퍼런스 형에서 상수로 정의된 값은 null이 유일하다.

null 값을 가진 레퍼런스 변수의 경우에는 가리키고 있는 인스턴스가 없다는 의미다.

**nullPointerException 오류 = 객체 생성이 안되었다는 의미

 

예제)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package ex0731;
 
public class ClassTest3 {
 
    public static void main(String[] args) {
        // 객체선언과 메모리할당
        User3 u1;
        //u1.a=100; // 컴오류 : 메모리 할당이 안되서  오류
        
        //클래스변수는 클래스명으로 접근
        System.out.println(User3.c);
        
        //클래스 메소드는 클래스명으로 접근
        User3.sub2();
        
        u1=new User3();
        User3 u2 =new User3();
        
        System.out.println(u1);//클래스명@해쉬코드(주소)
        
        u1.a=100// 인스턴스 변수, 인스턴스 메소드는 객체로 접근
        
        u1.sub1();
        
        u2.sub1();
        
        //클래스 변수나 클래스메소드는 개체로 접근가능하지만 
        //객체생성과 상관 없으므로 클래스명으로 접근한다.
        //객체명으로 소환이 되긴하지만 static 클래스 변수는 클래스명으로 호출해야함
        System.out.println(u1.c);
    }
}
 
class User3 {
    int a;     // 인스턴스 변수. 객체가 생성되면서 0으로 초기화
            // 인스턴스 변수 : 객체가 생성되어야만 사용할 수 있다.
            // 인스턴스 변수는 객체를 통해서만 접근할 수 있다.
    int b=10// 인스턴스 변수 : 객체가 생성되면서 10으로 초기화
    
    static int c=300// 클래스 변수
    //객체생성과 상관없이 클래스가 로딩되면 바로 사용가능
    //클래스명을 이용하여 접근
    
    public void sub1() {
        int n =10;    //메소드 안에서 선언된 변수
                    //초기화(값이 존재)해야 사용가능
        System.out.println("지역변수"+n);
        //인스턴스메소드는 인스턴스 변수, 클래스변수 접근가능
        System.out.println(a+":"+b+":"+c);
        
    }
    
    //클래스 메소드
    //객체 생성과 상관없이 언제나 호출 가능
    public static void sub2() {
        //System.out.println(a+":"+b);// 컴오류
    }
}
cs

 

call by value

  • 실매개 변수를 매개 매개변수로 전달
  • 실매개 변수와 형식 매개변수가 기억공간을 따로 확보

call by reference 

  • 참조변수를 매개변수로 전달
  • 실매개 변수와 형식 매개변수가 같은 기억공간을 참조

'Language > JAVA' 카테고리의 다른 글

[TIL]클래스의 활용  (0) 2020.08.03
[TIL]메소드  (0) 2020.07.31
[TIL] 클래스  (0) 2020.07.31
[TIL] 객체지향 프로그래밍  (0) 2020.07.31
[TIL] 배열의 복사  (0) 2020.07.31

댓글