JUST GO

[공통] 타입 본문

Java/학습내용

[공통] 타입

root_go 2022. 10. 11. 12:21

타입

  • 타입(Type)은 어떠한 값을 담을 수 있는 형태를 의미한다. 크게 두 종류로 나뉜다.
    • 기초 타입(기본 타입, 원시 타입, Primitive Type)
      • 기초 타입인 변수의 값은 메모리의 스택(Stack) 영역에 저장된다.
      • 정수 타입(Integer Type) 
        • byte : (1 Byte) -128~ 127
        • short : (2 Byte) -32,768 ~ 32,767
        • int : (4 Byte) -2,147,483,648 ~ 2,147,483,647
        • long : (8 Byte) -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
      • 논리 타입(Logical, Boolean Type)
        • boolean : (1 Byte) true 혹은 false.
      • 실수 타입(Decimal Type)
        • float : (4 Byte) ±(1.40129846432481707e-45 ~ 3.40282346638528860e+38)
          • 계산 방식에 의해 소숫점 끝자리가 누락되거나 잘못 계산되는 일이 발생할 수 있어 사용하지 않는다.
        • double : (8 Byte) ±(4.94065645841246544e-324s ~ 1.79769313486231570e+308d)
        • 문자 타입(Character Type)
          • char : (2 Bytes) 문자하나를 담기 위해 사용한다. 홑 따옴표로 감싸야 한다.
          • char familyName = '박';
          • 하나의 문자 변수에 문자를 부여하지 않거나("), 한 개를 초과하는 문자를 지정할 수 있다.
          • 쌍 따옴표를 사용하지 않도록 유의한다.
    • 배열(Array)
      • 배열은 하나의 변수에 어떠한 타입의(혹은 이를 상속받거나 구현하는 타입) 값(혹은 객체)를 여러개 받기 위해 사용한다.
      • 메모리상의 동작 방식은 참조 타입에 가깝지만, 그 자체로 타입이지는 않기 때문에 별도의 메서드나 속성(length 제외)을 가지지 않고 이에 기초 타입과도 비슷하다고 할 수 있겠음. (너무 신경 안써도 됨) 
타입[] 변수이름;

위 방식으로 선언할 수 있으며, 여기서 대괄호는 진짜 적어야 함. 가령, 정수 타입 배열은 아래와 같이 만든다.

int[] numbers;

배열의 이름은 복수형(Plural)으로 짓는 것이 일반적이며(number → numbers), 객체화시 원소를 직접 지정하거나, 그게 싫다면 배열의 길이를 지정해 주어야 한다.

int[] numbers = new int[10];

위 예는 길이가 10인 정수 배열이며, 말 그대로 정수 값을 10개 가질 수 있는 배열이다.

int[] numbers = new int[] {1, 3, 5, 7, 9};
int[] numbers = {1, 3, 5, 7, 9};

위 예는 1, 3, 5, 7, 9의 값 5개를 가지는 배열이다. 값을 직접 대입하거나, 길이를 지정할 수는 있지만 둘 다 동시에 하지는 못한다는 점에 유의한다. (위 예에서 new int[] 는 생략할 수 있다.)

  • 배열이 가지는 각 원소는 대괄호와 인덱스 번호로 접근할 수 있고 인덱스 번호는 항상 0으로 시작한다.
int[] numbers = {1, 3, 5, 7, 9};
System.out.println(numbers[2]); // 5

마찬가지로 첨자 연산자를 활용하여 그 값을 변경할 수 있다.

int[] numbers = {1, 2, 5, 7, 9};
System.out.println(numbers[1]); // 2
numbers[1] = 3;
System.out.println(numbers[1]); // 3

0보다 작거나 배열의 길이에서 1을 뺀 값을 초과하는 인덱스 번호를 배열에서 조회할 경우 IndexOutBoundsException 이 발생한다.

int[] numbers = {1, 2, 5, 7, 9};
System.out.println(numbers[5]); // IndexOutOfBoundsException
  • 배열의 길이는 이가 가지는 length 속성에 접근하여 확인할 수 있다. 또한, 해당 값에서 1을 뺀 값은 항상, 무조건 해당 배열의 마지막 요소의 인덱스 번호이다.
int[] numbers = {1, 3, 5, 7, 9};
System.out.println(numbers.length); // 5
System.out.println(numbers[numbers.length - 1]); // 9
  • 이미 그 길이가 정해진 배열에서 원소를 삭제하거나  추가할 수 없기 때문에 상당히 골치아픈 절차를 밟아야 한다. 가령, 1, 3, 5, 7, 9의 내용을 가진 배열에 11을 추가하고 싶다면 아래와 같이 한다.
int[] numbers = {1, 3, 5, 7, 9};
int[] newNumbers = new int[numbers.length + 1]; // 위 배열 보다 길이가 1 더 큰 배열을 초기화 한다.
for (int i = 0; i < numbers.length; i++) {
	newNumbers[i] = numbers[i];
} // 기존의 numbers 배열에 있는 원소들을 newNumbers 배열에 옮겨준다.
newNumbers[newNumbers.length - 1] = 11; // 마지막 원소에 11이라는 값을 지정해준다.
numbers = newNumbers;
  • 참조 타입(레퍼런스 타입, Reference Type)
    • 참조 타입인 변수의 스택(Stack) 영역에 저장되는 값은 실제 값이 아닌 실제 값을 가리키고 있는 힙(Heap) 영역의 주소값이다.
    • 참조 타입은 그 존재 자체가 클래스, 인터페이스(Interface) 혹은 열거형(Enumeration)인 것이다.
    • 그렇기 때문에 그 종류는 무한하나 자주 사용하는 타입 몇 가지만 알아 놓으면 됨.
    • 문자열(String) : 여러개의 문자(Character)를 나열할 수 있는  타입이다. 쌍따옴표로 감싼다. 제발 기초타입이 아님에 유의한다.

'Java > 학습내용' 카테고리의 다른 글

[공통] 일반 문법  (0) 2022.10.12
[공통] 연산자  (0) 2022.10.12
[공통] 변수와 상수  (0) 2022.10.11
[공통] 메서드  (0) 2022.10.11
[공통] 클래스  (0) 2022.10.11