[정리] Java의 데이터 유형에 대해 알아보자

Wook _·2023년 9월 11일
0

정리

목록 보기
7/13

오늘의 이야기! Java Data Type!

그러하다. 고로 바로 주제에 대해 알아보자.

우리가 애용하는 Java.

이 친구를 사용하려면 어떤 데이터 형태를 가지고 있는지를 알면 쓸데없이 공간 낭비도 피할 수 있고, 내가 쓰고자 한 데이터 유형에 대해서도 알맞게 사용할 수 있다.

각설하고 Java는 데이터 유형이 어떻게 나누어져 있는지 크게 한번 살펴보자.

  • Java Data Type
    • Primitive Type
      • Boolean Type
      • Numeric Type
        • Integral Type
          • Integer Type(short, int, long)
          • Floating Point Type(flaot, double)
        • Character Type(char)
    • Reference Type
      • Class Type
        • String Type
        • Wrapper Class
      • Interface Type
      • Array Type
      • Enum Type

참 많다!

하지만, 하나하나 알아보면 그렇게 많다는 생각이 들지 않을 것이니 천천히 알아봐보자.


Primitive Type(기본 자료형)

기본형은 다음과 같은 특징이 있다.

  • 기본 자료형은 반드시 사용하기 전에 선언이 되어야 한다.
  • OS에 따라 자료형의 길이가 변하지 않는다.
  • 객체가 아니기 때문에 null을 가질 수 없다.

자바의 기본 자료형의 크기와 범위는 다음과 같다.

타입설명크기범위
char유니코드 문자데이터16 bit‘\u0000’ ~ ‘\uFFFF’
boolean참/거짓8 bittrue or false
byte부호를 가진 8비트 정수8 bit-128 ~ +127
int부호를 가진 32비트 정수32 bit-2,147,483,638~+2,147,483,647
long부호를 가진 64비트 정수64 bit-9223372036854775808~+9223372036854775807
float부호를 가진 32비트 부동 소수점32 bit-3.402932347e+38~+3.40292347e+38
double부호를 가진 64비트 부동 소수점64 bit-179769313486231570e+308~1.79769313486231570e+08

BigInteger

long 타입을 사용할때, 가장 큰 값은 9223372036854775807이다.

이보다 더 큰 숫자가 필요하다면 BigInteger를 사용해야 한다.

BigInteger는 일반적인 오퍼레이션 연산자는 사용할 수 없고(+, -, *, /),
.add(), .subtrack(), multiply(), .divide() 메소드가 제공이 되고, 메개변수 또한 BigInteger를 받는다.


Reference Type(참조형)

참조형은 기본형 8종류를 제외한 모든 데이터 유형이며, 기본적으로 java.lang.object를 상속받는다.

참조 유형의 변수는 데이터를 그대로 저장하지 않고 데이터를 저장하는 메모리의 주소만 저장한다.

즉, 참조형의 변수는 데이터를 다른 영역에 저장하고 그 주소만을 이용한다.

public class Test{
	private static class TestObject{
    	private int num;
    }
    
	public class void main(){
    	TestObject a = new TestObject(10);
        TestObject b = new TestObject(20);
        a = b;
        
        System.out.println(a.num);
    }
}

출력결과

20

객체 a가 객체 b의 값이 아닌 객체의 주소를 갖기 때문에 출력이 다음과 같이 발생했다.

다른 참조형 데이터 타입을 봐보자.

String Type

String Type은 참조형에 속하지만 마치 Primitive Type처럼 사용한다. 그리고 불변(Immutable) 객체이다.

String 클래스에는 값을 변경해주는 메소드들이 존재하지만, 해당 메소드를 통해 데이터를 변결한다면 새로운 String 클래스 객체를 만들어내는 것이다.

일반적으로 기본형 비교는 == 연산자를 사용하지만, String 객체간 비교는 .equals() 메소드를 사용해야 한다.

Wrapper Class(래퍼 클래스)

Primitive Class는 객체가 아니기 때문에 null을 넣을 수 없다.

하지만 Wrapper Class를 사용하면 null을 넣을 수 있다.
이는 Wrapper Class가 기본형을 클래스로 감싼 형태의 객체이기 때문이다.

