참조 타입 

     

    객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말한다.

     

    기본타입은 설정값을 저장하지만, 참조 타입인 배열, 열거, 클래스, 인터페이스 변수는

    메모리의 번지를 변수 안에 저장합니다 

    번지를 통해 객체를 참조한다는 뜻에서 참조 타입이라고 부릅니다.

     

    기본 타입 변수

    int age = 25;
    double price = 100.5;

     

    참조 타입 변수

    String name = "강재혁";
    String hobby = "공부";

     

    int 타입 변수인 age는 직접 값을 저장하고 있지만, String클래스 변수인 name은 힙 영역의 String 객체 번지 값을 가지고 있다.

     

    이처럼 번지를 통해 객체를 참조하기 때문에 String 클래스 변수를 참조 타입 변수라고 한다.

     

    메모리 영역

     

    메소드 영역

    정적 필드, 상수, 메소드코드, 생성자코드 등을 분류해서 저장

     

    힙 영역

    객체와 배열이 생성되는 영역

    여기에 생성된 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.

     

    jvm스택 영역

    메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행한다.

    프레임 내부에는 로컬 변수 => 스택이 있다. -> 기본타입 변수와 참조 타입 변수가 추가 되거나 제거 된다.

     

    int[] scores = {10, 20, 30}

    다음과 같이 scores는 스택 영역

    실제 10, 20, 30을 갖는 배열은 힙 역역

     

    참조 변수의 == != 연산

    변수의 값을 비교하는 것

     

    null과 nullPointerException

    참조타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null값을 가질 수 있다.

    null갑도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택영역에 생성된다.

     

    new 연산자 

    힙 영역에 새로운 객체를 만들 때 사용하는 연산자로 객체 생성 연산자라고 한다.

    String name1 = new Strong("강재혁");
    String name2 = new String("강재혁");

    힙역역에 "강재혁" 두개 생성

    name1 과 name2는 서로다른 객체를 참조함

     

    내부 문자열을 비교할 때는 

    boolean result = str.equals(str2);
    //         (원본 문자열)      (비교문자열)   

     

    문자열 비교

    package sec01.exam01;
    
    public class StringEqualsExample {
    
    	public static void main(String[] args) {
    		String strVer1 ="강재혁";
    		String strVer2 ="강재혁";
    		
    		if(strVer1 == strVer2) {
    			System.out.println("strVer1과 strVer2는 참조가 같음");	
    		}else {
    			System.out.println("strVer1과 strVer2는 참조가 다름");
    		}
    		
    		if(strVer1.equals(strVer2)) {
    			System.out.println("strVer1과 strVer2는 문자열이 같음");
    		}
    		
    		String strVer3 = new String("강재혁");
    		String strVer4 = new String("강재혁");
    		
    		if(strVer3==strVer4) {
    			System.out.println("strVer3와 strVer4는 참조가 같음");
    		}else {
    			System.out.println("strVer3와 strVer4는 참조가 다름");
    		}
    		
    		if(strVer3.equals(strVer4)) {
    			System.out.println("strVer3와 strVer4는 문자열이 같음");
    		}
    	}
    }
    

    strVer1과 strVer2는 참조가 같음
    strVer1과 strVer2는 문자열이 같음
    strVer3와 strVer4는 참조가 다름
    strVer3와 strVer4는 문자열이 같음

     

    String hobby = null;

    hobby변수가 String 객체를 참조하였으나, null을 대입함으로써 더이상 String 객체를 참조하지 않도록 할 수 있다.

     

    String hobby = "공부";
    hobby = null;

    참조되지 않은 객체를 쓰레기 객체로 취급하고 메모리에서 자동 삭제됨

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading