[Java] - 원시타입, 원시타입과 참조타입, 접근 제어자

링딩·2023년 4월 8일
0

Computer Science

목록 보기
25/49




1. 원시 타입과 참조타입?

📕 원시타입

◽정의

정수, 실수, 문자, 논리 리터럴 등 실제 데이터 값을 저장하는 타입이다.

ex)

int a = 10; 와 같이 코드를 작성했다면 정수 값이 할당될 수 있는 a라는 이름의 메모리 공간이 JVM 스택 영역에 생성되고, 10이라는 값이 들어간다.
=> 즉, 원시 타입은 메모리 공간의 실제 데이터 값이 저장되어 있다. 한다. 그리고 그 기능을 알맞은 객체로 할당한다.


+) 🔴 주의사항 (feat. char 타입의 자동 형변환)

JVM은 연산할 때 피연산자 스택을 활용한다.
1. 13 + 20 + 7 을 계산한다
-> 20 + 7계산한 결과를 스택에 집어 넣고,
2. 다시 27 + 13 을 계산한 결과를 스택에 집어 넣는 방식을 반복한다.
😥 이때 주의할 점 : JVM의 피연산자 스택은 피연산자를 4 Bytes 단위로 저장한다는 것이다.
=> 즉, char나 short와 같이 int보다 작은 자료형의 값을 계산하면 int형으로 자동 형 변환되어 연산이 수행된다.

-> long 타입 관련해서 좀 더 주의사항을 찾아보면 어떨까?




🔎 참조타입?

◽ 정의

기본 타입을 제외한 타입으로, 객체의 주소를 저장하는 타입이다. 문자열, 배열, 열거형 상수, 클래스, 인터페이스 등이 있다.

  • Java에서 실제 객체는 JVM 힙 영역에 저장되며, 참조 타입 변수는 실제 객체의 주소를 JVM 스택 영역에 저장한다.
    => 그리고 객체를 사용할 때마다 참조 변수에 저장된 객체의 주소를 불러와 사용하게 된다.

+) 예시

Person p = new Person(); 이라는 코드를 작성했다면 p라는 이름의 메모리 공간이 스택 영역에 생성되고, 생성된 p의 인스턴스는 힙 영역에 생성된다.
=> 즉, 스택 영역에 생성된 참조 변수 p는 힙 영역에 생성된 p의 인스턴스 주소 값을 가지게 된다.



3. 원시타입 vs 참조타입

1. 참조타입은 원시 타입과 비교했을 때 접근 속도가 느리다.

  • 원시타입 : 스택 영역,
  • 참조타입 : 스택 영역에 참조 값만 존재 (실제 값은 : 힙)
    => 참조타입은 못해도 2번 이상은 메모리 접근을 해야한다.
    -> 것다가 일부 타입 (Double -> double, Integer ->int)은 언박싱 과정까지 거쳐야 함.

2. 참조 타입이 사용하는 메모리 양이 압도적으로 높다. 😮

3. 원시타입과 달리 '참조타입'은 null을 담을 수 있다.

  • 원시타입 null ❌
    -> 값이 없으면 디폴트 값을 반환하기 때문이다. (ex. int은 0, boolean은 false)

4. '참조타입'만 제네릭 타입에서 사용이 가능








2. 접근 제어자

◽ 정의

멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 함

-> 생략이 가능하며 만일 그렇게 되면 default를 뜻함

◽ 사용될 수 있는 곳들

: 클래스, 멤버변수 , 메서드, 생성자


◽ 종류 및 접근 가능한 곳

  • private : 같은 클래스 내에서만 접근 가능
  • default : 같은 패키지 내에서만 접근 가능
  • protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능
  • public : 접근 제한이 전혀 없다.



◽ (정리) 대상별 접근 가능한 '접근 제어자'


🔎 '접근 제어자'와 캡슐화

  • 접근 제어자를 사용하는 이유는 클래스의 내부에 선언된 데이터를 보호하기 위해서이다.
    데이터가 유효한 값을 유지하고 중요한 데이터는 외부에서 함부로 변경하지 못하도록 하기 위해서는 외부로부터의 접근을 제한하는 것이 필요하다



출처

steady-coding님의 글을 참조하였습니다.
88240님의 글을 참조하였습니다.

profile
초짜 백엔드 개린이

0개의 댓글