지난주에는 ASP 프로젝트를 유지보수 할 일이 있어서 VBScript를 쓰게 됐는데, 하다보니 제일 헷갈리는게 Empty, Null, Nothing 구분이었다. C# ASP.NET도 그렇고 보통 C/C++도 그렇고 널 체크하나면 끝나는데 이놈의 언어는 깡통 값을 나타내는데 키워드를 세 가지나 쓴다. 변변한 자료 구조 하나 기본으로 제공하지도 않는 주제에(Scripting.Dictionary 정도? 나름 유용하게 잘 썼다) 엉뚱한 곳에 지나치게 신경썼다는 생각까지 들기도 한다.
아무튼 Empty는 초기화되지 않은 값이다. 그래서
Null은 값이긴 한데 '유효하지 않은 값'이라는 의미를 표현하는 값이다. DB에서 NULL 값을 받아왔을 때 외에는 볼 일이 없을 듯. IsNull(value) 함수로 검사할 수 있다.
결국 C# ASP.NET 에서 쿼리 스트링이나 폼 필드가 null 인지 검사하는 것과 동일한 작업이 VBScript에서는 Empty 검사가 되는 셈이다.
Nothing은 개체(Object)를 사용할 때에 관련 있는 키워드라서 Empty나 Null과는 큰 관계가 없다. 개체를 소멸시키고 싶을 때 Nothing을 살포시 대입해주면 된다. 검사 함수는 따로 없고 If 문 안에서 Is Nothing 형태로 검사할 수 있다.
ps. 개인적으로 VBScript와는 친하지 않아서 JavaScript나 Python으로 ASP를 해보면 재미있지 않을까 하는 몽상을 많이 했는데, 다행히 몽상으로만 그칠 수 있었다.
아무튼 Empty는 초기화되지 않은 값이다. 그래서
Dim value : value = Request.Form("value")
했을 때 아예 value 라는 폼 필드가 존재하지 않으면 IsEmpty(value) = True 이다.Null은 값이긴 한데 '유효하지 않은 값'이라는 의미를 표현하는 값이다. DB에서 NULL 값을 받아왔을 때 외에는 볼 일이 없을 듯. IsNull(value) 함수로 검사할 수 있다.
결국 C# ASP.NET 에서 쿼리 스트링이나 폼 필드가 null 인지 검사하는 것과 동일한 작업이 VBScript에서는 Empty 검사가 되는 셈이다.
Nothing은 개체(Object)를 사용할 때에 관련 있는 키워드라서 Empty나 Null과는 큰 관계가 없다. 개체를 소멸시키고 싶을 때 Nothing을 살포시 대입해주면 된다. 검사 함수는 따로 없고 If 문 안에서 Is Nothing 형태로 검사할 수 있다.
ps. 개인적으로 VBScript와는 친하지 않아서 JavaScript나 Python으로 ASP를 해보면 재미있지 않을까 하는 몽상을 많이 했는데, 다행히 몽상으로만 그칠 수 있었다.