본문 바로가기
Programing/JAVA (& 혼공자Java)

자바(Java) - 참조 타입과 참조 변수2

by a.k.a DUKI 2020. 9. 20.
728x90
반응형

이전 포스팅에 이어 참조 타입과 참조 변수를 더 보자.

dustink.tistory.com/31

 

자바(Java) - 참조 타입과 참조 변수1

자바의 타입은 기본 타입(primitive type)과 참조 타입(reference type)으로 크게 분류가 된다. 앞서 포스팅 된 내용을 기본 타입이라고 생각하면 된다. 참조 타입이란, 객체의 번지를 참조하는 타입으로

dustink.tistory.com

 

Null / NullPointerException

기본 타입 변수에서 ==,!=의 연산은 변수의 값이 같은지/다른지 조사한다.

참조 타입 변수에서 ==,!=의 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용된다.

 

Null / NullPointerException 은 아래 처럼 실행을 한다.

혼공자 유툽 참고

refVar1 == null // false
refVar1 != null // true

refVar2 == null //true
refVar2 != null //false

 

자바는 프로그램 실행 도중 발생하는 오류를 예외(Exception)라고 부른다.

예외는

  • 사용자의 잘못된 입력으로 발생
  • 프로그래머가 코드를 잘못 작성해서 발생

참조 변수를 사용하면서 가장 많이 발생하는 예외 중 하나로 NullPointerException이 있다. 이는 참조 타입 변수를 자롯 사용하면 발생한다.

 

참조 변수가 null을 가지고 있는 경우는 참조 객체가 없으므로 변수를 통해 객체를 사용할 수 없다.

int[] intArray = null; // intArray는 참조 변수 이고, null로 초기화 
intArray[0] = 10; //NullPointerException 발생
//intArray 변수가 참조하는 배열객체가 없다.


String str = null; //String클래스에 str변수를  null 로 초기화
System.out.println("총 문자수: " + str.length()); //NullPointerException 발생
//str변수가 참조하는 String객체가 없기 때문

 

 

String 타입

문자열은 String 객체로 생성되고 변수는 String 객체를 참조 한다.

(일반적으로 STring 변수에 저장한다라고 표현)

//String 변수선언
String str;

//str 변수에 문자열 저장
str = "문자열";

//변수 선언과 동시에 문자열을 저장
String str = "문자열";

 

 

아래의 그림을 보면, 

name변수와 hobby변수는 스택 영영엑 저장된다.

문자열 리터럴인 "신용권" 과 "자바"는  힙 영역에 String 객체로 생성된다.

name변수와 hobby변수는 String 객체의 번지 값이 저장 된다.

(*문자열 리터럴 이란, 문자열 표현법 이라고 이해해되 된다.)

String name = "신용권";
String hobby = "자바";

혼공자 유툽 참고

 

 

 

자바는 문자열 이터럴이 동일하면 String 객체를 공유한다.

아래의 그림을 보면, 

name1과 name2 변수가 동일한 문자열 리터럴인 "신용권"을 참조할 경우 name1과 name2는 같은 String객체를 참조 한다.

String name1 = "신용권";
String naem2 = "신용권";

혼공자 유툽 참고

 

 

 

일반적으로 변수에 문자열을 저장할 경우에는 문자열 리터럴을 사용하지만,

new연산자를 사용해서 직접 String 객체를 생성 시킬수 있다. new 연산자는 힙영역에 새로운 객체를 만들 때 사용하는 연산자로 객체 생성 연산자 라고 한다.

 

new 연산자를 사용해서 각각의 String객체 따로 생성하여 할 수 있다.

혼공자 유툽 참고

String name1 = "자바";
String name2 = "자바";
String name3 = new String("자바");

name1 == name2 //true
name1 == name3 //false -> 새로운 String객체를 생성

 

 

내부 문자열을 비교할 때는String 객체의  equals()메소드를 사용한다.

equals()메소드는 원본 문자열과 매개값으로 주어진 비교 문자열이 동일한지 비교후 ture/false값을 반환한다.

String name1 = "자바";
String name2 = "자바";
String name3 = new String("C");
String name4 = new String("자바");

//변수에 담긴 문자열이 같은지 확인하는 예
boolean result = name1.equals(name2); 
	System.out.println(result);  //true
boolean result2 = name1.equals(name3);
	System.out.println(result2); //false
boolean result3 = name1.equals(name4);
	System.out.println(result3);  //true

 

 

 

 

 

※용어 정리

  • null: 참조 타입 변수는 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있다. null값도 초기값으로 사용 할 수있어 null로 초기화된 참조 변수는 스택 영역에 생성 된다.
  • NullPointerException: 참조 변수가 null을 가지고 있을 경우에는 참조 객체가 없으므로 참조 변수를 통해 객체를 사용할 수 없다.
    • null인 참조 변수를 통해 있지도 않은 객체의 필드나 메소드를 사용하면 NullPinterException이 발생 한다.

 

 

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형

'Programing > JAVA (& 혼공자Java)' 카테고리의 다른 글

자바(Java) - 배열2  (0) 2020.09.22
자바(Java) - 배열1  (0) 2020.09.21
자바(Java) - 참조 타입과 참조 변수1  (0) 2020.09.19
자바(Java) - ★찍기2  (0) 2020.09.19
자바(Java) - ★찍기1  (0) 2020.09.16

댓글