[자바 프로그래밍] 값 타입 vs 참조 타입

2024. 7. 8. 17:07·CNU SW 아카데미/2주차
 

참조 타입은 Java와 같은 객체지향 언어에서 아주 중요한 기능이다. 이를 통해 객체의 상호작용을 기반으로 한 응용 프로그램을 작성하고, 효과적으로 실행할 수 있다.

 

Java 프로그래밍 언어에서 이미 구현되어 있는 String과 같은 여러 참조 타입을 사용하는 방법에 대해 배우며, 클래스 계층 구조와 객체 타입에 대해 학습하여 값 타입과 참조 타입이 어떻게 관련되어 있는지 알 수 있으며, 참조 타입 간에 데이터를 변환하는 방법을 배우고, Wrapper 클래스를 사용하여 값 타입을 참조 유형으로 변환하는 것을 알게 된다.

 

 

 

  • 값 타입(Value Type)
    • 데이터를 직접 포함
    • 복사된, 직접 가지는 데이터를 저장
int value;
value = 100;

 

 

  • 참조 타입(Reference Type)
    • 데이터(객체)가 있는 곳의 주소를 저장
    • 데이터는 분리된 메모리 영역에 저장
String value;
value = "Hello";

 

 

 

# 값 타입과 참조 타입의 비교

  • 값 타입에서의 비교 연산자와 참조 타입에서의 비교 연산자는 다르게 동작한다.

 

  • 값 타입은 값을 직접 비교하지만 참조 타입은 주소를 우선 비교한다.
    • '==' 연산자는 값 타입에서는 직접 값을, 참조 타입에서는 주소를 비교하게 된다.
    • eqauls()를 쓰게 되면 참조 타입의 값을 비교할 수 있게 된다.

 

 

 

# String Class

  • 여러 개의 유니코드 데이터
  • 읽기만 하고 변경할 수 없는 불변 클래스(Immutable Class)
  • 배열 형태로 접근 불가

Java의 String은 C/C++와는 다르게 클래스이다.

C/C++에서는 문자열을 처리하기 위해 char[]를 사용하지만 Java는 C#에서처럼 문자열을 처리하기 위한 String 클래스를 제공한다.

 

 

String Class는 다음과 같은 메서드를 제공한다.

  • length()
  • charAt()
  • indexOf()
  • split()
  • concat()
  • trim()
  • toUpper() 및 toLower()

 

 

# 패키지

## java.lang 패키지

  • import 없이 사용가능한 기본 패키지
    • Integer, Long, Float, Double 등의 Wrapper 클래스
    • 문자열과 관련된 String, StringBuffer, StringBuilder 클래스
    • 표준 입출력을 위한 System.in, System.out 스트림
    • Thread 관련 주요 클래스
    • 이외 다양한 클래스와 인터페이스 포함

 

java.lang 패키지는 모든 클래스의 기본 클래스가 되는 Object 클래스가 포함된 주요 패키지이며, import 문으로 사용을 명시하지 않아도 사용할 수 있다. java.lang 패키지에는 아래와 같은 클래스들이 포함되어 있다.

  • Boolean, Byte, Short, Integer, Long, Float, Double등 기본형 타입을 객체로 변환시킬 때 사용하는 Wrapper 클래스
  • String, StringBuffer, StringBuilder 클래스 등 문자열과 관련된 클래스
  • 표준 입출력을 위한 System.in, System.out 스트림
  • 수학 관련 연산을 위한 Math 클래스
  • Thread와 관련된 클래스

 

 

 

## java.util 패키지

  1. 다용도로 사용할 수 있는 유용한 클래스들이 포함되어 있는 패키지
    • Object 클래스의 보조 클래스인 Objects 클래스
    • 날짜, 시간과 관련된 클래스
    • 자료구조와 관련된 Collections Framework 관련 인터페이스와 클래스
    • 이벤트 모델과 국제화 기능
    • StringTokenizer, 난수 생성기
    • Scanner 클래스 등 다양한 클래스와 인터페이스 포함

 

java.util 패키지는 java 프로그래밍에 유용한 클래스들을 모아둔 패키지이다. 날짜, 시간과 관련된 클래스, 자료구조와 관련된 Collections Framework 관련 인터페이스와 클래스등이 포함되어 있다.

 

 

 

## java.io 패키지

  • 파일이나 통신 등 정보의 입출력을 처리하는 클래스가 포함된 패키지
    • 파일 시스템의 파일 정보를 얻기 위한 File 클래스
    • 콘솔에서 문자를 입출력하기 위한 Console 클래스
    • InputStream, OutputStream 클래스 등 바이트 단위 입출력을 위한 스트림 추상 클래스
    • FileInputStream, FileOutputStream등 바이트 단위 입출력을 위한 스트림 클래스
    • Reader, Writer등 문자 단위 입출력을 위한 스트림 추상 클래스
    • FileReader, FileWriter 등 문자 단위 입출력을 위한 하위 스트림 클래스
    • 그 외 입출력을 위한 다양한 클래스 포함

 

