귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!<syntaxhighlight lang="c"> #include <stdio.h>int main(void) { printf("Hello, world!\n"); return 0; } </syntaxhighlight> <syntaxhighlight lang="c"> #include <stdio.h>int main(void) { printf("안녕 세상아!\n"); return 0; } </syntaxhighlight> '''Hello, world!'''는 프로그래밍을 처음 배울 때 가장 널리 사용되는 예제 문장이다. 일반적으로 화면, 콘솔, 터미널, 로그 등에 짧은 문자열을 출력하는 프로그램을 작성함으로써 개발 환경이 정상적으로 설치되었는지, 소스 코드가 올바르게 실행되는지, 기본 입출력 문법을 이해했는지 확인하는 데 사용된다. 많은 프로그래밍 입문서와 튜토리얼은 첫 예제로 '''Hello, world!'''를 사용한다. 이 관례는 브라이언 커니핸(Brian W. Kernighan)이 작성한 B 언어 튜토리얼의 예제와, 브라이언 커니핸과 데니스 리치(Dennis Ritchie)가 함께 쓴 《The C Programming Language》의 C 언어 예제를 통해 널리 알려졌다.<ref name="bell-b">B. W. Kernighan, ''A Tutorial Introduction to the Language B'', Bell Laboratories.</ref><ref name="kr-c">Brian W. Kernighan, Dennis M. Ritchie, ''The C Programming Language''.</ref> == 개요 == '''Hello, world!''' 프로그램은 보통 다음 목적을 가진다. * 개발 환경이 정상적으로 설치되었는지 확인한다. * 컴파일러, 인터프리터, 런타임, 셸, 브라우저 등의 실행 흐름을 확인한다. * 문자열 출력, 함수 호출, 프로그램 진입점 등 가장 기본적인 문법을 익힌다. * 새 언어의 코드 구조를 짧은 예제로 비교한다. 다만 언어마다 실행 방식은 다르다. 어떤 언어는 컴파일이 필요하고, 어떤 언어는 인터프리터로 바로 실행되며, 어떤 언어는 브라우저나 특정 런타임, 하드웨어 시뮬레이터가 필요하다. == 역사 == '''Hello, world!'''라는 문구는 C 언어의 대표적인 첫 예제로 널리 알려져 있다. 다만 그 기원은 C 언어 책 하나로만 설명하기보다는, 벨 연구소(Bell Laboratories)에서 작성된 초기 언어 튜토리얼 문맥까지 함께 보는 편이 정확하다. 브라이언 커니핸은 B 언어 튜토리얼에서 외부 변수와 문자 출력을 설명하기 위해 비슷한 형태의 예제를 사용하였다. 이후 《The C Programming Language》에서 C 언어의 첫 예제로 간단한 문자열 출력 프로그램이 제시되면서, '''Hello, world!'''는 새 프로그래밍 언어를 배울 때 처음 작성하는 상징적인 예제가 되었다. == 표현 차이 == 언어마다 '''Hello, world!'''를 출력하는 방식은 다음과 같은 차이를 보인다. == 각 언어로 표현한 Hello, world! == === Ada === <syntaxhighlight lang="ada"> with Ada.Text_IO; use Ada.Text_IO; procedure Hello_World is begin Put_Line("Hello, world!"); end Hello_World; </syntaxhighlight> === ActionScript === <syntaxhighlight lang="actionscript"> package { import flash.display.Sprite; public class HelloWorld extends Sprite { public function HelloWorld() { trace("Hello, world!"); } } } </syntaxhighlight> === Agda === <syntaxhighlight lang="agda"> open import IO main = run (putStr "Hello, world!") </syntaxhighlight> === Assembly === 아래 예제는 32비트 리눅스 x86 환경에서 시스템 호출을 사용해 문자열을 출력하는 예이다. <syntaxhighlight lang="nasm"> section .data hello: db 'Hello, world!', 0Ah helloLen: equ $ - hellosection .text global _start _start: mov edx, helloLen mov ecx, hello mov ebx, 1 mov eax, 4 int 80h mov eax, 1 xor ebx, ebx int 80h </syntaxhighlight>=== AutoIt === <syntaxhighlight lang="autoit"> MsgBox(0, "Message", "Hello, world!") </syntaxhighlight> === Bash === <syntaxhighlight lang="bash"> #!/bin/bash echo "Hello, world!" printf "Hello, world!\n" </syntaxhighlight> === Batch === <syntaxhighlight lang="bat"> @echo off echo Hello, world! </syntaxhighlight> === B === 초기 B 언어 튜토리얼에서는 다음과 같이 여러 외부 변수에 문자열 조각을 나누어 저장한 뒤 출력하는 예제가 사용되었다. <syntaxhighlight lang="c"> main() { extrn a, b, c;putchar(a); putchar(b); putchar(c); putchar('!*n'); } a 'hell'; b 'o, w'; c 'orld'; </syntaxhighlight> === Brainfuck === <syntaxhighlight lang="brainfuck"> ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++++++++++++++.------------.<<+++++++++++++++.>.+++.------.--------.>+. </syntaxhighlight> === C === <syntaxhighlight lang="c"> #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } </syntaxhighlight> === C++ === <syntaxhighlight lang="cpp"> #include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; } </syntaxhighlight> === C# === <syntaxhighlight lang="csharp"> using System; namespace HelloWorld { internal class Program { private static void Main(string[] args) { Console.WriteLine("Hello, world!"); } } } </syntaxhighlight> === Common Lisp === <syntaxhighlight lang="common-lisp"> (format t "Hello, world!~%") </syntaxhighlight> === CSS === CSS는 일반적인 프로그래밍 언어라기보다는 스타일시트 언어이다. 아래 예제는 문서의 <code>body</code> 앞에 문자열을 표시한다. <syntaxhighlight lang="css"> body::before { content: "Hello, world!"; } </syntaxhighlight> === D === <syntaxhighlight lang="d"> import std.stdio; void main() { writeln("Hello, world!"); } </syntaxhighlight> === Dart === <syntaxhighlight lang="dart"> void main() { print("Hello, world!"); } </syntaxhighlight> === Elixir === <syntaxhighlight lang="elixir"> IO.puts("Hello, world!") </syntaxhighlight> === Erlang === <syntaxhighlight lang="erlang"> -module(hello). -export([main/0]). main() -> io:format("Hello, world!~n"). </syntaxhighlight> === F# === <syntaxhighlight lang="fsharp"> printfn "Hello, world!" </syntaxhighlight> === Fortran === <syntaxhighlight lang="fortran"> program HelloWorld print *, "Hello, world!" end program HelloWorld </syntaxhighlight> === Go === <syntaxhighlight lang="go"> package main import "fmt" func main() { fmt.Println("Hello, world!") } </syntaxhighlight> === Groovy === <syntaxhighlight lang="groovy"> println "Hello, world!" </syntaxhighlight> === Haskell === <syntaxhighlight lang="haskell"> main :: IO () main = putStrLn "Hello, world!" </syntaxhighlight> === HTML === HTML은 프로그래밍 언어라기보다는 마크업 언어이다. 아래 예제는 웹 문서에 문자열을 표시한다. <syntaxhighlight lang="html"> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>Hello, world!</title> </head> <body> <p>Hello, world!</p> </body> </html> </syntaxhighlight>=== Java === <syntaxhighlight lang="java"> public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); } } </syntaxhighlight> === JavaScript === <syntaxhighlight lang="javascript"> console.log("Hello, world!"); document.body.textContent = "Hello, world!"; </syntaxhighlight> === Kotlin === <syntaxhighlight lang="kotlin"> fun main() { println("Hello, world!") } </syntaxhighlight> === Lua === <syntaxhighlight lang="lua"> print("Hello, world!") </syntaxhighlight> === Objective-C === <syntaxhighlight lang="objective-c"> #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"Hello, world!"); } return 0; } </syntaxhighlight> === OCaml === <syntaxhighlight lang="ocaml"> print_endline "Hello, world!" </syntaxhighlight> === Pascal === <syntaxhighlight lang="pascal"> program HelloWorld; begin writeln('Hello, world!'); end. </syntaxhighlight> === Perl === <syntaxhighlight lang="perl"> use strict; use warnings; print "Hello, world!\n"; </syntaxhighlight> === PHP === <syntaxhighlight lang="php"> <?php echo "Hello, world!\n"; </syntaxhighlight> === PowerShell === <syntaxhighlight lang="powershell"> Write-Output "Hello, world!" </syntaxhighlight> === Python === <syntaxhighlight lang="python"> print("Hello, world!") </syntaxhighlight> === R === <syntaxhighlight lang="r"> cat("Hello, world!\n") </syntaxhighlight> === Raku === <syntaxhighlight lang="raku"> say "Hello, world!"; </syntaxhighlight> === Ruby === <syntaxhighlight lang="ruby"> puts "Hello, world!" print "Hello, world!\n" </syntaxhighlight> === Rust === <syntaxhighlight lang="rust"> fn main() { println!("Hello, world!"); } </syntaxhighlight> === Scala === <syntaxhighlight lang="scala"> object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } } </syntaxhighlight> === Scheme === <syntaxhighlight lang="scheme"> (display "Hello, world!") (newline) </syntaxhighlight> === SQL === SQL은 일반적인 프로그래밍 언어라기보다는 데이터베이스 질의 언어이다. 아래 예제는 문자열 값을 하나의 결과 행으로 조회한다. <syntaxhighlight lang="sql"> SELECT 'Hello, world!' AS greeting; </syntaxhighlight> === Swift === <syntaxhighlight lang="swift"> print("Hello, world!") </syntaxhighlight> === TypeScript === <syntaxhighlight lang="typescript"> const message: string = "Hello, world!"; console.log(message); </syntaxhighlight> === Verilog === <syntaxhighlight lang="verilog"> module main; initial begin $display("Hello, world!"); $finish; end endmodule </syntaxhighlight> === VHDL === <syntaxhighlight lang="vhdl"> use std.textio.all; entity main is end main; architecture behaviour of main is begin process variable hello : line; begin write(hello, String'("Hello, world!")); writeline(output, hello); wait; end process; end behaviour; </syntaxhighlight> === Visual Basic .NET === <syntaxhighlight lang="vbnet"> Module HelloWorld Sub Main() Console.WriteLine("Hello, world!") End Sub End Module </syntaxhighlight> === Zig === <syntaxhighlight lang="zig"> const std = @import("std"); pub fn main() !void { const stdout = std.io.getStdOut().writer(); try stdout.print("Hello, world!\n", .{}); } </syntaxhighlight> == 난해한 프로그래밍 언어의 예시 == 일부 난해한 프로그래밍 언어는 실용성보다는 표현 방식, 장난성, 언어 설계 실험 자체에 의미가 있다. 따라서 아래 예제들은 일반적인 입문용 예제라기보다는 '''Hello, world!'''가 여러 형태로 변형될 수 있음을 보여 주는 사례에 가깝다. === 몰랭(Mollang) === <syntaxhighlight lang="text"> 몰????.??????????? 모올????.????.?? 모오올몰모올 아모오올!!!!루 모오올모올 아모오올!!!!!!!루 아모오올루 아모오올루 아모오올???루 아몰루 아모올루 몰모올 아몰???????????????????????????????????????????루 아모오올???루 아몰모올??????루 아모오올루 아모오올!!!!!!!!루 아모올?루 </syntaxhighlight> === 엄랭 === <syntaxhighlight lang="text"> 어떻게 엄 어엄 어어엄 어어어엄 어어어어엄 어어어어어엄 어어어어어어엄 어어어어어어어엄 엄어.......... 동탄어?준..... ..... 어엄어어....... 어어엄어어어.......... 어어어엄어어어어... 어어어어엄어어어어어. 엄어, 준............. 어엄어어.. 식어어ㅋ 어어엄어어어. 식어어어ㅋ 어어엄어어어....... 식어어어ㅋ 식어어어ㅋ 어어엄어어어... 식어어어ㅋ 어어어엄어어어어.............. 식어어어어ㅋ 어어어엄어어어어,,,,,,,,,,,, 식어어어어ㅋ 어엄어어............... 식어어ㅋ 식어어어ㅋ 어어엄어어어... 식어어어ㅋ 어어엄어어어,,,,,, 식어어어ㅋ 어엄어어어,,,,,,,, 식어어어ㅋ 어어어엄어어어어. 식어어어어ㅋ 화이팅!., 이 사람이름이냐ㅋㅋ </syntaxhighlight> == 활용 == '''Hello, world!'''는 단순한 예제이지만 다음과 같은 상황에서 자주 사용된다. * 새 프로그래밍 언어를 처음 배울 때 * 컴파일러 또는 인터프리터 설치를 확인할 때 * 개발 환경, 빌드 도구, 패키지 관리자 설정을 검증할 때 * 웹 서버, 런타임, 컨테이너, 배포 환경의 기본 동작을 확인할 때 * 임베디드 장치나 하드웨어 기술 언어에서 출력 또는 시뮬레이션 동작을 확인할 때 == 주의점 == '''Hello, world!''' 예제는 언어의 전체 특징을 보여 주지는 않는다. 예를 들어 메모리 관리, 오류 처리, 모듈 시스템, 비동기 처리, 객체 지향, 함수형 프로그래밍, 타입 시스템 같은 핵심 개념은 이 예제만으로 알기 어렵다. 또한 일부 예제는 실행 환경에 따라 수정이 필요할 수 있다. 예를 들어 Assembly 예제는 운영체제와 CPU 아키텍처에 따라 완전히 달라질 수 있으며, Verilog와 VHDL은 일반적인 콘솔 프로그램이 아니라 하드웨어 기술 언어의 시뮬레이션 예제로 보아야 한다. == 같이 보기 == * [[C]] * [[프로그래밍 언어]] * [[컴파일러]] * [[인터프리터]] * [[표준 출력]] * [[도움말:위키 문법/SyntaxHighlight]] == 각주 == <references /> == 분기 == {{분기|도움말:위키 문법/SyntaxHighlight|85572||가온 위키}} [[분류:프로그래밍]] [[분류:프로그래밍 언어]] [[분류:컴퓨터 과학]] [[분류:예제 코드]] 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림) 이 문서에서 사용한 틀: 틀:분기 (편집) 틀:알림바 (편집) 틀:퍼온문서 (편집)