11월 24일 - 런타임에러....

Yullgiii·2023년 11월 24일
0
post-thumbnail

Java의 int와 long 데이터 타입의 차이점과 런타임 오류

코테를 하다가 런타임 에러가 발생해 버렸다...흐음~
문제의 코드들을 살펴 보도록하자!~~~

첫 번째 코드 (런타임 오류가 없음)

Copy code
class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        int len = p.length(); 
        long numP = Long.parseLong(p);

        for (int i = 0; i <= t.length() - len; i++) {
            String sub = t.substring(i, i + len);
            long numT = Long.parseLong(sub);
            if (numT <= numP) {
                answer++;
            }
        }
        return answer;
    }
}

두 번째 코드 (런타임 오류가 발생)

Copy code
class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        int pValue = Integer.parseInt(p);
        int lengthP = p.length();

        for (int i = 0; i <= t.length() - lengthP; i++) {
            String subStr = t.substring(i, i + lengthP);
            int subValue = Integer.parseInt(subStr);
            if (subValue <= pValue) {
                answer++;
            }
        }
        return answer;
    }
}

사례 분석: 두 가지 서로 다른 코드의 비교

첫 번째 코드: long 데이터 타입을 사용

이 코드에서는 long 데이터 타입을 사용하여 큰 수를 처리한다. long 타입은 int보다 훨씬 큰 범위의 정수 값을 저장할 수 있기 때문에, 큰 수를 포함하는 문자열을 처리할 때 오버플로우의 위험을 크게 줄일 수 있다.
서브스트링의 길이를 문자열 p의 길이에 맞추어 관리한다. 이러한 접근 방식은 t에서 추출한 서브스트링이 항상 p와 동일한 길이를 가진다는 것을 보장한다. 결과적으로, 문자열 분석 시 일관성과 안정성을 확보한다.

두 번째 코드: int 데이터 타입을 사용

반면, 이 코드에서는 int 데이터 타입을 사용한다. int 타입은 상대적으로 제한된 범위의 정수만을 처리할 수 있다. 따라서 큰 수를 포함하는 문자열을 처리할 때 오버플로우가 발생할 수 있다.
p의 길이를 기준으로 서브스트링을 생성하는 방식은 첫 번째 코드와 유사하나, int 타입으로 인한 값의 범위 제한으로 인해 런타임 오류의 위험이 존재한다.

런타임 오류의 원인 및 해결 방법

런타임 오류의 주된 원인: 두 번째 코드에서 런타임 오류가 발생하는 주요 원인은 int 데이터 타입의 사용에 있다. t에서 추출한 서브스트링이나 p 자체가 매우 큰 숫자를 나타낼 경우, Integer.parseInt() 메서드는 NumberFormatException 또는 오버플로우로 인한 부정확한 결과를 반환할 수 있다.
해결 방법: 첫 번째 코드에서 채택된 long 데이터 타입의 사용은 이러한 문제를 피하는 효과적인 방법이다. long을 사용함으로써 더 큰 숫자 범위를 안전하게 처리할 수 있으며, 이는 특히 큰 수를 다룰 때 중요하다.

회고

오늘의 학습을 통해 int와 long 데이터 타입 간의 중요한 차이점을 명확히 이해했다!!!!!!흠....오류 좀 덜나게 써야겠다...?

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글