본문 바로가기
프로그래밍/Java

[실전 자바-기본편] 기본형과 참조형

by Dean30 2024. 2. 3.
728x90

기본형 vs 참조형

 

기본형 vs 참조형

  • 자바에서 참조형을 제대로 이해하는 것이 정말 중요
  • 변수의 데이터 타입을 크게 기본형과 참조형으로 분류 가능
    • 기본형: 사용하는 값을 변수에 직접 넣을 수 있음 (int, long, double, boolean)
    • 참조형:  객체가 저장된 메모리의 위치를 가리키는 참조값을 넣을 수 있는 참조형 (객체, 배열. Student student1)
  • Data dataB = dataA 와 같이 복사하면 같은 인스턴스를 가리키기 때문에 dataA.value의 값을 바꾸면 dataB.value도 바뀜
  • 메서드의 파라미터도 결국 변수. 그러므로 호출부에서 인자가 넘어올 때 값이 복사됨
    • 기본형 메서드 호출: 전달받은 파라미터를 메서드 내에서 값을 바꿔도 외부에 영향을 주지 않음
    • 참조형 메서드 호출: 객체, 클래스처럼 참조가 인자로 전달된다면 참조 값을 복사함 -> 같은 인스턴스를 가리키고 값을 바꿈
    •  

 

 

변수와 초기화

  • 멤버 변수: 자동 초기화
    • 인스턴스의 멤버 변수는 인스턴스를 생성할 때 자동으로 초기화 됨
    • int = 0, boolean = false, 참조형 = null (null 값은 참조할 대상이 없다는 뜻으로 사용)
    • 개발자가 초기값을 직접 지정할 수 있음
  • 지역 변수: 수동 초기화
    • 지역 변수는 항상 직접 초기화 해야함

참고로 자바는 타입을 가지는 정적타입 언어지만, 자바스크립트는 동적타입 언어기 때문에 멤버 변수가 초기화되지 않겠군

 

null

  • null은 변수에 아직 가리키는 객체가 없다는 뜻
  • 참조를 더 이상 하는 곳이 없으면 JVM의 GC가 자동으로 메모리에서 제거해 준다.
    • 함수 내 지역 변수들은 함수가 끝나면 GC에 의해 제거됨
    • GC도 최적화가 잘 되어 있음

 

 

NullPointerException

  • 참조값 없이 객체를 찾을 때 발생
    • 개발자들을 가장 많이 괴롭힘
  • 객체를 생성한 경우 참조형 멤버 변수는 null로 초기화 됨
    • 호출부에서 data.value와 같이 참조할 경우 nullPointerException 발생
    • null 값에 .(dot)을 찍었다고 생각

 

 

Tip

  • 대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.
  • 자기 package에 있는 클래스는 import를 따로 하지 않는다.
728x90

댓글