| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Blazor WebAssembly
- java란?
- C#이론
- java란 무엇인가
- spring spring boot 차이점 공통점
- C# CS
- 프론트엔드
- Prosys Opc-ua 다운로드
- 스프링부트회원가입
- Service Worker
- OPC-UA
- jvm구성요소
- C# Blazor
- nosql
- CS
- 스프링부트 단점
- 기술면접
- OPC-UA Download
- opc-ua 다운로드
- UaExpert다운로드
- UaExpert download
- cs기술면접
- 스프링부트로그인
- Blazor Web App
- prosys opc-ua
- 스프링 스프링부트 차이점 공통점
- 스프링부트 장점
- 스프링부트의 장단점
- REST API
- 컴퓨터과학
- Today
- Total
담비의 개발블로그
[CS] 원시타입 참조타입 본문
원시 타입 (Primitive Type)
원시 타입은 정수, 실수, 문자, 논리값 등 실제 데이터 값을 저장하는 가장 기본적인 데이터 타입이다.
◆ 주요 특징
▶ 값 저장 방식: 변수 선언 시 확보된 메모리 공간(주로 스택(Stack) 메모리 영역)에 실제 값 자체가 저장다.
▶ 크기: 각 타입별로 메모리 크기가 고정되어 있다. (예: int는 4바이트).
▶ NULL 허용 불가능: null 값을 가질 수 없습니다. (값을 저장하는 공간이므로). 만약 초기화하지 않으면 각 타입의 기본값(0, false 등)이 할당된다.
▶ 성능/효율성: 실제 값에 직접 접근하므로 참조 타입에 비해 접근 속도가 빠르며 메모리 사용량이 효율적이다.
▶ 종류 (자바 기준)
- 정수: byte, short, int, long
- 실수: float, double
- 문자: char
- 논리: boolean
◆ 값의 복사 (할당) 예시
원시 타입 변수를 다른 변수에 할당할 때, 값이 복사되어 전달된다. 따라서 두 변수는 완전히 독립적이다.
int a = 10;
int b = a; // b에 a의 값 10이 복사됨
a = 20; // a의 값만 변경
System.out.println(b); // 결과: 10 (b는 그대로)
참조 타입 (Reference Type)
참조 타입은 객체(Object)의 주소(Reference)를 저장하는 타입이다. 실제 데이터는 별도의 메모리 공간에 저장되고, 변수는 그 데이터가 위치한 곳을 가리킨다.
◆ 주요 특징
▶ 값 저장 방식: 변수 자체(스택 메모리)에는 객체의 실제 값이 아닌, 객체가 저장된 메모리 공간(주로 힙(Heap) 메모리 영역)의 주소(참조값)가 저장된다.
▶ 크기: 객체의 크기가 동적으로 변하기 때문에 미리 정해져 있지 않는다. 변수 자체의 크기는 주소(참조값)를 저장하는 데 필요한 크기이다.
▶ NULL 허용: 객체를 참조하지 않는다는 의미로 null 값을 가질 수 있다. 이 때문에 NullPointerException이 발생할 수 있다.
▶ 성능/효율성: 실제 값을 얻으려면 참조 주소를 따라가야 하므로 원시 타입에 비해 접근 속도가 느릴 수 있고 메모리 사용량이 상대적으로 클 수 있다.
◆ 종류 (자바 기준): 원시 타입 8개를 제외한 모든 타입
- 클래스: String, Integer (래퍼 클래스), 사용자 정의 클래스 등
- 인터페이스
- 배열
- 열거(Enum)
◆ 참조의 복사 (할당) 예시
참조 타입 변수를 다른 변수에 할당할 때, 주소(참조값)가 복사되어 전달된다. 따라서 두 변수는 같은 객체를 가리키게 된다. 한 변수를 통해 객체의 내용을 변경하면, 다른 변수에도 영향을 미친다.
// 자바에서 배열은 참조 타입
int[] arr1 = {1, 2};
int[] arr2 = arr1; // arr2에 arr1의 주소가 복사됨 (같은 객체 참조)
arr1[0] = 99; // arr1을 통해 객체 내부 값 변경
System.out.println(arr2[0]); // 결과: 99 (arr2도 변경된 객체를 참조)
원시타입과 참조타입의 차이점
| 항목 | 원시타입(Primitive Type) | 참조타입(Reference Type) |
| 저장 값 | 실제 데이터 값 | 객체의 메모리 주소(참조값) |
| 저장 위치 | 스택(Stack) 메모리 | 객체는 힙(Heap) 메모리, 변수는 스택에 주소 저장 |
| NULL 허용 | 불가능 (기본값 존재) | 가능 (null은 객체를 참조하지 않음을 의미) |
| 데이터 크기 | 고정 크기 | 가변 크기 (객체 구조에 따라 다름) |
| 할당/복사 시 | 값 복사 (서로 독립적) | 참조(주소) 복사 (같은 객체를 공유) |
| 성능 | 빠름 (직접 접근) | 느릴 수 있음 (주소를 찾아가야 함) |
| 제네릭 사용 | 불가능 (예: List<int>) | 가능 (예: List<Integer>) |
◆ 래퍼 클래스와 오토 박싱/언박싱
- 자바에서는 원시 타입(int, char 등)에 대응하는 참조 타입(Integer, Character 등)인 래퍼 클래스(Wrapper Class)를 제공한다. 이는 참조 타입만 사용할 수 있는 컬렉션(List, Map 등)이나 제네릭에서 원시 타입을 객체처럼 다룰 수 있게 해준다.
▶ 오토 박싱 (Auto-Boxing): 원시 타입을 자동으로 래퍼 클래스 객체로 변환 (int => Integer).
▶ 오토 언박싱 (Auto-Unboxing): 래퍼 클래스 객체를 자동으로 원시 타입으로 변환 (Integer => int).
'CS(컴퓨터과학)' 카테고리의 다른 글
| 자바(Java)란 무엇인가? (0) | 2025.11.27 |
|---|---|
| [CS] 자바 메모리 영역&데이터 저장 방식(스택, 힙) (0) | 2025.10.21 |
| [CS]Node.js는 싱글스레드인데 비동기 처리 하는 원리 (2) | 2025.07.06 |
| rest api의 정의 (0) | 2025.03.27 |
| [CS]TCP(Transmission Control Protocol)/UDP(User Datagram Protocol) (0) | 2025.01.11 |