[Java] 기본형vs참조형

2024. 11. 15. 19:57·Java/OOP

 

기본형 vs참조형

 

 

자바는 데이터 타입을 크게 기본형과 참조형으로 분류할 수 있다.

 

 

  • 기본형(Primitive Type): int, long, double, boolean처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형이라고 한다.
  • 참조형(Reference Type): Car c, Account user, Student[] students와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라고 한다. 참조형은 객체 또는 배열에서 사용된다.

 

 

다시 말해, 기본형은 변수에 사용할 값(숫자, true, false 등)을 직접 넣을 수 있는 타입을 기본형이라 하고 데이터에 접근하기 위한 주소를 가지고 있는 타입을 참조형이라 한다.

 

참조형 변수는 데이터 값에 바로 접근하는 게 아니고 값이 존재하는 참조값(주소)의 위치로 이동한다.

 

 

 

배열은 []을 통해 메모리 상 생성된 배열에 접근한다.

객체는 .을 통해 메모리 상 생성된 인스턴스(객체)에 접근한다.

 

 

 

 

 

int a = 5, b = 5;
int sum = a+b;

Account ac1 = new Account();
Account ac2 = new Account();

System.out.println(ac1+ac2);

 

  a, b는 기본형 ac1, ac2는 참조형이다.

  기본형은 실제 값을 저장하고 있어 사칙연산을 통해 바로 연산이 가능하다.

  참조형은 객체주소(참조값)를 저장하고 있어 연산 기능을 수행할 시 에러가 발생한다.

 

 

 

System.out.println(ac1.money+ac2.money);

 

  참조형 객체는 . 을 통해 객체에 접근 후 실제 값에 접근해 연산 기능을 수행한다.

 

 

 

 

 


 

 

 

 

 

결론

  기본형을 제외한 나머지는 모두 참조형이다.

  기본형은 키워드가 소문자로 시작한다.

  참조형은 (객체, 배열)이 대표적이다.

 

 

참고

  String은 사실 클래스이다. String은 기본형처럼 실제 값을 바로 대입할 수 있게 Java에서 편의 기능을 지원해 주는 것이다.

  String은 참조형이다.

 

 

 

 

 

 


 

 

참조형 값 복사

 

  자바는 대입 연산은 값을 복사해서 대입하는 것이다.

  참조변수의 복사는 참조값(객체주소)를 복사해서 값을 넣는 것이다.

 

 

 

 

 예시 코드를 보자.

 

public class Computer {
	int modelNumber;
    
    public static void main(String[] args) {
        Computer com1 = new Computer();
        Computer com2 = com1;

        System.out.println("##참조값 비교##");
        System.out.println(com1);
        System.out.println(com2);

        com1.modelNumber = 578;
        System.out.println(com1.modelNumber);
        System.out.println(com2.modelNumber);

        com2.modelNumber = 77777;
        System.out.println(com1.modelNumber);
        System.out.println(com2.modelNumber);
    }
}

 

 

 

 

 

 

 

 

  com1과 com2는 같은 인스턴스의 객체주소(참조값)를 저장하고 있어서 두 변수는 같은 객체를 가리키는 것이다.

  두 변수 중 아무나 modelNumber 멤버 변수(필드)의 값을 수정하면 객체에 있는 modelNumber가 수정된다.

  두 변수는 같은 객체를 참조하고 있으므로 수정된 값이 동일한 것이다. 같은 객체 주소이기 때문.

 

  겉으로 봤을 때는 다른 변수처럼 보여도 같은 변수라고 볼 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

절차 지향 프로그래밍VS객체 지향 프로그래밍  (1) 2024.11.20
[Java] Argument로 참조값을 보내면?  (0) 2024.11.16
[Java] 객체 배열  (0) 2024.11.13
[Java] 객체 사용 방법 (OOP)  (0) 2024.11.11
[Java] 객체와 class_OOP  (2) 2024.11.10
'Java/OOP' 카테고리의 다른 글
  • 절차 지향 프로그래밍VS객체 지향 프로그래밍
  • [Java] Argument로 참조값을 보내면?
  • [Java] 객체 배열
  • [Java] 객체 사용 방법 (OOP)
oneH
oneH
  • oneH
    Hello WeonHyeok!
    oneH
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • CSS (1)
      • Javascript (5)
        • JS자료구조,알고리즘 (1)
      • Java (22)
        • OOP (9)
      • JSP (1)
      • Computer Network (2)
      • 이론 컴퓨터 (2)
      • Project (0)
      • Algorithm&Data Structure (12)
      • 데이터베이스 (3)
      • Spring,SpringBoot (1)
      • Git & GitHub (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    object
    OSI7계층
    덱
    링크드 리스트
    JS
    티스토리챌린지
    폰노이만 아키텍쳐
    오블완
    스택
    큐
    Java
    SQL
    MySQL
    Git
    선형 큐
    JavaScript
    Stack
    Algorithm
    OOP
    컴파일
    컴퓨터 네트워크
    이진검색
    math
    Selector
    프로토콜
    선택자
    combinators
    컴퓨터구조
    자바
    컴퓨터네트워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
oneH
[Java] 기본형vs참조형
상단으로

티스토리툴바