변수와 입력 출력
목차
베이직들에게는 보통 변수 타입의 추론 능력이 있는데 스몰베이직도 그와 같습니다. 변수를 쓰고 싶으면 그냥 myVariable = 3 과 같이 할당해서 사용하면 됩니다.
변수에 대해서는 숫자와 데이터를 저장하는 박스, 서류정리함이라고 비유를 해서 많이 가르칩니다. 실제 박스처럼 사용해도 되고요. 프로그램이 실행되는 동안 메모리에 저장하는 장소라고 이해하는 것에서 출발합니다. 저장하는 것은 무엇이냐면 넣고 꺼낼 수 있어야 합니다. 즉 입출력이 가능해야 합니다. 변수를 사용하는 이유는 입출력을 하기 위해서 입니다.
간단히 다음 예제를 보겠습니다. myNumber 에 17을 할당 = 하고 myString에 Hello란 문자열을 할당합니다. 17은 숫자를 저장하는 것이고 Hello 는 문자입니다. 숫자는 사칙연산이 가능하지만 문자열은 사칙연산이 안됩니다. (할수는 있지만 그것이 목적이 아니다)
변수에 저장한 숫자들은 적절할 때 꺼내서 쓰면 됩니다. 이 예제의 변수들은 스크린 출력을 위해 사용됩니다.
myNumber = 17 myString = "Hello " myString2 = "World!" TextWindow.WriteLine(myNumber) TextWindow.WriteLine(myString) TextWindow.WriteLine(myString + myString2)
중간에 필요에 따라 값을 바꿀 수도 있습니다. 변하는 수, 변하게 할 수 있는 수라고 해서 변수입니다(Variable) 영어로는 다양성 가변성을 뜻하는 Variable이라고 합니다.
문자열 같은 경우는 + 연산이 문자열을 이어주는 것 입니다. 문자열을 이으면 여러가지 단어의 조합이나 문장도 만들 수 있기 때문에 이 문자열을 잘 다루는 것은 프로그래밍에서 많이 중요합니다. 문자열 처리만 적당히 해두면 꽤 그럴듯한 프로그램이 나옵니다. 대부분 라이브러리 함수로 문자열을 처리하는데 그 부분은스몰베이직 공식 레퍼런스를 참고합니다.
입력과 출력
위의 예제에 이어서 이번에는 입력을 받아 출력해보겠습니다. Read() 메소드는 사용자 키보드 한줄 입력을 받아서 yourName에 저장합니다. 여기서는 이름을 물어보고 그 이름을 부르며 인사를 합니다.
TextWindow.WriteLine("What's your name?") yourName = TextWindow.Read() TextWindow.WriteLine(myString + yourName + "!")
출력된 결과는 다음과 같습니다.
What's your name? 입력-> neokay Hello neokay!
이번엔 숫자를 입력받아서 출력해보겠습니다. 아래 예제는 사과의 수를 입력 받고 총 가격을 알려줍니다.
TextWindow.WriteLine("How many apples do you want?") quantity = TextWindow.Read() TextWindow.WriteLine("2 dollars for an apple") TextWindow.WriteLine("Total " + (quantity*2) + " dollars")
결과는 다음과 같습니다. 하나에 2달러인 사과니까 5개에 10달러입니다. 주의할 점은 입력이 숫자가 아니라면 오류가 납니다. 스몰베이직은 기본 예외(exception) 처리가 기본되어 있어서 오류는 나지 않더라도 의미상 이미 오류입니다. 이런 경우 C등 보통의 언어에서는 타입 에러나 예외를 발생시킵니다.
How may apples do you want? 입력 -> 5 2 dollars for an apple Total 10 dollars
컴퓨터 프로그래밍을 하면 하루종일 만드는게 이 입출력입니다. 메모리에 저장할 때는 변수를 사용하는 거고 파일에 저장할 때는 파일을 사용하는 겁니다. 둘다 입출력입니다 매체가 다를 뿐이지요.
다만 Read() 함수처럼 키보드로 입력을 받을 때는 더 어려움이 있는데요. 컴파일러의 한계 상 키보드에서 무엇을 입력받을지 알 수없기 때문입니다. 이것이 런타임 오류와 컴파일 오류를 나누는 기준이 될 수 있는데요. 런타임은 타입 에러에 취약합니다. 보통은 정확하게 사람이 입력했다는 것을 전체로 프로그램을 만들기 때문인데 사람이기 때문에 이상하게 입력하는 일도 많습니다.
그래서 실시간 시스템에 입력받을 때는 다양한 예외처리 루틴을 마련해놔야 합니다. 앞으로 스몰베이직을 배우면서 그런 부분들도 한번 쯤 구현해보면 좋습니다.
참고사이트
Small Basic (smallbasic-publicwebsite.azurewebsites.net)