{{위키데이터 속성 추적}}
{{다른 뜻}}
{{Infobox programming language
| screenshot             = AtariBasic.png
| screenshot caption     = [[아타리 베이직]] (1979년) ([[아타리 8비트 패밀리]]용)
| paradigm               = [[비구조적 프로그래밍|비구조적]], 나중에는 [[절차적 프로그래밍|절차적]], 나중에는 [[객체 지향 프로그래밍|객체 지향]]
| designers              = {{plainlist|
* [[존 조지 케메니]]
* [[Thomas E. Kurtz]]
}}
| released               = {{시작 날짜와 나이|1964|5|1}}
| implementations        = {{flatlist|
* [[다트머스 베이직]]
* [[타이니 베이직]]
* [[애플소프트 베이직]]
* [[아타리 베이직]]
* [[싱클레어 베이직]]
* [[코모도어 베이직]]
* [[BBC 베이직]]
* [[TI-BASIC]]
* [[카시오 베이직]]
* [[마이크로소프트 베이직]]
* [[QB64]]
* [[리버티 베이직]]
* [[파워베이직]]
}}
| dialects = 
| influenced by = {{flatlist|
* [[알골 60]]
* [[포트란|FORTRAN II]]
* [[JOSS]]
}}
| influenced = {{flatlist|
* [[COMAL]]
* [[비주얼 베이직]]
* [[비주얼 베이직 닷넷]]
* [[GRASS]]
* [[오토잇]]
* [[오토핫키]]
}}
| wikibooks              = BASIC Programming
}}
[[파일:C64 startup animiert.gif|섬네일|240px|코모도어 베이직 v2.0 시작 화면]]

