안드로이드앱 개발중 뜬금없이 프로젝트가 실행되지 않았다.

Run App을 눌러봐도 다음과 같은 오류만 나올 뿐


Error: Activity class { ... } does not exist.


전혀 실행되지 않았다.


프로젝트를 처음 실행하면 앱이 하나 생성되는데,

USB를 컴퓨터에 연결한 상태에서 앱을 삭제했기 때문에

발생하는 문제였다.

위와 같은 오류가 나는 이유는 ADB는 앱이 휴대폰에 있는걸로 인식하기 때문이다.


해결방법은 다음과 같다.

설정에 들어가면 저장소(Storage)가 있는데 해당 앱 이름을 찾아서 삭제해주면 된다.






혹시 다른 문제가 발생한 유저들을 위해

앱을 삭제하지 않았는데 위와 같은 오류가 발생했을 시 해결방안


1. 안드로이드 스튜디오에서 상단 메뉴에 build - Clean Project 클릭, rebuild project 클릭 후 실행


2. 해당 프로젝트 코드를 모두 백업하고 프로젝트 삭제 후 새로 만들어서 사용


3. build.gradle에 다음과 같이 코드 추가

android {
defaultConfig {
    applicationId "패키지명"  
  }
}


4. AndroidManifest.xml에서 다음과 같이 변경

<activity android:name="패키지명.액티비티명" >



위 4가지 방법을 모두 사용해봐도 문제가 해결되지 않을 시 댓글로 문의주세요.





자바는 배열의 작성 및 조작을 데이터 구조로 지원합니다. 

배열의 크기를 n이라고 했을 때 배열의 인덱스는 1부터 n까지가 아닌 0부터 n-1까지입니다. 

프로그래밍 중 ArrayIndexOutOfBoundsException이 가장 많이 발생하는 이유중 하나죠.

C/C++과 달리 자바는 인덱스가 배열의 크기보다 크거나 음수 인덱스에 대한 요청이 있으면 자바는 위의 예외를 발생시킵니다.

또한 이 예외는 자바 컴파일러는 검사하지않고 항상 런타임(실행도중)에 예외를 발생시킵니다.


다음은 Exception 발생의 예입니다.


int[] arr = {0, 1, 2, 3, 4};

arr[5] = 4; // 예외 발생!!


해당 프로그램 실행 시 다음과 같은 오류가 발생합니다.


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 

at average.Main.main(Main.java:9)


arr이란 배열의 크기는 5입니다. 따라서 인덱스는 0부터 4(n-1)까지입니다.

하지만 배열의 5번째 인덱스에 접근하려고 시도했기 때문에 자바는 해당 예외를 throw한 것입니다.


또 다른 Exception 발생의 예입니다.


ArrayList<String> list = new ArrayList<>();

list.add("Hello");

list.add("Wolrd");

list.get(2); // 예외 발생!!


해당 프로그램 실행 시 다음과 같은 오류가 발생합니다.


Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 

at java.util.ArrayList.rangeCheck(ArrayList.java:657)

at java.util.ArrayList.get(ArrayList.java:433)

at average.Main.main(Main.java:11)


위 코드를 보시면 list 객체를 생성하고 2번 add해주었습니다. (list의 크기 = 2)

list의 크기가 2이므로 접근 가능한 인덱스는 0부터 1(2-1)까지입니다. 따라서 list의 2번째 인덱스에 접근하려고 했기 때문에 해당 예외를 throw한 것입니다.

그렇다면 프로그래머는 어떤식으로 이런 예외에 대해 올바르게 예외처리를 수행할 수 있을까요?


☞ 배열에 올바르게 접근하는 방법


반복문에서 다음과 같이 사용합니다.


for(int i = 0; i < arr.length; i++) { ... }


또한 foreach문을 사용할 수 있습니다. (foreach문에 대한 설명)


for(int i : arr) { ... }


Try-Catch문 사용하기 : 다음과 같이 사용 가능합니다.


import java.util.ArrayList;


public class Main {

public static void main(String[] arg) {

try {

ArrayList<String> list = new ArrayList<>();

list.add("Hello");

list.add("Wolrd");

list.get(2);

}

catch(IndexOutOfBoundsException e) {

System.out.println(e);

}

}

}


이상 java.lang.ArrayIndexOutOfBoundsException에 대해 알아보았습니다.

자바 예외에 대해 더 알고싶은 분은 여기를 참고하세요.

또한 본 게시글에 대한 오류나 질문사항은 아래 댓글로 남겨주세요.

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.



to Top