์๋
ํ์ธ์ @jwsohn์
๋๋ค. ์ด๋ฒ ํฌ์คํ
์์๋ ์ฝ๋ฉ์ ๋์์ด ๋๋ ์ต๊ด๊ณผ ์ข์ ์ต๊ด์ ๋ค์ด๋๋ฐ ๋์์ด ๋๋ ์ถ๊ฐ ๋๊ตฌ(tool)๋ค์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฝ๋ฉ์ ๊ธ์ฐ๊ธฐ์ ๋น์ทํ ์์ฑ์ ๊ฐ๊ณ ์์ต๋๋ค. ์ฐ์ , ์ฝ๋ฉ์ ๊ธ์ฐ๊ธฐ์ฒ๋ผ ๋ช ๋ น์ด๋ฅผ ํ๋ ํ๋ ์์ฑํด์ผ(write) ํฉ๋๋ค. ๋จ์ด๋ค์ด ์ด๋ฃจ์ด์ ธ ๋ฌธ์ฅ์ ์ด๋ฃจ๊ณ , ๋ฌธ์ฅ์ด ๋ชจ์ฌ ๋ฌธ๋จ, ๊ธ์ด ๋๋ฏ์ด ์ฝ๋ฉ ์ญ์ statement๋ค์ด ๋ชจ์ฌ์ block์ ๋ง๋ค๊ณ ์ด๊ฒ์ด ๋ถ๋ฌ ์ฐ๊ธฐ์ ์ฉ์ดํ function์ด๋ class๋ฅผ ์ด๋ฃจ๊ฒ ๋์ง์. ์ด๊ฒ๋ค์ด ๋ ๋ชจ์ด๋ฉด module์ด๋ ์์ฑ๋ application์ด ๋ ๊ฒ์ด๊ตฌ์.
๊ธ์ฐ๊ธฐ์์ ๊ธ์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ๊ฐ ์ค์ํ๋ฏ์ด, ์ฝ๋ฉ ์ญ์ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฐ ๊ตฌ์กฐ์ ์ธ ์ฝ๋ฉ ์ค๋ ฅ์ ๋จ๊ธฐ๊ฐ์ ๊ธธ๋ฌ์ง์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฝ๋ฉ์ ์ ํ๋ ค๋ฉด ์ฅ๊ธฐ์ ์ธ ๋ ธ๋ ฅ์ด ํ์ํ๊ณ ์ฅ๊ธฐ์ ์ธ ๋ ธ๋ ฅ์ ๋ค์ด๊ธฐ ์ํด์๋ ์ฒ์๋ถํฐ ์ข์ ์ต๊ด์ ๊ธฐ๋ฅด๋ ๊ฒ ์ญ์ ์ค์ํ๊ฒ ์ต๋๋ค.
์ฝ๋ฉ ์คํ์ผ์ ์ฒ์๋ถํฐ ์ต๊ด์ ์ ๋ค์ด์ ์ผ ํฉ๋๋ค. ์ฝ๋ฉ ์คํ์ผ์ด ์ข์ง ์์ ์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ด๋ฉด ๊ทธ๊ฒ์ผ๋ก์ ๊ทธ ์ฝ๋์ ์๋ช (life cycle)์ ๋์ด๋ผ๊ณ ๋ณด์๋ฉด ๋๊ฒ ์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ํธํ๊ฒ ์ฝ์ ์ ์๋ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ์ ์ฒ์๋ถํฐ ์ต๊ด์ ์ ๋๋ก ๋ค์ด์ง ์์ผ๋ฉด ์๋๊ฒ ์ต๋๋ค. ์ฝ๋ฉ ์คํ์ผ์ด ๋์ ๊ฒฝ์ฐ ์ฌ์ง์ด๋ ๋ด๊ฐ ์ด ์ฝ๋๋ฅผ ๋์ค์ ๋ค์ ๋ด๋ ๊ฐ์ด ์์ค๋ ์ฌํ(?)๊ฐ ๋ฒ์ด์ง๊ธฐ๋ ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฝ๋ฉ ์คํ์ผ์ ์ด๋ ์ ๋๊น์ง ์ ๊ฒฝ์ ์จ์ผ ํ ๊น์? ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธ์ ํ์ํ์, ๊ณต๋ฐฑ ํ๋ํ๋๊น์ง ์ ๊ฒฝ์ ์ฐ์ ์ผ ํฉ๋๋ค. ๊ฐ๋จํ ์๋ฅผ ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
์ผ๋จ ์ด ์ ๋๊น์ง๋ ๋ค๋ค ์ ํ์ญ๋๋ค. ๋ค์ฌ์ฐ๊ธฐ(indentation)์ ์ฝ๋ ๋ธ๋ก(code block) ๋ง์ถ๊ธฐ์ง์.
Java:
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}
Python:
#!/usr/bin/env python
print "Hello, world!"
๊ทธ๋ฐ๋ฐ ์ด ๋ค์๋ถํฐ ๋ค๋ค ์ ๊ฐ๊ฐ์ด ๋์ญ๋๋ค. ๋ณ์ (variable)์ ์ด๋ฆ์ ์ค ๋ณผ๊น์? ์ด ๋ ์ฝ๋ฉ ์คํ์ผ์ ๋ฐ๋ฅด๋ฉด Java๋ lowerCamelCase ํ์์ ๋ฐ๋ฅด๊ณ Python์ snake_case๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
Java:
public class HelloWorld
{
public static void main(String[] args)
{
String helloWorldMessage = "Hello, World!";
System.out.println(helloWorldMessage);
}
}
Python:
#!/usr/bin/env python
hello_world_message = "Hello, world!"
print hello_world_message
๋ฌผ๋ก , ์์ ๊ฒฝ์ฐ Java์์ hello_world_message ์ด๋ฆ์ ๋ณ์๋ฅผ ์จ๋ ๋๊ณ Python์์ helloWorldMessage ์ด๋ฆ์ ๋ณ์๋ฅผ ์จ๋ ์ปดํ์ผ์ด๋ ํ๋ก๊ทธ๋จ ์ํ์๋ ์๋ฌด๋ฐ ์ง์ฅ์ด ์์ต๋๋ค. Helloworldmessage๋ HELLO ๊ฐ์ ์ด๋ฆ์ ๋ง์๋๋ก ์ค๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
ํ์ง๋ง, ์ฌ๊ธฐ์ Java์ ๊ฒฝ์ฐ๋ lowerCamelCase๋ก ๋ณ์๋ช
์ ์ฐ๊ธฐ๋ก ๊ฐ๋ฐ์๋ค๊ฐ์ ๊ด์ต(practice)์ ๋ง๋ค์๊ณ Python์ ๊ฒฝ์ฐ๋ snake_case๋ก ๋จ์ด ์ฌ์ด์ _๋ฅผ ๋ฃ์ด์ ๋ณ์๋ช
์ ์ฐ๊ธฐ๋ก ํ๋ค๋ ์ ์ ์ค์ํ๊ฒ ๋ณด์
์ผ ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋๊น, ๊ฐ๋ฐ์๋ค์ ์ด ๊ด์ต์ ๋ฐ๋ผ์ผ ํ๋ ๊ฒ์
๋๋ค.
์ฐธ๊ณ ๋ก Java์ฝ๋์์ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ์ด๋ฆ์ธ class ์ด๋ฆ์ HelloWorld๋ก UpperCamelCase ๋ฐฉ์์ ์ผ์์ ์ ์ ์์ต๋๋ค. ์ด๋ฐ ์ธ์ธํ ๊ฒ๊น์ง ์ ๊ฒฝ์ ์จ์ผ ํ๋ ๊ฒ์ด์ฃ .
๊ทธ๋ฆฌ๊ณ ๋ณ์(variable)์ ๊ฐ(value)๋ฅผ ์ ์ฅํ๋ = ์ฐ์ฐ์ ์ฃผ์์ ๊ณต๋ฐฑ์ ํ๋์ฉ ๋ฃ์ ๊ฒ๋ ์ฃผ์ ๊น๊ฒ ๋ณด์
์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋๊น helloWorldMessage="Hello, World!";์ ๊ฐ์ ํํ์ ์ฐ๋ ๊ฒ์ ์ง์ํ๋ค๋ ๊ฒ์ด์ฃ .
์ ์ด๋ฐ ๊ฒ๊น์ง ์ธ์ธํ๊ฒ ๋ฐ์ง๊น์? ์ฐ์ฐ์ด ์กฐ๊ธ๋ง ๋ณต์กํด์ง๋ง ์ด๋ ์ต๋๋ค. 0 ๋ถํฐ 9๊น์ง ํ๋ฉด์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ๋ณด์ฃ . ๋ณ์ i๋ฅผ 0๋ถํฐ ์์ํด์ 10๋ณด๋ค ์์ ๊ฒฝ์ฐ ๊ณ์ 1 ์ฉ ์ฆ๊ฐ์ํค๋ฉฐ System.out.println(i);๋ฅผ ์คํํ๋ ์ฝ๋์
๋๋ค.
Java:
public class PrintNumbers
{
public static void main(String[] args)
{
for (int i = 0; i < 10; ++i)
{
System.out.println(i);
}
}
}
์ฌ๊ธฐ์ for (int i = 0; i < 10; ++i) ๋ถ๋ถ์ ๋ณด๊ฒ ์ต๋๋ค. ์ปดํ์ผ๋ฌ ์
์ฅ์์๋ ์๋ ์ธ ๋ฌธ์ฅ์ด ๋๊ฐ์ต๋๋ค. ํ์ง๋ง ์ฌ๋ ๋์๋ =๋ < ์ฐ์ฐ์ ์ฃผ์์ ๊ณต๋ฐฑ์ ์ ์ ํ ์ด ์ ์ผ ์ ๋ฌธ์ฅ์ด ๊ฐ์ฅ ๊ฐ๋
์ฑ์ด ์ข๊ธฐ ๋ง๋ จ์
๋๋ค.
for (int i = 0; i < 10; ++i)for (int i=0;i<10;++i)for (int i = 0 ; i < 10 ; ++ i)์ด๊ฒ ๋ง๊ณ ๋ ์ฝ๋ฉ ์คํ์ผ์ ๋ํด์๋ ์ ๊ฒฝ์จ์ผ ํ ๊ฒ๋ค์ด ๋ง์ต๋๋ค๋ง ์ผ๋จ ๊ฐ๋จํ ์ฌ๊ธฐ์ ์ค์ด๊ตฌ์. ๋ค์ ํ๋ฒ ์ข์ ์ฝ๋ฉ ์คํ์ผ ์ต๊ด์ ๋ค๋ฅธ ์ฌ๋๋ ์ฝ๊ธฐ ์ข์ ์ฝ๋๋ฅผ ๋ง๋๋๋ฐ ํ์๋ถ๊ฐ๊ฒฐ์ด๋ผ๋ ์ฌ์ค์ ๊ผญ ๊ธฐ์ตํ์๊ธฐ ๋ฐ๋๋๋ค. ๋ํ, ๋ค๋ฅธ ์ฌ๋์ด ์ง ์ฝ๋์ ๋ด ์ฝ๋๋ฅผ ์์ ๋ ๊ฐ์ ์ฝ๋ฉ ์คํ์ผ์ ์ฐ๋ ๊ฒ์ด ์ผ๋ง๋ ์์ฐ์ฑ์ ํฅ์์ํค๋ ๊ฐ๋ ๋์ค์ ๊ผญ ์ฒดํฌํด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
์ฐธ๊ณ ๋ก ๋ง์ด ์ฐ์ด๋ Java์ Python์ ์ฝ๋ฉ ์คํ์ผ ๊ฐ์ด๋๋ฅผ ๋งํฌํด ๋ด ๋๋ค.
vim์ด๋ emacs๋ฅผ ์ฐ์์ผ๋ฐ์ ์ผ๋ก๋ ์ฝ๋ฉ์ ๋ฐฐ์ธ ๋ ์ฒ์๋ถํฐ ์๋ฐ(Java)์ ์ดํด๋ฆฝ์ค(Eclipse)์ ๊ฐ์ด ์๋ํฐ(editor), ์ปดํ์ผ๋ฌ(compiler), ๋๋ฒ๊ฑฐ(debugger)๊ฐ ํตํฉ๋ ํตํฉํ๊ฒฝ(IDE, integrated development environment)์ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค. ์ผ๊ฒฌ ํตํฉํ๊ฒฝ์ ์ง๊ด์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ปดํ์ผ, ๋๋ฒ๊น ์์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํด ์ฃผ๋ ๊น๋ญ์ ์ฝ๋ฉ ์ด๋ณด์์๊ฒ ์ข์ ๊ฒ ๊ฐ์ง๋ง ์ ๊ฐ ๋ณด๊ธฐ์๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ๊ณผ์ ์ ํธ๋ฆฌํจ์ผ๋ก ์ง๋์น๊ฒ ์ถ์ํ ์ํค๋ ๊น๋ญ์ ์ด๋ณด์์๊ฒ๋ ๊ทธ๋ค์ง ์ข์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ, ์ด๋ณด์๊ฐ ์ฐ๊ธฐ์๋ ๊ธฐ๋ฅ์ด ๋ง๊ธฐ๋ ํฉ๋๋ค.
๊ทธ๋ผ ์ด๋ค ๊ฐ๋ฐํ๊ฒฝ์ ์ฐ๋ ๊ฒ์ด ์ข์๊น์? ์ฒ์ ์ฝ๋ฉ์ ํ์๋ ๋ถ๋ค์ ๋ฆฌ๋ ์ค ์๋ฒ์ ๋ฆฌ๋ ์ค ๋ช ๋ น ํ๋กฌํํธ (CLI, command line interface)๋ก ์ ์ํด์ ํ ์คํธ ์๋ํฐ(text editor)๋ฅผ ์ด์ฉํด ํ๋ก๊ทธ๋๋ฐ์ ์์ํ์๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ๋ช ๋ ์ด๋ฅผ ํ๋ํ๋ ์์ผ๋ก ํ์ดํํ๋ฉด์ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ์ฒด์ ๊ณผ์ ์ ์ตํ๋ ๊ฒ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํนํ, ์ฒ์์๋ ์ปดํ์ผ ์์ ์ ์์ผ๋ก ํ๋ฉด์ ์ด๋ค ํ์ผ์ ์ปดํ์ผ ์ํค๋ฉด ์ด๋ค ํํ์ ์คํ ํ์ผ์ด ๋์ค๋์ง ์์์ผ ํ๊ฒ ์ต๋๋ค.
๋ํ, ๋ฆฌ๋ ์ค ์๋ฒ ๊ด๋ฆฌ์ ๊ถํ์ด ์๋ ๊ฒฝ์ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ด๋ฆฌ์ ๊ถํ์ด ํ์ํ ๋ช ๋ น๋ค์ ์์ฃผ ์ค์ตํด ๋ณผ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ๋ฆฌ๋ ์ค ๋ช ๋ น ํ๋กฌํํธ๋ฅผ ๋ง์ด ์ฐ๋ ํ๊ฒฝ์ด ํ์ํ์ง์.
๊ทธ๋ฆฌ๊ณ ๊ฒ๋ณด๊ธฐ์๋ ๋ฌ๋ฆฌ ํฐ๋ฏธ๋๊ณผ ๊ฐ์ ํ
์คํธ์์ ์ฐ๋ ์๋ํฐ๋ค์ด ์กฐ๊ธ๋ง ์ฌ์ฉ๋ฒ์ ๋ฐฐ์ฐ๋ฉด ์ฐ๊ธฐ๊ฐ ํธํด์ง๋ ํน์ฑ์ด ์์ต๋๋ค. ๋ํ์ ์ธ ๊ฒ์ด vim๊ณผ emacs ์๋ํฐ์ ์๋์ฐ๋งฅ์ธ๋ฐ์. ์ด๋ค ์๋ํฐ๋ฅผ ์ฐ์๋ ์ง ์๊ด์ ์์ต๋๋ค๋ง ๋ ์๋ํฐ ๋ชจ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์ฐ์ค๋ฅผ ์ฐ์ง ๋ชปํ๊ณ ํค๋ณด๋ ๋ช
๋ น์ด๋ฅผ ํ๋ํ๋ ์ตํ์
์ผ ํ๋ ๋ถํธ์ด ์์ต๋๋ค.
vim์ ๊ฒฝ์ฐ๋ ๋ ๋ฌธํ์ ์ธ ์ถฉ๊ฒฉ(?)๋ ์์ต๋๋ค. ์๋ํฐ๋ฅผ ์คํ์ํค๊ณ ๋์ ํค๋ฅผ ๋๋ฌ๋ณด๋ฉด ํ์ดํ์ด ์๋ฉ๋๋ค. ์ด๊ฒ์ vim ์๋ํฐ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํธ์ง ๋ชจ๋์ ๋ช
๋ น์ด ๋ชจ๋๋ฅผ ๊ตฌ๋ถํ๊ธฐ ๋๋ฌธ์ธ๋ฐ์. i ํค๋ฅผ ๋๋ฌ ๋ช
๋ น์ด ๋ชจ๋์์ ํธ์ง ๋ชจ๋๋ก ์ง์
ํด์ผ ํ์ดํ์ด ๊ฐ๋ฅํ๊ฒ ์ต๋๋ค.
๋ช
๋ น์ด ๋ชจ๋์ ๋ํด ๊ฐ๋จํ ์ค๋ช
์ ๋๋ฆฌ๋ฉด ์ด๋ ์ต๋๋ค. vim์์๋ ์ปค์ ์ด๋ํค๊ฐ h, j, k, l ์
๋๋ค. ๊ทธ๋ฌ๋๊น ๊ฐ์ j๋ผ๋ ๋ช
๋ น์ด ๋ชจ๋์์๋ ์๋ซ์ชฝ ์ปค์ํค๊ฐ ๋๊ณ ํธ์ง ๋ชจ๋์์๋ j ๊ธ์๊ฐ ๋๋ ๊ฒ์ด์ฃ .
์ด๋ฐ vim์์ ๋ช
๋ น์ด ๋ชจ๋์ ํธ์ง ๋ชจ๋์ ๊ตฌ๋ถ์ ์กฐ๊ธ๋ง ์ต๊ด์ด ๋์๋ฉด ์์ฃผ ํธ๋ฆฌํด์ง๋ ๊ธฐํ์(?)์ ๊ฒฝํํ์ค ์ ์์ต๋๋ค. ์ผ๋ก๋ก j, k ํค๋ก ์ปค์๋ฅผ ์๋์๋ก ์ด๋ํ๋ ๊ฒ์ด ํค๋ณด๋ ์ค๋ฅธ์ชฝ์ ์น์ฐ์น ์ปค์ํค๋ก ์์ ๋ป๋ ๊ฒ๋ณด๋ค ํธ๋ฆฌํ๊ธฐ ๋ง๋ จ์ด์ง์.
์ ๊ฐ vim ์ฌ์ฉ์์ด๋ค๋ณด๋ vim ์๊ธฐ๊ฐ ๊ธธ์ด์ง๊ณ ์๋๋ฐ์. emacs ์ญ์ ์ข์ ์๋ํฐ์
๋๋ค. emacs๋ ์๋ํฐ์ด์ง๋ง ๊ทธ ๊ธฐ๋ฅ์ด ๋ฐฉ๋ํ๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ๋ณด๋ฉด ํตํฉํ๊ฒฝ๋ณด๋ค ๋ ๋์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํ๋ค๊ณ ๋ณผ ์๋ ์๊ฒ ์ต๋๋ค. emacs๋ ์ ๊ฐ ๊ธฐ์ด ์ด์์ ์ ๋ชจ๋ฅด๋ ๊น๋ญ์ ์ผ๋จ ์๊ฐ๋ง์ผ๋ก ๊ทธ์น๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ๋ก ๋ฆฌ๋
์ค ๋ช
๋ น์ด ํ๋กฌํํธ์์ ์ปค์ ์ด๋ ๋ช
๋ น์ emacs ๋จ์ถ๊ธฐ๋ฅผ ์ด์ฉํฉ๋๋ค. ctrl-a๊ฐ Home ํค ์ญํ ์, ctrl-e๊ฐ End ํค ์ญํ ์ ํฉ๋๋ค. ctrl-p๋ ์์ชฝ ํ์ดํ ํค ์ญํ , ctrl-n์ ์๋ซ์ชฝ ํ์ดํ ํค ์ญํ ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ Python์ ์ฐ์๋ ๋ถ๋ค์ ์๋ํฐ์ ์ถ๊ฐํด์ Python ๋ช
๋ น์ด ํ ์ค ๋จ์๋ก ๋ฐ๋ก๋ฐ๋ก ์คํ์์ผ๋ณผ ์ ์๋ ์ธํฐํ๋ฆฌํฐ(interpreter) ์ญ์ ์ค์ํ๊ฒ ์ง์. ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ python ์ธํฐํ๋ฆฌํฐ๋ณด๋ค๋ ipython ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฐ์๊ธธ ์ถ์ฒํฉ๋๋ค. ipython์์๋ ๋ช
๋ น์ด์ ์๊น์ ์
ํ์ฃผ๋ syntax highlighting, ํญ ํค๋ฅผ ๋๋ฅด๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ๋ช
๋ น์ด๋ ๋ณ์ ์ด๋ฆ์ ์์์ ์ถ์ธกํด์ฃผ๋ name completion ๊ธฐ๋ฅ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. ์๋ ํ๋ฉด์ ๋ณด์์ง์.
๋ง์ง๋ง์ผ๋ก vim์ด๋ emacs์ ์๋ฌด๋๋ ์ ์์ด ์๋์๋ ๋ถ๋ค์ ์ ๊ฐ ๊ณผ๊ฑฐ ํฌ์คํ
์์ ์ ๊น ์ธ๊ธํ๋ nano ์๋ํฐ๋ฅผ ์ฐ์๊ธธ ์ถ์ฒํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ , Eclipse์ ๊ฐ์ ํตํฉํ๊ฒฝ์ ๊ฐ๋ฐํ๋ ํ๋ก์ ํธ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด์ ์์ค ์ฝ๋ ํ์ผ์ ์ซ์๊ฐ ๋ง์์ง๋ฉด ๊ทธ๋๋ถํฐ ์ฐ์
๋ ๋๊ฒ ์ต๋๋ค. ๋ณ์๋ ํด๋์ค, ๋ชจ๋ ์ด๋ฆ์ ํ๋๋ง ๊ณ ์น๋ฉด ์์ค์ฝ๋ ์ ์ฒด์ ๊ฑธ์ณ์ ์๋์ผ๋ก ๊ณ ์ณ์ฃผ๋ refactoring๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํตํฉํ๊ฒฝ์ ์จ์ผ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์์ผ๋๊น์.
์ฃผ์(comment)์ ๋ฐ๋ฅธ ์: ์ถ์ฒ
/**
* The HelloWorld program implements an application that
* simply displays "Hello, World!" to the standard output.
*
* @author foobar
* @version 1.0
* @since 2018-04-17
*/
public class HelloWorld
{
public static void main(String[] args)
{
/* Prints Hello, World! on standard output. */
String helloWorldMessage = "Hello, World!"; // assigns "Hello, World!"
System.out.println(helloWorldMessage);
}
}
์ฐ์ , ์์ค ์ฝ๋ ๋ด๋ถ์ ์ฃผ์(comment)์ ๋ง์ด ๋ค๋ ์ต๊ด์ ๋ค์ด์ ์ผ ํฉ๋๋ค. ์ต๊ณ ์ comment๋ ์ ๋ง๋ ์์ค ์ฝ๋๋ผ๋ ์๊ธฐ๊ฐ ์๊ธฐ๋ ํ์ง๋ง ๊ทธ ์ ๋์ ๊ณ ํ์ง ์์ค ์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ด๋ ์ฌ๋๋ค์ ์ง๊ทนํ ๋๋ญ ๋๋ค. ๋ฐ๋ผ์, ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ช ์ด ํ์ํ ๋๋ง๋ค comment๋ฅผ ๋ค๋ ์ต๊ด์ ๋ค์ด๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฝ๋ฉ์ ํ๋ค ๋ณด๋ฉด ๋๊ตฌ๋ ๊ฒฝํํ๊ฒ ๋๋ ๊ฒ์ด ์ด๋ ์ต๋๋ค. ์ผ์ด๋ ์ ๋ ์ง๋์ ์์ ์ด ์ง ์์ค ์ฝ๋๋ฅผ ๋ณด๋ฉด ๊ฐ์ด ์ค์ง ์์ต๋๋ค. ์ด๋ด ๋ comment๋ ์์ผ๋ฉด ๋๊ฐํ์ฃ . ์ ๋ง๋ก ๋ด๊ฐ ์ง ์ฝ๋๋ฅผ ๋ด๊ฐ ๋ชป ์์๋ณด๋ ํฉ๋นํ ์ํฉ์ด ์ ๊ฐ๋๋๊น์. ํ์ง๋ง, ์ฌ๋์ ๋ง๊ฐ์ ๋๋ฌผ์ ๋๋ค. ๋ด๊ฐ ์ด ์ฝ๋๋ ์ ํ์ฉํ๋ ค๋ฉด comment๋ฅผ ์ ๋ค๋ ๊ฒ์ด ์ผ์์ด ๋์ด์ผ ํฉ๋๋ค. ํ๋ฌผ๋ฉฐ ๋จ์ด ๋ณด๊ฒ ๋ ์ฝ๋๋ผ๋ฉด ๋๋์ฑ comment์ ์ ๊ฒฝ์ ์จ์ผ ํ๊ฒ ์ง์.
๊ทธ ๋ค์์ผ๋ก ์คํ ์์ค ํ๋ก์ ํธ ํธ์คํ ์๋น์ค์ธ GitHub.com์ ๋ด ํ๋ก์ ํธ ํ์ด์ง๋ฅผ ๊ฐ์คํ ๋ค์ ๊ฐ๋ฐ ๋ฌธ์๋ฅผ ์จ ๋ณด๊ธฐ๋ฅผ ์ถ์ฒํฉ๋๋ค. ์ฒ์์๋ ๊ฐ๋ฐ ๋ฌธ์๋ผ๊ณ ํด๋ ํ๋ก์ ํธ ์๊ฐ์ธ README.md(md๋ markdown์ ์ค์์ ๋๋ค)๋ฅผ ์ฐ๋ ๊ฒ์ด ๋๋ถ๋ถ์ด๊ฒ ์ต๋๋ค๋ง ๋ค๋ฅธ ์ฌ๋์ด ์ฝ์ด๋ณผ ํ์๊ฐ ์๋ ๊ฐ๋ฐ ๋ฌธ์๋ฅผ ์์ฑํด ๋ณธ๋ค๋ ๊ฒ์ ํฐ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ, GitHub์ ๋ฌธ์ ํฌ๋งท์ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ์๊ณผ ๋์ผํ markdown์ ์ฌ์ฉํฉ๋๋ค.
GitHub.com์ ํ๋ก์ ํธ ํ์ด์ง๋ฅผ ์คํํ๊ธฐ ์ํด์๋ ์์ค ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ git ๋ช
๋ น์ด ์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ฐฐ์์ผ ํฉ๋๋ค. git ๋ช
๋ น์ผ๋ก ์์ค์ฝ๋๋ฅผ ์
๋ก๋/๋ค์ด๋ก๋ ํ๋ ๊ฒ์ด ์์ํ๊ณ ๋ณต์กํ ์ ์์ต๋๋ค๋ง ๋ค๋ฅธ ๊ฐ๋ฐ์์์ ํ์
์ ํ๋ ค๋ฉด ์ธ์ ๊ฐ๋ ๋ฐ๋์ ์ต๋ํด์ผ ํ๋ ๊ฒ์ด git ๋ช
๋ น์
๋๋ค. ์ฐ์ , ํผ์๋ง ์ฐ๋ ํ๋ก์ ํธ๋ผ๋ git ๋ช
๋ น์ผ๋ก ํ๋ก์ ํธ ์ ์ฅ์ (repository)์ ์์ค ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ฒดํฌ์ธ(checkin)/์ฒดํฌ์์(checkout)์ ํ๋ ์ต๊ด์ ๋ค์ฌ๋ณผ ํ์๊ฐ ์์ต๋๋ค.
GitHub ์ฌ์ฉ ๋ฐฉ๋ฒ ๊ฐ์ข๋ก๋ ์๋ ๋งํฌ๋ฅผ ์ถ์ฒํฉ๋๋ค.
์ง๊ธ๊น์ง ์ฝ๋ฉ์ ๋ฐฐ์ฐ๋๋ฐ ๋์์ด ๋๋ ์ต๊ด๊ณผ ์ฌ๊ธฐ์ ํ์ํ ๋๊ตฌ๋ค์ ๋ํด ๊ฐ๋จํ ์์๋ดค์ต๋๋ค. ์ ์ฒด์ ์ผ๋ก ์ฝ๋ฉ ์คํ์ผ๊ณผ ๊ฐ์ด ์ฝ๋ฉ์ ์ง์ ์ ์ผ๋ก ์ฐ๊ด์ด ๋๋ ์ต๊ด๊ณผ ๊ฐ๋ฐ ๋ฌธ์ ์์ฑ๊ณผ ๊ฐ์ด ์ฝ๋ฉ์ ๋์์ฃผ๋ ์ต๊ด์ผ๋ก ๋๋ ์ ์๊ฒ ์ต๋๋ค.
์ ์ ํ ์ฝ๋ฉ ์คํ์ผ์ ๊ฐ์ถ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ๋ ๊ฐ๋ฐ ๋๊ตฌ์ ๋์์ด ํ์ํ๋ฐ์. ์ฒ์ ์์ํ์ค ๋๋ Eclipse์ ๊ฐ์ ํตํฉํ๊ฒฝ(integrated development environment)๋ณด๋ค ํฐ๋ฏธ๋ ๋ชจ๋์์ vim์ด๋ emacs ์๋ํฐ๋ฅผ ์จ์ ์ฝ๋ฉ์ ํ๊ธฐ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค.
๊ฐ๋ฐ ๋ฌธ์ ์์ฑ๊ณผ ์์ค์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ์ํด์๋ GitHub.com์ ํ๋ก์ ํธ๋ฅผ ๊ฐ์คํ๊ณ git ๋ช
๋ น์ ์ด์ฉํด์ ์์ค์ฝ๋ ๊ด๋ฆฌ๋ฅผ ํ๋ ์ต๊ด์ ๋ค์ด๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก GitHub.com์ ์ฌ๋ผ์ ์๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค๊ณผ ํ์
(collaboration)์ ํ๋ ๋ฐฉ๋ฒ์ ์ฒ์๋ถํฐ ์ต๋ํ ์ ์๊ฒ ์ต๋๋ค.
์ฝ์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ค์ ๊ธ์์ ๋ ๋ต๊ฒ ์ต๋๋ค.