본문 바로가기
TIL : JAVA

[Java] Long과 long의 차이

by 이페코장인 2024. 9. 15.

자바에서 데이터 타입을 배울 때, Long이라는 타입도 배우게 된다. 그런데 자바를 실제로 사용하다 보면, long이라는 타입도 있어서 어느 것을 사용해야 할 지 고민이 된다. 이런 비슷한 페어들이 있으니, 한 번에 정리해서 적절한 타입을 사용해 보자.

 

기본 데이터 타입 (primitive type)

long은 기본 데이터 타입이다. 이는 다음과 같은 중요한 특성을 가진다.

  1. 스택 메모리에 직접 저장되므로 메모리 사용이 효율적이다
  2. 연산 속도가 빠르다
  3. null값을 가질 수 없다 -> null point exception을 발생시킬 수 있다

ex) int, long, float, double, char, byte, short, boolean

 

객체 타입 (wrapper type)

Long은 객체 타입이다. 이는 다음과 같은 특성을 가진다.

  1. 객체로 생성되기에 힙 메모리에 저장되며, 메모리 사용량이 더 많다
  2. 객체 참조 및 오토박싱/언박싱를 통해 연산을 하기 때문에 연산 속도가 더 느리다
  3. null값을 가질 수 있다 -> null point exception을 발생시키지 않으므로 null을 받는 메서드를 만들 수 있다
  4. 추가 유틸리티 메서드들이 제공된다

ex) Integer, Long, Float, Double, Character, Byte, Short, Boolean

 

예시

단순히 성능이 중요하다면 기본 타입을 사용하면 되지만, null값을 받거나 라이브러리에서 제공하는 메서드들을 사용해야 한다면 객체 타입을 사용해야 한다. 예를 들어,

public class Order {
	private Long id;
	private Long serialNumber;
    
    public Order(Long id, Long serialNumber) {
    	this.id = id;
        this.serialNumber = serialNumber;
    }
}

 

이렇게 클래스와 생성자를 만든 경우, id 또는 serialNumber에 null값이 들어오더라도 null point exception이 발생하지 않아서 스프링 프로젝트가 작동할 때 문제가 없다. 반면 다음 예시에서는,

private long baseValue = 1500L;

public long addValue(long paramValue) {
	return baseValue + paramValue;
}

 

매개변수에도 확실히 값이 들어오며, 사용되는 변수들도 null이 아니므로 객체 타입을 사용할 이유가 없고, 메모리를 더 효율적으로 사용하기 위해 기본 타입을 사용하면 된다.

'TIL : JAVA' 카테고리의 다른 글

[Java] ResponseEntity 를 return할 때, new를 언제 붙이는가?  (0) 2024.05.09
[Java] 선형 검색 Linear Search  (0) 2024.05.02
[Java] Static, Heap, Stack 메모리  (0) 2024.04.25
JDBC 로 MySQL 연결하기  (0) 2024.03.30
JDBC 기초  (0) 2024.03.28