기본형과 참조형 총정리

이동영·2024년 3월 11일

자바 개념정리

목록 보기
10/21

기본형 vs 참조형1

기본형(Primitive Type) : 변수에 값을 직접 넣을 수 있는 타입을 기본형이라고 한다.

참조형(Reference Type) : 변수에 값을 직접 넣는것이 아닌 생성된 객체의 위치를 가리키는 주소값을 넣는것을 참조형 변수라고 하며 객체 또는 배열에 사용됨

  • 객체는 .dot연산자를 사용하여 메모리상에 생성된 객체에 접근할 수 있다.
  • 배열은 []를 사용하여 메모리상에 생성된 배열을 찾아가 사용할 수 있다.

기본형 vs 참조형 - 계산

  • 기본형은 들어있는 값을 그대로 계산에 사용할 수 있다.
  • 하지만 참조형의 값은 값이 들어가 있는것이 아닌 주소값이 들어있다. 그렇기에 주소값을 통해 메모리상에 있는 객체에 접근하여 값을 사용해야 한다.
  • 기본형은 왜 기본형인가? 자바가 제공하는 기본 타입이다. 그렇기에 개발자가 새로 정의할 수 없으며 참조형만 개발자가 정의할 수 있다.

String

  • 사실 스트링은 클래스이며 참조형변수이다.
  • 문자는 자주 다뤄지기 때문에 자바에서 특별히 기본형 처럼 사용하게 해준다.
  • 따라서 String은 문자라는 값을 넣지만 실제로 메모리 상 어딘가에 객체가 생성된다.

기본형 vs 참조형 - 변수 대입

  • 자바는 항상 변수의 값을 복사해서 대입한다.
  • 기본형 참조형 상관없이 변수는 값을 복사해서 대입한다.
  • 기본형은 들어있는 값을 복사해서 대입하며 참조형은 참조값을 복사해서 대입한다.
  • 참조형은 실제 건물이 복사되는것이 아닌 그 건물을 가리키는 주소를 복사한다.

  • int b = a가 있을 때 a자체 그대로 대입하는것이 아니라 a안에 들어있는 값을 복사해서 b에 대입한다.
  • 변수에 찍어보면 나오는 값을 복사해서 전달할 뿐이다. 참조형은 그 값이 참조값이니 똑같은 주소값을 가리키게 된다.

기본형 vs 참조형 - 메서드 호출

  • 메소드를 호출할 때 사용하는 매개변수 파라미터도 결국 변수이다.
  • 옆사람과 나는 각각의 좋이가 있다. 그런데 내 좋이에 10이라는 값을 적었고 그 값을 옆 사람 종이에도 10을 적어서 똑같은 값을 가지게 되었다. 그런데 내 종이에 있는 10의 값을 20으로 바꾼다고 해서 옆사람 종이의 값도 변하게 되는것 아니다. 이게 바로 기본형이다.
  • 참조형은 종이에 주소지를 적었다. 상대방이 종이에 적힌 주소지에 가서 무엇을 변경했다고 한다. 그러면 나에게도 영향이 오게 되는데 이것이 참조형이다.

변수와 초기화

변수의 값 초기화

  • 객체의 필드는 생성될 때 생성자에 의해 자동으로 초기화 된다
  • 지역변수는 수동으로 초기화 해줘야 한다.

null

  • 참조형 변수에는 null이라는 값을 넣을 수 있다.

GC(쓰레기 청소부)

  • 기존에 참조값이 들어있던 변수에 null을 대입하게 되면 기존에 있는 참조값은 메모리 어딘가에 떠돌아 다니게 된다. 거기에 참조값은 알 방법이 없기에 필요가 없는 데이터가 되는데 메모리를 제거해줘야 한다.
  • c에서는 명령어로 직접 제거를 해야 했었다. 만약 인스턴스 삭제를 누락하게 되면 메모리 부족 오류가 발생하게 되는데 자바에서는 가비지 컬렉션 GC가 이 문제를 해결해준다.
  • 해당 객체를 참조하는 곳이 사라지면 JVM은 필요 없는 객체라고 판단하고GC를 사용하여 제거한다.
  • 지역변수에서만 참조하던 객체가 지역변수가 끝나면 JVM이 GC를 사용하여 필요없는 객체를 제거한다.

NullPointerExcepion

  • 택배를 보낼 때 주소지 없이 보내면 문제가 생기는데 이와 마찬가지로 참조값 없이 객체를 찾아갔을 때 문제NullPointerExcepion가 생기게 된다.
  • 이름 그대로 null을 가리키다 Pointer이며 이때 발생하는 예외이다.
  • 참조값이 없는 변수에 .을 찍어 참조하려고 할 때 발생할 수 있다.
  • NullPointerExcepion이 발생하면 그 위치에서 예외를 터트리고 코드실행은 즉시 중단된다.
  • 지역변수는 null문제를 파악하는것이 어렵지 않지만 필드의 경우 좀 복잡하다.

정리 : NullPointerExcepion이 발생할 경우 참조변수에 null이 들어있으며 그 변수에 .을 찍어서 발생했다고 생각하자

정리

  • null이라는것은 애초에 참조값이 없다는 뜻에서 사용하는것으로 기본형에서는 사용할 수 없으며 참조형에서만 사용이 가능하다.
profile
가치를 제공하는 개발자

0개의 댓글