반응형

PC나 모바일로 게임이나 앱을 사용하다 보면 갑자기 멈추거나 아예 종료되버리는 경우가 있습니다. 대부분 코드 내에서 충돌이나 오류가 발생해서 강제로 종료되는 경우인데 이 증상을 완화시키는 예외처리 기능에 대해 포스팅 해보도록 하겠습니다 :D

 


먼저 스크립트를 작성해봅시다. GameObject를 스크립트 상에서 하나 생성시키고 Start 에서 생성시킨 오브젝트의 이름을 프린트 하도록 만들어주었습니다.

 

작성한 스크립트를 아무 오브젝트에 추가시켜주고 실행시켜보면 NullReferenceException 이라는 오류가 콘솔창에 디버그 되는 모습을 볼 수 있습니다. 이는 참조값이 없다는 말인데요.

사실 우리가 처음 스크립트상에서 생성시킨 게임오브젝트는 선언은 했지만 할당을 시켜주지 않았기 때문에 이름만 있는 존재하지 않는 오브젝트입니다.

 

때문에 다시 스크립트로 돌아와서 선언한 게임 오브젝트를 "게임 오브젝트 !" 라는 이름으로 할당시켜 주도록 하겠습니다.

 

스크립트를 수정, 저장하고 다시 실행 시켜보면 하이어라키에도 "게임 오브젝트 !" 라는 오브젝트가 생성되고 콘솔창에서 오브젝트명이 정상적으로 디버그 되는 것을 볼 수 있습니다.

이처럼 개발하시다보면 수없이 많은 오류들로 강제 종료되곤 할텐데요, 문제가 어디서 발생했는지 알거나 해결할 수 있다면 크게 문제는 없지만 간혹 어디서 발생했는지도 알고 해결할 수도 있지만 알고리즘상 그대로 두어야 할때가 생기기도 합니다. (개인적으로는 그런적은 없긴 하지만)

 

그럴 때 사용하는게 바로 '예외 처리' 입니다. 발생하는 오류를 예외로 두는 방법인데 기본적으로는 try, catch가 사용되는데 finally도 추가로 사용할 수 있습니다.

단, Exception을 선언하려면 반드시 System 네임스페이스를 추가시켜주어야 합니다. 상단에 using System; 을 추가하셔야 사용할 수 있습니다.

 

try는 오류가 발생하는 구문을 포함 시켜줍니다. 지금은 게임오브젝트를 선언만 해두었기 때문에 할당되지 않은 게임오브젝트의 이름을 프린트 시키는 구문에서 오류가 발생하기 때문에 try 안에 넣어주도록 합시다.

 

catch는 오류가 발생했을 때 실행시킬 구문입니다. 지금은 발생할 오류를 NullReferenceException로 두었는데 다른 오류들이나 혹은 모든 오류에 대한 처리도 가능합니다. 여기선 먼저 발생한 오류를 프린트 시켜주고 게임오브젝트를 할당시키는 구문을 넣어주겠습니다.

 

finally는 오류가 발생하건, 발생하지 않건 실행시킬 구문입니다. 여기선 catch에서 선언만 되어있던 게임오브젝트를 할당시켜주었기 때문에 정상적으로 할당되어 생성되었는지를 확인할 수 있도록 다시 게임오브젝트의 이름을 프린트시키는 구문을 넣어주었습니다.

 

저장하고 실행시켜보면 할당되어 있지 않았던 오브젝트의 이름을 프린트 시키는 부분에서 예상대로 NullReferenceException 오류가 발생했기 때문에 catch에서 해당 오류에 대한 프린트가 한번 실행되고, 할당시켜준 후 finally에서 다시금 오브젝트의 이름을 프린트 시켰기 때문에 정상적으로 출력이 되는 것을 볼 수 있습니다.

 

 

추가로 throw new Exception 이라는 예외처리도 있는데 오류 발생여부와 관계없이 강제로 임의의 오류를 발생시키는 구문입니다.

 


 

이렇게 예외처리에 알아보았습니다. 저는 개발하는 동안 잘 쓸일이 없더라구요. 애초에 오류가 발생하는 부분을 알아내서 오류가 발생하지 않도록 수정해서 없애는 방식으로 오류를 해결하고 있어서 사용하는 기능은 아닙니다. 때문에 설명이 틀린 부분들도 있을 수도 있습니다. :D

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기