[Java] 기본형 vs 참조형

2022. 1. 7. 15:58·TIL/Java
728x90
반응형

기본형(Primitive Type) : 변수가 값 자체를 보관

int, boolean, char, double 등

 

참조형(Reference Type) : 변수는 값이 보관되어 있는 영역을 가리킴(실제 값은 메모리 어딘가에 저장되어있고 변수는 그 메모리를 가리키는 역할)

Person, String, int[] 등 클래스 기반 자료형(배열을 포함한 객체 모두)

 

기본형 (Primitive Type)

기본형의 경우에는 변수가 값 자체를 보관

int a = 3;
int b = a;

System.out.println(a);  // 3 출력
System.out.println(b);  // 3 출력

a = 4;
System.out.println(a);  // 4 출력
System.out.println(b);  // 3 출력

b = 7;
System.out.println(a);  // 4 출력
System.out.println(b);  // 7 출력

먼저 a에 3이 보관되고, b에는 a의 값인 3이 복사돼서 보관된다. 그 다음에 a = 4를 하면 a만 바뀌고 b는 그대로 3이다. 마찬가지로 b = 7을 하면 b만 바뀌고 a는 그대로 4이다. 

 

참조형 (Reference Type)

참조형의 경우에는 변수가 값 자체를 보관하는 게 아니라, 변수가 값을 '가리킨다'고 생각하자. 실제 값은 메모리의 어딘가에 저장되어 있고, 변수는 그 영역을 가리키는 역할이다.

 

객체

 

Person p1, p2;
p1 = new Person("박효신", 28);

p2 = p1;
p2.setName("이선희");

System.out.println(p1.getName());
System.out.println(p2.getName());
이선희
이선희

 

p1은 "박효신"이라는 이름을 가진 Person 인스턴스가 저장되어 있는 영역을 가리킨다. p2 = p1은 p2에게 같은 영역을 가리키라는 명령이다. 그 후, p2.setName("이선희")를 하면 그 영역에 있는 인스턴스의 name은 "이선희"로 바뀐다. p1, p2 모두 같은 영역을 가리키고 있으니까 두 출력 값은 모두 "이선희"로 출력된다.

 

배열

자바에서 배열도 객체이기 때문에 참조형이다.

 

int[] a = new int[3];
int[] b = a;

a[0] = 1;
b[0] = 2;

System.out.println(a[0]);
System.out.println(b[0]);
2
2

 

 

+ String은 기본형? 참조형?

 

Java의 String은 2가지 방식으로 생성이 가능하다.

 

String s1 = "hello";
String s2 = "hello";

String ss1 = new String("hello");
String ss2 = new String("hello");

 

즉, 바로 값을 넣는 방식과 new를 통한 생성자 방식이 있다.

이때, 차이점은 그냥 String s1 = "hello"라고 선언한 s1과 s2는 ==을 통해 물어보면 true라 출력하고,

String ss1 = new String("hello")라고 선언한 ss1과 ss2는 ==을 통해 물어보면 false라 출력한다.

 

        System.out.println("String Test");

        String s1 = "hello";
        String s2 = "hello";

        String ss1 = new String("hello");
        String ss2 = new String("hello");

        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
        System.out.println(ss1 == ss2);
        System.out.println(ss1.equals(ss2));

 

위의 코드를 실행해보면, 결과 값으로 아래와 같이 나온다.

 

String Test
true
true
false
true

 

String은 기본형 변수 이기도 하면서, 참조형 변수 이기도 한 것 같다. (정말 팩트로만 따진다면 사실상 기본형 변수가 아니지만 Java에서 기본형 변수처럼 사용하도록 만들어준다) 그냥 값을 넣었을 때와 new 를 이용한 생성자 생성 방법은 조금 다르기도 하니까 알아두면 좋을 것 같다.

 

 

참조형과 기본형을 구분하는 방법은 데이터의 집합 여부이다.

데이터 1개를 나타내면 기본형, 데이터를 1개 이상 즉, 묶음으로 가지면 이것들을 모두 포함해야해서 값으로 저장할 수 없고 묶음의 주소를 기억해야 해서 참조형이 되는 것이다.

여기서 데이터의 묶음이라는 점을 주의해서 보면 데이터의 묶음 입니다. 따라서 데이터를 나타내는 하나하나의 변수들 a[0], p.name 등은 기본형이다.

728x90
반응형

'TIL > Java' 카테고리의 다른 글

[Java] 기본형vs참조형 / null 퀴즈  (0) 2022.01.07
[Java] null  (0) 2022.01.07
[Java] 중간고사: 문제 해결 능력 기르기_코드잇 소개 프로그램  (0) 2022.01.07
[Java] 콘솔 입력 받기(Scanner)  (0) 2022.01.07
[Java] 중간고사: 문제 해결 능력 기르기_플로이드의 삼각형  (0) 2022.01.06
'TIL/Java' 카테고리의 다른 글
  • [Java] 기본형vs참조형 / null 퀴즈
  • [Java] null
  • [Java] 중간고사: 문제 해결 능력 기르기_코드잇 소개 프로그램
  • [Java] 콘솔 입력 받기(Scanner)
야리니
야리니
오늘보다 내일 더 성장하는 개발자가 되기 위한 야리니 블로그입니다 :)
    반응형
    250x250
  • 야리니
    야리니의 step by step
    야리니
  • 링크

    • GitHub
    • Linkedin
  • 전체
    오늘
    어제
    • 분류 전체보기 (477)
      • TIL (379)
        • Java (97)
        • Kotlin (28)
        • JPA (16)
        • Spring (37)
        • Oracle (22)
        • JDBC (7)
        • Web(HTML, CSS, JS, jQuery) (90)
        • View Template (31)
        • AWS (7)
        • HTTP (7)
        • CS (5)
        • Linux, Unix (2)
        • Python (20)
      • Trouble Shooting(Error) (37)
      • Algorithm (15)
      • Git,GitHub (8)
      • Diary (23)
      • 독서 (9)
      • Etc (6)
        • Mac (1)
        • 학원준비과정 (2)
  • 블로그 메뉴

    • 방명록
    • 태그
  • 공지사항

    • 안녕하세요 :)
  • 인기 글

  • 태그

    java기초
    HTML
    쌍용교육센터
    CSS
    국비지원학원
    oracle
    백엔드 개발자
    Kotlin
    코틀린
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
야리니
[Java] 기본형 vs 참조형
상단으로

티스토리툴바