java.io 패키지는 파일이나 통신, 입 출력 등에 관련된 작업을 처리하는 클래스가 포함되어 있다.

 

 

 

# Type-Casting

  1. Wrapper 클래스
  2. Boxing과 Unboxing
  3. 슈퍼 클래스/서브 클래스 변환
  4. InstanceOf 연산자
  5. Object 타입 변환
  6. 인터페이스 타입 변환

 

 

 

# 객체 생성과 제거

  1. 생성자
  2. 데이터 초기화
  3. 객체와 메모리

 

 

## 생성자

  1. 객체 생성
  2. 기본 생성자
  3. 생성자 오버라이딩
  4. 생성자 오버로딩

 

### 객체 생성

  • 1단계: 메모리 할당
    • new 키워드를 사용하여 Heap 영역에 메모리 할당
  • 2단계: 생성자를 사용하여 객체 초기화
    • 클래스 이름과 괄호를 사용

 

 

Java에서 객체를 생성할 때는 다음의 두 단계를 따른다.

  1. new 키워드를 사용하여 객체 생성에 요구되는 메모리를 할당한다.
  2. 생성자를 사용하여 할당된 메모리 공간에서 객체를 초기화한다.

생성은 두 단계로 이루어지지만 실제 하나의 식에서 두 단계를 모두 실행한다.

Date 클래스인 경우 객체의 이름과 같은 메소드를 호출하여 메모리를 할당하고 메모리 공간에서 객체를 초기화한다.

 

 

 

 

 

 

 

# 상수 선언

"final"

 

 

 

 

 

# 객체와 메모리

## 객체 생명주기

  • 객체 생성
    • new 키워드를 사용하여 메모리에 객체 할당
    • 생성자를 사용하여 메모리에서 객체 초기화
  • 객체 사용
    • 메소드 호출 등
  • 객체 제거
    • 원시 메모리 회수
    • 메모리 할당 해제

 

 

 

## 객체와 범위

  • 지역 값(Local value)의 수명은 선언된 범위에 연결됨
    • 일반적으로 짧은 수명
    • 결정론적인 생성과 소멸
  • 동적 객체(Dynamic object)의 수명은 해당 범위에 연결되지 않음
    • 보다 긴 수명
    • 소멸 시기가 명확히 결정되지 않음

 

 

 

## 가비지 컬렉션

  • 객체는 명시적으로 소멸시킬 수 없음
    • Java는 객체 생성 키워드와 반대의 동작을 하는 키워드(delete 등)가 없음
    • 명시적 삭제 기능은 다른 언어에서 치명적 어류의 주요 원인이 됨
  • 가비지 컬렉션이 프로그래머를 대신하여 객체를 제거
    • 도달할 수 없는 객체를 찾아 자동으로 제거
    • 사용되지 않는 Heap 메모리로 되돌리고(메모리를 반환하고) 마무리함
    • 일반적으로 메모리가 부족할 때 가비지 컬렉션 작업을 수행

 

'CNU SW 아카데미 > 2주차' 카테고리의 다른 글

[자바 프로그래밍] 디자인 패턴 심화  (0) 2024.07.12
[자바 프로그래밍] 람다  (0) 2024.07.11
[자바 프로그래밍] 제네릭  (0) 2024.07.10
[자바 프로그래밍] 클래스  (1) 2024.07.09
'CNU SW 아카데미/2주차' 카테고리의 다른 글
  • [자바 프로그래밍] 디자인 패턴 심화
  • [자바 프로그래밍] 람다
  • [자바 프로그래밍] 제네릭
  • [자바 프로그래밍] 클래스
하가네
하가네
  • 하가네
    하 렌
    하가네
  • 전체
    오늘
    어제
    • 분류 전체보기 (93)
      • Computer Science (23)
        • 운영체제 (7)
        • 데이터통신 (6)
        • 자료구조 (4)
        • 논리회로 (0)
        • 확률 및 통계 (0)
        • 데이터베이스 (2)
        • AI소프트웨어 (3)
        • 컴퓨터네트워크 (1)
      • Language (0)
        • Java (0)
      • Framework (8)
        • Spring (8)
      • Tips (2)
        • 터미널 명령어 (1)
        • 우분투 명령어 에러 (1)
      • SSA (6)
        • Front (1)
        • Back (4)
        • DB (0)
        • 기획 (1)
      • 우아한테크코스 (0)
        • 7기 프리코스 (0)
      • CNU SW 아카데미 (42)
        • 1주차 (5)
        • 2주차 (5)
        • 3주차 (2)
        • 4주차 (1)
        • 5주차 (3)
        • 6주차 (2)
        • 7주차 (0)
        • 8주차 (1)
        • 9주차 (14)
        • 10주차 (0)
        • 11주차 (1)
        • 12주차 (0)
        • 13주차 (2)
        • 14주차 (2)
        • 15주차(최종 프로젝트) (3)
        • 최종 프로젝트 이후 (1)
      • 모각코 (6)
        • 2023 동계 (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.
하가네
[자바 프로그래밍] 값 타입 vs 참조 타입
상단으로

티스토리툴바