'''초심자용 다목적 기호명령부호'''(初心者用 多目的 記號命令符號，{{llang|en|Beginner's All-purpose Symbolic Instruction Code}}) 또는 단순히 '''베이직'''('''BASIC''', {{문화어|베이씨크}})은 사용하기 쉽도록 설계된 [[범용 프로그래밍 언어|범용]] [[고급 프로그래밍 언어|고급]] [[프로그래밍 언어]]다. 1964년 [[다트머스 대학교]]의 [[존 케메니]](John Kemeny)와 [[토머스 커츠]](Thomas Kurtz)가 개발했다. 그들은 비과학 분야의 학생들이 컴퓨터를 사용할 수 있도록 하고 싶었기 때문이다. 그 당시에 거의 모든 컴퓨터들은 [[과학자]]들과 [[수학자]]들만이 배우는 경향이 있는 맞춤 소프트웨어를 쓰는 것을 필요로 했다.

1970년대 중반에 [[마이크로컴퓨터]]가 등장하면서 1975년 [[마이크로소프트 베이직]](Microsoft BASIC)을 비롯한 여러 베이직 방언이 개발되었다. 이 기계에서 사용할 수 있는 작은 [[주 메모리]](흔히 4KB)로 인해 다양한 [[타이니 베이직]] 방언도 만들어졌다. 베이직은 그 시대의 거의 모든 시스템에서 사용할 수 있었고 1970년대 후반에 등장한 가정용 컴퓨터 시스템을 위한 사실상의 프로그래밍 언어가 되었다. 이러한 PC에는 거의 항상 기본 인터프리터가 설치되어 있었으며, 종종 펌웨어나 때로는 ROM 카트리지에 설치되어 있었다.

베이직은 1990년대에 더 강력한 마이크로컴퓨터가 시장에 나왔고 [[파스칼 (프로그래밍 언어)|파스칼]]과 [[C (프로그래밍 언어)|C]]와 같은 고급 기능을 가진 프로그래밍 언어를 사용할 수 있게 되면서 인기가 떨어졌다. 1991년 [[마이크로소프트]]는 시각적 폼 빌더를 결합한 업데이트된 버전의 베이직인 [[비주얼 베이직]]을 출시했다.

교육용으로 개발되어 언어의 문법이 쉬우며, [[다트머스 베이직|다트머스의 최초 제품]] 이래로 [[인터프리터]] 방식이 많았으나 최근에는 [[컴파일러]] 방식도 많다. 현재는 다양한 종류의 베이직이 존재하며 서로 문법도 많이 차이가 난다. 서로 다른 종류 사이의 [[소스 코드]]는 호환되지 않는다.

== 기원 ==
== 소프트웨어 목록 ==
{| class="wikitable sortable"
|-
! 제작사 !! 제품명 !! 해석 방식 !! 플랫폼 !! 설명
|-
| [[마이크로소프트]] || [[마이크로소프트 베이직]] || [[인터프리터]] || || 
|-
| [[마이크로소프트]] || [[코모도어 베이직]](Commodore BASIC) || [[인터프리터]] || || 
|-
| [[마이크로소프트]] || [[애플소프트 베이직]] || [[인터프리터]] || ||
|-
| [[마이크로소프트]] || [[MSX 베이직]](MSX BASIC)|| [[인터프리터]] || ||
|-
| [[마이크로소프트]] || [[GW-BASIC]] || [[인터프리터]] || [[DOS]] || [[MS-DOS]]의 번들
|-
| [[마이크로소프트]] || [[퀵베이직]](Quick BASIC) || [[인터프리터]], [[컴파일러]] || dos || 컴파일러 방식 제공
|-
| [[마이크로소프트]] || [[큐베이직]](QBasic)|| [[인터프리터]] || [[DOS]] ||[[MS-DOS]]에 번들
|-
| [[마이크로소프트]] || [[비주얼 베이직]](Visual BASIC) || [[인터프리터]], [[컴파일러]] || Win3.1 Win98, WinXP || 자체버전 6.0까지 지원하고 중단됨 닷넷으로 출시됨
|-
| [[마이크로소프트]] || [[비주얼 베이직 닷넷]](Visual Basic .NET) || [[인터프리터]], [[컴파일러]] || WinXP, Win Vista, Win7 ||[[비주얼스튜디오닷넷]]에 포함되어 출시됨
|-
| [[볼랜드]] || [[터보 베이직]](Turbo-BASIC) || [[인터프리터]], [[컴파일러]] || DOS ||
|-
| [[리얼 소프트웨어]] || [[리얼 베이직]](REALBasic) || [[인터프리터]], [[컴파일러]] || WinXP, MacOS ||
|-
| [[트루베이직]] || [[트루 베이직]] || || || 최초 베이직 개발자인 존 케머니와 토마스 커츠 교수 개발
|-
|  || [[다크 베이직]](DarkBASIC) ||  || || 
|-
|  || [[퓨처 베이직]](FutureBASIC) ||  || ||
|-
|  || [[프리 베이직]](FreeBASIC) ||  || ||
|-
| [[삼선에스이]] || [[한글 베이직]] || [[인터프리터]] || [[DOS]] || 1991년 안철우 씨 개발
|-
|  || [https://web.archive.org/web/20131101055827/http://www.qb64.net/ qb64] || || Windows7, Linux, Mac OSX||QB4.5와 100%호환
|}

== 문법 ==
=== 일반적인 베이직 키워드 ===
; 데이터 조작:
* <code>LET</code>
* <code>DATA</code>

; 프로그램 제어 흐름:
* <code>IF ... THEN ... {ELSE}</code>
* <code>FOR ... TO ... {STEP} ... NEXT</code>
* <code>WHILE ... WEND</code> 및 <code>REPEAT ... UNTIL</code>
* <code>DO ... LOOP {WHILE}</code> 또는 {<code>UNTIL</code>}
* <code>[[GOTO]]</code>
* <code>GOSUB</code>
* <code>ON ... GOTO/GOSUB</code>
* <code>DEF FN</code>

; 입출력:
* <code>LIST</code>
* <code>PRINT</code>
* <code>INPUT</code>
* <code>TAB</code> 또는 <code>AT</code>

; 함수 목록:
* <code>ABS</code>
* <code>ATN</code>
* <code>COS</code>
* <code>EXP</code>
* <code>INT</code>
* <code>LOG</code>
* <code>RND</code>
* <code>SIN</code>
* <code>SQR</code>
* <code>TAN</code>

; 기타:
* <code>REM</code>
* <code>USR</code>
* <code>TRON</code>
* <code>TROFF</code>
* <code>ASM</code>

== 예제 ==
=== Hello World ===
아래 예는 모든 [[ANSI]]/[[ISO]] 호환 베이직과 [[1970년대]]에서 [[1980년대]]에 마이크로 컴퓨터에 설치된 대부분의 베이직에서 동작한다.
 10 PRINT "Hello, world!"
 20 END
이러한 기종에 설치된 베이직은 줄번호가 생략된 즉각 모드로 실행할 수도 있다. 다음 예를 실행할 때에는 RUN 명령어가 필요없다.
 PRINT "Hello, world!"
 ? "Hello, world!"
이후의 베이직은 [[구조화 프로그래밍]]을 지원하며 코드에서 줄번호가 사라졌다. 다음 예는 현대적인 베이직의 거의 대부분에서 RUN 명령으로 실행할 수 있다.
 PRINT "Hello, world!"
 END
많은 베이직에서 End 선언문은 빼도 된다.

=== 사용자 입력 개수 만큼 별 출력 ===
{|
|-valign="top"
|
==== [[구조적 프로그래밍|구조화]]되지 않은 예전의 문법 ====
<syntaxhighlight lang="gwbasic">
 10 INPUT "이름을 입력하세요"; A$
 20 PRINT "안녕하세요 "; A$
 30 INPUT "별이 몇 개 필요하세요?"; S
 40 FOR I = 1 TO S
 50 S$ = S$ + "*"
 55 NEXT I
 60 PRINT S$
 70 INPUT "별이 더 필요하세요?"; Q$
 80 IF LEN(Q$) = 0 GOTO 70
 90 L$ = LEFT$(Q$, 1)
 100 IF (L$ = "Y") OR (L$ = "y") THEN GOTO 30
 110 PRINT "안녕히 가세요";
 120 FOR I = 1 TO 200
 130 PRINT A$; " ";
 140 NEXT I
 150 PRINT
</syntaxhighlight>
|

==== 구조화된 형태의 문법 ====
<syntaxhighlight lang="qbasic">
 INPUT "이름을 입력하세요."; UserName$
 PRINT "안녕하세요."; UserName$
 DO
   INPUT "별이 몇 개 필요하세요? "; NumStars
   Stars$ = ""
   'Stars$ = REPEAT$("*", NumStars)	'<-ANSI BASIC
   Stars$ = STRING$(NumStars, "*")	'<-MS BASIC
   PRINT Stars$
   DO
     INPUT "별이 더 필요하세요(Y/N)?"; Answer$
   LOOP UNTIL Answer$ <> ""
 LOOP WHILE UCASE$(LEFT$(Answer$, 1)) = "Y"
 PRINT "안녕히 가세요.";
 FOR A = 1 TO 200
   PRINT UserName$; " ";
 NEXT A
 PRINT
</syntaxhighlight>
|}

==== [[비주얼 베이직 닷넷|Visual Basic .NET]] ====
<!-- needs a better (event-driven?) example -->
<syntaxhighlight lang="vbnet">
Class stars
    Sub Main()
        Dim UserName, Answer, stars As String ' UserName$, Answer$, stars$ may be used as well.
        Dim NumStars, I As Integer
        Console.Write("What is your name: ")
        UserName = Console.ReadLine()
        Console.WriteLine("Hello {0}", UserName)
        Do
            Console.Write("How many stars do you want: ")
            NumStars = CInt(Console.ReadLine())
            stars = New String("*", NumStars)
            Console.WriteLine(stars)
            Do
                Console.Write("Do you want more stars? ")
                Answer = Console.ReadLine()
            Loop Until Answer <> ""
            Answer = Answer.Substring(0, 1)
        Loop While Answer.ToUpper() = "Y"
        Console.WriteLine("Goodbye {0}", UserName)
    End Sub
End Class
</syntaxhighlight>

== 외부 링크 ==
{{위키공용분류}}
* {{dmoz|Computers/Programming/Languages/BASIC}}

{{베이직}}
{{주요 프로그래밍 언어}}
{{전거 통제}}

[[분류:베이직| ]]
[[분류:베이직 프로그래밍 언어 계열]]
[[분류:다트머스 대학교]]
[[분류:미국의 발명품]]
[[분류:1964년 개발된 프로그래밍 언어]]
[[분류:ISO 표준 프로그래밍 언어]]