Post

TIL- Long과 long 차이점

2024-06-18

오늘의 학습 🌠


1


Long과 long 차이점


  • long은 기본 데이터 유형으로 정수형 숫자를 표현하는 데 사용되고 매우 큰 범위의 정수를 다룰 때 유리합니다. 하지만 소수점 이하의 숫자를 다루는 데는 적합하지 않습니다.
1
long num = 1234567890L;
  • 다음과 같이 num이라는 이름의 변수를 long으로 선언하고 1234567890L로 값을 할당했습니다. 숫자 뒤에 대문자 L을 붙여 사용해야 합니다.

  • Long은 long의 래퍼 클래스로 정수형 숫자를 표현하는 데 사용되고 ‘null’ 값을 가질 수 있습니다.

1
Long num = 9876543210L;
  • 다음과 같이 num이라는 변수를 Long으로 선언하고 9876543210L로 값을 할당했습니다. 숫자 뒤에 대문자 L을 붙여 사용해야 합니다.

  • 💥 Long과 long 차이점

    • long은 원시 타입, Long은 참조 타입입니다.

    • 원시 타입은 정수, 실수, 문자, 논리 리터럴 등 실제 메모리에 데이터 값을 직접 저장하는 타입으로서
      boolean, char, byte, short, int, long, float, double를 말합니다.

    • 참조 타입은 객체의 주소를 저장하는 타입으로 메모리 주소 값을 통해 객체를 참조하는 타입으로서 원시 타입을 제외한 문자열, 배열, enum, 클래스, 인터페이스를 말합니다.

    • 원시 타입은 null로 지정이 불가능하지만 참조 타입은 null 지정이 가능합니다. 하지만 원시 타입이라고 null이 필요없는 것은 아닙니다. 그래서 원시 타입을 참조 타입으로 변환하는 Boxed Primitive Type인 래퍼 클래스(Wrapper Class)를 사용하게 됩니다.

    • 래퍼 클래스도 클래스이기 때문에 참조 타입입니다.

    • 원시 타입은 직접 값을 할당한다는 점에서 참조 타입에 비해 성능이 좋고 원시 타입은 ‘Stack’ 영역에 값이 존재하고, 참조 타입의 경우 ‘Stack’ 영역에는 참조 주소 정보만 있고 실제 데이터는 ‘Heap’ 영역에 존재합니다. 따라서 값을 가져오는 데 원시 타입이 속도 상 빠릅니다.

    • 도메인 영역 id는 대체로 DB Table의 auto increment 값을 의미하는 경우가 많습니다. 데이터가 생성되는 시점에서 해당 값이 할당된다는 것이며, 도메인 객체의 id는 특정 시점에 존재할 수도 있고 존재하지 않을 수도 있습니다. 그렇기 때문에 long이 아닌 Long을 사용하지만 이 변수가 not null 이 보장된다면 long을 사용하는 것이 더 좋습니다.

    • 쉽게 말해 Long을 사용하면 객체를 생성하는 시점에서 기본값이 null이기 때문에 값이 없다는 것을 잘 표현할 수 있고 long을 사용하면 기본 값이 0이 되기 때문에 id 가 없을 때를 나타낼 수 없고 해당 id 값이 not null이 보장된다면 long을 사용해도 좋다고 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Domain {
    private Long id;

    public Domain() {
        this.id = null; // 아직 id가 할당되지 않음을 의미
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Domain {
    private long id;

    public Domain() {
        this.id = 0; // 기본값이 0
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}
  • id값을 null로 설정하는 이유
    • 새로운 객체를 생성할 때 이 객체는 아직 데이터베이스에 저장되지 않았기 때문에 id 값이 존재하지 않습니다.

    • 이 상태를 명확하게 표현하기 위해 idnull로 설정할 수 있습니다. 이렇게 하면 객체가 데이터베이스에 저장되기 전까지는 id 값이 없음을 분명히 할 수 있습니다.

    • 객체가 DB에 저장되면 DB는 자동으로 id 값을 생성하고 할당합니다. (예: auto increment).

    • 저장 후에는 id 값이 데이터베이스에서 생성된 값으로 설정됩니다.
    • 데이터베이스에서 객체를 불러올 때는 항상 id 값이 존재하게 됩니다. 이 시점에서는 idnull일 가능성이 없습니다.

    • Long: 초기값이 null입니다.
      • 객체가 아직 데이터베이스에 저장되지 않은 상태를 명확히 표현합니다.

      • 예를 들어, 새로운 도메인 객체를 생성했지만 아직 데이터베이스에 저장되지 않았다는 것을 null을 통해 쉽게 알 수 있습니다.

    • long: 초기값이 0입니다.
      • id0인 상태와 아직 할당되지 않은 상태를 구분하기 어렵습니다.

      • 0은 실제 유효한 id 값이 될 수 없으므로, 혼란을 초래할 수 있습니다.

🐱‍🏍— —🤸🏻‍♀️ ~~~ 야~호~

This post is licensed under CC BY 4.0 by the author.