[Data Structure / Java] ✒️ 컴퓨터가 데이터를 다루는 방법

2022. 8. 3. 22:56·Algorithm & Data Structure/study
728x90


Java는 데이터를 어떻게 표현하는가

 

Java는 크게 두 가지 Data Type을 사용한다.

 

  • Primitive
  • Reference (Object)

 

Primitive Type와 Reference Type이 어떻게 다른지를 이해하기 위해서는 
이 타입들이 컴퓨터 메모리에서 어떻게 존재하는지를 이해해야 한다. 


Primitive Type은 ?

 

int i = 42;
float pi = 3.14;
boolean b = true;

i 라는 int 변수 하나가 만들어져 있다. 이 변수는 메모리 상 어딘가에 42라는 값이 저장이 된다.

우리는 i라는 변수를 사용하면 메모리에서 42라는 값을 꺼내와서 사용할 수 있다. 

pi 라는 float 변수와 b 라는 boolean 변수도 동일하게 pi 나 b 라는 변수를 사용하여 메모리 상의 어딘가에 존재하고 있는 값 3.14, true를 꺼내와 사용한다.  

 


Reference Type은 ?

 

String s = "Hello";

Reference Type의 변수 s 안에 "Hello"라고 하는 문자열을 넣었다. 

s 변수는 메모리 상의 어느 곳을 지칭하게 되고 지칭한 주소에는 "Hello" 문자열이 들어 있는 것이 아니라 "Hello" 문자열이 있는 곳의 Reference 주소를 가지고 있다. 

메모리 위치에 실제 값이 들어 있는 것이 아니라 변수가 가리키는 메모리 위치에 Reference 주소만 담겨 있고 그 주소가 가리키고 있는 실제 메모리의 위치에 접근해봐야 데이터가 담겨있다. 

 

Ex)

A a = new A(); // 1
a = new A();   // 2
A b = a;       // 3

// 1

먼저 A라는 클래스를 생성했다. 변수 a라는 곳에 A 클래스를 담았다.

변수 a는 메모리 상의 어딘가를 가리키게 되고 그곳에는 Reference 주소가 담긴다. 

여기서 Reference 주소는 A 오브젝트가 있는 그 주소를 레퍼런싱 하고 있다. 

// 2

다음으로 같은 변수 a 를 만들어서 새로운 인스턴스 A를 만들어 덮어 씌었다. 그렇다면 새로운 A 인스턴스가 메모리 상 어딘가에 생겨나게 되고 Reference 주소는 새로 생겨난 인스턴스를 가리키게 된다. 

// 3

변수 b 를 만들어서 변수 a를 대입한다. 이렇게 되면 변수 a에 담겨있는 Reference 주소를 변수 b도 갖게 되어 변수 a와 변수 b는 동일한 인스턴스를 가리키게 된다. 즉, b와 a는 같은 오브젝트를 가리키고 있기 때문에 두 변수 중에서 어떤 변수를 사용하여 A오브젝트를 조작하건 똑같은 결과를 나타낼 수 있다. 

 

Ex)

String s = "A"; // 1
s += "B";       // 2
s += "C";       // 3

String 변수는 immutable 하다.

즉, Java 에서 String은 한 번 만들어지면 변경되지 않는다. 

 

// 1

s 변수에 "A"를 담아 변수를 생성한다.

// 2

기존 s 변수에 "B"를 더하는 것이 아니라 "A"를 버리고 새로운 "AB"를 만들어낸다.

// 3

동일하게 변수 s는 "A", "AB"를 버리고 새로운 "ABC" 만들어 가리킨다.

 

 

저작자표시 (새창열림)

'Algorithm & Data Structure > study' 카테고리의 다른 글

[Data Structure / Java] ✒️ Stack, Queue  (0) 2022.08.15
[Data Structure / Java] ✒️ Map  (2) 2022.08.12
[Data Structure / Java] ✒️ ArrayList와 LinkedList의 차이  (0) 2022.08.08
[Data Structure / Java] ✒️ 시간 복잡도  (0) 2022.08.04
[Data Structure / Java] ✒️ Call By Value / Call By Reference  (1) 2022.08.04
'Algorithm & Data Structure/study' 카테고리의 다른 글
  • [Data Structure / Java] ✒️ Map
  • [Data Structure / Java] ✒️ ArrayList와 LinkedList의 차이
  • [Data Structure / Java] ✒️ 시간 복잡도
  • [Data Structure / Java] ✒️ Call By Value / Call By Reference
ro117youshin
ro117youshin
코딩 / 외국어공부 (영어, 중국어) / 독서 등 자기계발을 기록합니다.
  • ro117youshin
    Taking an extra step
    ro117youshin
  • 전체
    오늘
    어제
    • 분류 전체보기 (153)
      • DDD (5)
      • JAVA (13)
      • Spring Boot (2)
      • Spring (4)
      • MySQL (1)
      • C (1)
      • Algorithm & Data Structure (34)
        • study (15)
        • programmers (0)
        • boj (18)
        • assignments (1)
      • CS: Computer Science (6)
        • CS50 2019 (4)
        • Network (2)
        • Database (0)
      • Git (3)
      • foreign language (16)
        • English (0)
        • Chinese (16)
      • BOOK (2)
      • ETC (2)
      • youtube.com|user|egoing2 (64)
        • WEB1 - HTML & Internet (5)
        • WEB2 - CSS (9)
        • WEB2 - JavaScript (18)
        • JavaScript Immutability (0)
        • DATABASE1 (4)
        • DATABASE2 MySQL (12)
        • JAVA1 (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DATABASE2
    객체
    코딩공부
    JAVA1
    백준
    나의 앱 만들기
    css
    BOJ
    variable
    중국어공부
    HSK6급공부
    HSK6급필수어휘
    HSK6급
    Java자료구조
    자바
    Java
    최범균
    baekjoon
    HSK6급모의고사
    도메인 주도 설계
    Domain Driven Design
    조건문
    알고리즘문제
    ddd
    개발공부
    HTML
    생활코딩
    mysql
    js
    javascript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
ro117youshin
[Data Structure / Java] ✒️ 컴퓨터가 데이터를 다루는 방법
상단으로

티스토리툴바