[프로그래밍] Java

[Java]Java 의 Type

JHVan 2024. 4. 8. 20:08

이건... 변순데?

프로그램이 어떻게 작동하냐를 가장 원초적으로 말하면, 변수와 변수를 조작하는 코드로 작동한다 할 수 있다. 누가 한 말은 아니고 그냥 내가 그렇게 생각한다. 어쨌든 오늘은 Java 의 타입을 알아보자. 

 

변수

사람 기준의 변수는 '변하는 수' 지만, 컴퓨터 입장에선 '데이터를 담기 위해 할당한 메모리' 라고 할 수 있다.

이 둘의 가장 큰 차이는 데이터가 들어가기 전에 메모리를 할당해야 한다는 건데, 들어갈 데이터에 비해 메모리를 너무 크게 잡으면 매우 많은 작은 데이터를 담을 시 메모리 효율이 떨어지고,  메모리를 너무 작게 잡으면 데이터를 담지 못하게 된다.

특히 후자는 런타임 에러를 발생시키거나 할당한 메모리로 표현할 수 있는 한계를 넘어 발생한 오버플로우/언더플로우 에서 비롯된 상상도 못한 에러를 야기할 수 있다.

 

오버워치 지구평평설 부인 "1점 밑은 다시 5000점"

 

평점 1점에서 패배해 한 번에 5천점 달성? '실력 점수 1위' 오류 발생

경쟁전 실력 점수 1점인 유저가 패배를 했더니 실력 점수 5000점을 달성해버리는 사건이 발생해 화제가 되고 있다. 이슈의 주인공은 북미 서버에서 활동하는 IzA라는 이름의 한국인 유저로, 경쟁

www.inven.co.kr

 

Java 의 타입

java가 채용한 타입들은 크게 두 분류로 나눈다. 기본형(primitive) 타입과 참조형(reference) 타입.

  • 기본형은 값 자체를 스택(Stack) 영역에 직접 저장 하는 타입이고
  • 참조형은 주로 큰 값들을 힙(Heap) 영역에 저장해두고, 스택 영역 저장해둔 힙 영역의 주소 를 저장하는 타입이다.

기본형

스택 영역에 값을 직접 저장하는것 말고도 기본형 타입의 특징이 더 있는데,

  • 첫 글자를 소문자로 정의함(참조형은 대문자)
  • 기본값이 있고, 따라서 null 값을 가질 수 없음
  • 선언과 동시에 타입에 따른 일정한 크기의 메모리를 할당함

Java 의 기본형 타입

 

선언법

기본형  타입의 선언법은 비교적 간단하다.

기본형 타입의 변수 선언법

타입, 변수명, 대입연산자, (초기)값 순으로 선언하면 된다.

 

참조형

반면 참조형 타입은 Java에서 객체의 메모리 주소를 참조하여 사용하는 타입이다. 무슨 소린가 하면 스택에 값을 직접 저장하는 기본형 타입과 달리 데이터가 직접 저장되는 것이 아니라, 데이터가 저장된 힙(Heap) 영역의 주소가 저장되는 방식이란 뜻이다. 이런 번거로운 방법을 사용하는 이유는 기본적으로 참조형은 숫자 하나, 철자 하나같은 작은 데이터를 저장하는 기본형에 비해 array, String, Map 같은 훨씬 큰 데이터 집합을 담기 때문이다.

참조형 타입의 다른 특징이라 하면

  • 첫 글자가 대문자로 시작함: 참조형 타입에서는 대문자로 시작함
  • 기본값이 null: 참조형 타입의 변수는 기본적으로 null 값을 가질 수 있고, 이는 해당 변수가 어떠한 객체의 주소도                                참조하지 않다는 뜻임.
  • 가변성: 대부분의 참조형 타입은 특정 명령어를 통해 내부 상태를 변경할 수 있다. 예를 들어, ArrayList의 경우,                         .add() , .remove() 등의 명령어로 데이터를 추가하거나 삭제할 수 있다는 뜻임.

선언법

참형  타입의 변수 선언법은 비교적 복하다.

참조형 타입의 선언법

기본형과 선언 순서는 비슷한데, 기본적으로 Collection 타입의 이름이 길고, new~ 하는 부분이 있어서 훨씬 길고 복잡하다.

'new' 키워드는 Java에서 새로운 객체를 생성한다는 뜻이다.

new 다음에 오는 부분은 생성자(Constructor)라고 부르며, 이 생성자는 해당 클래스의 인스턴스를 생성하고 초기화하는 역할을 한다.
따라서 위의 new ArrayList<Object>();라는 코드를 보면,  ArrayList<Object> 타입의 새로운 객체를 생성하고, 이를 entities라는 변수에 할당하라는 명령어다. 이렇게 함으로써, entities는 이제 ArrayList<Object> 타입의 객체를 참조하게 되며, 이 리스트에 객체를 추가하거나 제거하는 등의 작업을 수행할 수 있게 된다.

요컨대, new는 새로운 객체를 생성하고 초기화 해라 라는 명령어다. 이를 통해 우리는 필요한 데이터 구조와 객체를 생성하고 사용할 수 있다.

'[프로그래밍] Java' 카테고리의 다른 글

[Java]Java ? ja, va!  (0) 2024.03.27