기본형래퍼 클래스
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charChar
booleanBoolean

Interface Type

interface TestInterface<T>{
	void add(T value);
}

인터페이스를 만들게 되면 새로운 Reference Type을 만드는 것과 같다. 그리고 인터페이스도 자료형이기 때문에 자료형으로써 자신을 구현한 객체의 주소를 가질 수 있다.

다만, 인터페이스에 정의된 메소드만 사용할 수 있게 된다.

Array Type(배열형)

배열형은 기본형으로도 만들 수 있고, 참조형으로도 만들 수 있다.

int[] num = new int[3];
Integer[] num = new Integer[3];

자료형에 대해 []를 선언하여 배열을 지정할 수 있으며 배열형 변수 또한 배열의 주소를 가지고 있기 때문에 Class Type의 특징과 동일하다.

그래서 같은 객체의 주소를 참조하게 되면 동일한 배열을 가리키게 된다.

Enum Type(열거형)

enum(열거형)이란, 복수의 정수를 한번에 다루기 위한 데이터 타입이다.

enum Weekday{
	Sunday,
	Monday,
    Tuesday,
    Wednesday,
    Tursday,
    Friday,
    Saturday
}

열거형의 선언에는 enum 키워드를 사용한다.
enum 블록 아래에 이름(열거 상수)을 쉼표로 구분하여 나열한다.

상수와 같이 다루므로 이름은 언더스코어(_) 형식(모두 대문자, 단어의 단락은 언더스코어)로 정하는 것이 일반적이다.

열거형은 암묵적으로 Enum 클래스(java.lang 패키지)를 상속한 클래스의 일종이다.

그리고 열거 상수를 참조한 "Weekday.Sunday"는 Enum 객체이다.

Enum 객체에서는 다음과 같은 메서드를 사용할 수 있다.

메서드개요
String name()열거 상수의 이름을 반환
int ordinal()열거 상수의 순서를 반환(0 시작)
`toString()열거 상수의 이름을 반환
E[] values()열거형에 포함되는 모든 열거 정수를 반환

예를 들어, 다음 예제는 Weekday 열거형에 정의된 열거 상수의 이름을 나열한다.

for(Weekday w : Weekday.values()){
	System.out.println(w.name());
}

열거형도 클래스의 일종이기 때문에, 생성자나 필드/메소드를 정의하는 것도 가능하다.

public enum Weekday {
    Sunday("sun"),
    Monday("mon"),
    Tuesday("tue"),
    Wednesday("wed"),
    Thursday("thu"),
    Friday("fri"),
    Saturday("sat");

    // 필드
    private String name;

    // 생성자
    private WeekdayEnum(String name) {
        this.name = name;
    }

    // 메서드
    @Override
    public String toString() {
        return this.name;
    }
}

열거값에 그 자신의 식별자와는 별도로 (예를 들어) 표시를 위한 값을 갖게 하고 싶은 경우에는 이 예제와 같이 필드(속성)를 선언한다.

이 예제에서는 요일의 단축 이름을 name 필드에 갖는다.

필드는 일반적인 클래스와 같이 생성자로 초기화할 수 있다. 구문은 기본적으로 클래스와 동일하지만,

접근 제한자는 private 고정이 되는 점에 주의해야한다.(따라서, 샘플의 코드에도 private를 생략해도 의미는 같다).

생성자를 정의한 후에는 열거 상수도 이에 따라 열거 상수(인수, ...) 형식으로 선언해야 한다. 열거 정의 마지막에는 ";" 세미콜론을 넣는다.

마지막으로 메소드의 정의이다. 여기서는 name 필드의 값을 검색할 수 있도록 toString 메서드를 정의한다. 구문은 클래스와 동일하다.

이것으로 정의한 열거형은 아래와 같이 이용할 수 있다.

System.out.println(WeekdayEnum.Monday.toString());  // 결과 : mon

이상으로 Java의 Data Type에 대해 알아보았다.

위에 나와있는 내용들을 충분히 익힌다면, Java를 더욱 유용하게 사용할 수 있을것이다.

끝!


출처

https://www.devkuma.com/docs/java/data-type/

profile
책상 위에 있는 춘식이 피규어가 귀엽다.

0개의 댓글