μƒˆμ†Œμ‹

Java

[JAVA] 01. μžλ°” ν”„λ‘œκ·Έλž˜λ° κ°œμš”

  • -

πŸ“Œ I. μžλ°” κ°œμš”

졜근 μ»΄ν“¨ν„°λŠ” μš°λ¦¬μ—κ²Œ μΉœμˆ™ν•œ PCλΆ€ν„°, 슀마트폰, νƒœλΈ”λ¦Ώ λ“±μœΌλ‘œ λ‹€μ–‘ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 컴퓨터 ν•˜λ“œμ›¨μ–΄λ₯Ό μž‘λ™μ‹œν‚€λŠ” 것을 μ†Œν”„νŠΈμ›¨μ–΄(software) ν˜Ήμ€ ν”„λ‘œκ·Έλž¨(program)이라고 λΆ€λ¦…λ‹ˆλ‹€. μ»΄ν“¨ν„°κ°€ μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” μ–Έμ–΄λ₯Ό ν”„λ‘œκ·Έλž˜λ° 언어라고 ν•©λ‹ˆλ‹€. ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” 0κ³Ό 1인 μ΄μ§„μˆ˜ λͺ…λ Ήμ–΄λ‘œ κ΅¬μ„±λœ κΈ°κ³„μ–΄(machine language)λ‘œλΆ€ν„° κ°€κΈ‰μ  ν‘œν˜„ν•˜κΈ° μ‰¬μš΄ 상징적 λ‹ˆλͺ¨λ‹‰ 기호λ₯Ό μ‚¬μš©ν•œ 언어인 μ–΄μ…ˆλΈ”리어(assembly language)둜 λ°œμ „ν–ˆμŠ΅λ‹ˆλ‹€. C언어와 같은 μ‚¬μš©μž μΉœν™”μ  μ–Έμ–΄λ‘œ μ§„ν™”ν•˜λ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” νŽΈμ˜μ„±μ„ μΆ”κ΅¬ν•˜λŠ” κ°μ²΄ 지ν–₯ μ–Έμ–΄κΉŒμ§€ λ°œμ „ν–ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬κ°€ μ•žμœΌλ‘œ 배울 μžλ°”(JAVA)λŠ” 객체지ν–₯μ–Έμ–΄μ˜ λŒ€ν‘œμ μΈ μ–Έμ–΄μž…λ‹ˆλ‹€.

πŸ“š 1. μžλ°”μ˜ 역사

1991λ…„, μ„ λ§ˆμ΄ν¬λ‘œμ‹œμŠ€ν…œμŠ€(SUN Microsystems)의 μ œμž„μŠ€ 고슬링(James Gosling)을 μ€‘μ‹¬μœΌλ‘œ κ°€μ „μ œν’ˆμ— μ‚¬μš©ν•  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ λ¬Έμ œμ μ„ λ³΄μ™„ν•˜λŠ” νŠΉμ§•μ„ κ°€μ‘ŒμŠ΅λ‹ˆλ‹€.

  • λ‹€μ‹œ μ»΄νŒŒμΌν•˜μ§€ μ•Šμ•„λ„ λ‹€λ₯Έ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” ν”Œλž«νΌ(Platform)에 독립적인 μ–Έμ–΄μž…λ‹ˆλ‹€.
  • λ‚΄μž₯ν˜• μ‹œμŠ€ν…œ(Embedded System)에 μ ν•©ν•˜κ²Œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ μ μŠ΅λ‹ˆλ‹€.
  • C++ μ–Έμ–΄λ₯Ό λͺ¨λΈλ‘œ ν•œ 객체지ν–₯적 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μž…λ‹ˆλ‹€.

이 μ–Έμ–΄κ°€ λ°œμ „ν•˜μ—¬ 1995λ…„ SunWorld 95μ—μ„œ μžλ°”(Java)λΌλŠ” μ΄λ¦„μœΌλ‘œ μƒˆλ‘œμš΄ κΈ°μˆ μ„ λ°œν‘œλ˜μ—ˆκ³ , μ›Ή 기반 μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ 많이 μ‚¬μš©λ˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 2009λ…„μ—λŠ” 였라클이 μ„ λ§ˆλ‹ˆν¬λ‘œμ‹œμŠ€ν…œμ¦ˆλ₯Ό μΈμˆ˜ν•˜λ©΄μ„œ μ˜€λΌν΄μ—μ„œ μžλ°”λ₯Ό μ œκ³΅ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“š 2. μžλ°” 개발 λͺ©μ 

  1. ν”Œλž«νΌ ν˜Έν™˜μ„± 문제의 ν•΄κ²°
    : μž¬μ»΄νŒŒμΌν•˜μ§€ μ•Šκ³  λ‹€λ₯Έ ν”Œλž«νΌμ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ μ–Έμ–΄κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

  2. ν”Œλž«νΌ 독립적인 μ–Έμ–΄
    : λͺ¨λ“  ν”Œλž«νΌμ—μ„œ ν˜Έν™˜μ„±μ„ κ°€μ Έ, λ„€νŠΈμ›Œν¬(μ›Ή)에 μ΅œμ ν™”ν•œ μ–Έμ–΄κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

  3. λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 적고 λ‹€μ–‘ν•œ ν”Œλž«νΌμ„ κ°–λŠ” κ°€μ „ μ œν’ˆμ— 적용
    : 적은 λ©”λͺ¨λ¦¬λ‘œ μ‚¬μš©κ°€λŠ₯ν•œ λ‚΄μž₯ν˜• μ‹œμŠ€ν…œμ— μ•Œλ§žμ€ μ–Έμ–΄κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

 


πŸ“Œ II.  μžλ°” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 방식

πŸ“š 1. κΈ°μ‘΄ μ–Έμ–΄μ˜ ν”Œλž«νΌ 쒅속성

κ°œλ°œμžλŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 문법에 λ§žμΆ”μ–΄  ν”„λ‘œκ·Έλž¨μ˜ 기초 섀계도와 같은 μ†ŒμŠ€μ½”λ“œ(Source Code)λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. JAVA μ–Έμ–΄λ§Œμ˜ νŠΉμ§•μ„ μœ„ν•΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 기초인 Cμ–Έμ–΄λ‘œ μž‘μ„±λœ μ†ŒμŠ€μ½”λ“œκ°€ μ‹€ν–‰νŒŒμΌμ΄ λ˜λŠ” 과정을 λ³΄μ—¬λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

  1. κ°œλ°œμžλŠ” Cμ–Έμ–΄ 문법에 λ§žμΆ”μ–΄ ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. μž‘μ„±λ˜λŠ” μ†ŒμŠ€μ½”λ“œλŠ” μ‚¬λžŒμ΄ μ•Œμ•„λ³΄κΈ° μ‰¬μš΄ κ³ κΈ‰μ–Έμ–΄λ‘œ μž‘μ„±λ©λ‹ˆλ‹€.
  2. μ»΄ν“¨ν„°λŠ” 0κ³Ό 1인 μ΄μ§„μˆ˜λ‘œ 된 λͺ…λ Ήμ–΄λ§Œ μ•Œμ•„λ“€μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.  Cμ–Έμ–΄λ‘œ μž‘μ„±λœ μ†ŒμŠ€μ½”λ“œλŠ” 컴파일러(Compiler)λΌλŠ” λ²ˆμ—­κΈ°μ— μ˜ν•˜μ—¬ ν•΄λ‹Ήν•˜λŠ” ν”Œλž«νΌμ΄ 이해할 수 μžˆλŠ” 기계어 μ½”λ“œλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ λ³€ν™˜λœ μ½”λ“œ νŒŒμΌμ„ 였브젝트 파일이라고 ν•©λ‹ˆλ‹€.
  3. ν•˜λ‚˜μ˜ μ™„μ„±λœ ν”„λ‘œκ·Έλž¨μ„ μœ„ν•΄μ„œλŠ” μˆ˜ν–‰μ— ν•„μš”ν•œ λͺ¨λ“  였브젝트 νŒŒμΌμ„ λͺ¨μ•„μ•Όν•©λ‹ˆλ‹€. 이 과정은 링컀(Linker)에 μ˜ν•΄ 이루어지고, 링컀가 λ§Œλ“€μ–΄μ€€ νŒŒμΌμ„ μ‹€ν–‰νŒŒμΌμ΄λΌκ³  ν•©λ‹ˆλ‹€.

2번 κ³Όμ •μ—μ„œ μ»΄νŒŒμΌλŸ¬λŠ” ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λŒ€μƒμ˜ 컴퓨터 CPUλ‚˜ 운영체제의 μ’…μ†μ μœΌλ‘œ μ†ŒμŠ€μ½”λ“œλ₯Ό λ²ˆμ—­ν•΄μ€€λ‹€κ³  ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ•Œλ¬Έμ— 기쑴의 μ–Έμ–΄λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ€ ν”Œλž«νΌ μ’…μ†μ μ΄λΌλŠ” 문제λ₯Ό κ°€μ§€κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“š 2. μžλ°”μ˜ ν”Œλž«νΌ 독립성

μžλ°”(JAVA)λŠ” λ‹€λ₯Έ μ–Έμ–΄λ“€κ³Ό λ‹€λ₯΄κ²Œ μžλ°” 가상 기계(JVM, Java Virtual Machine) 만 μ•Œμ•„λ“€μ„ 수 μžˆλŠ” λ°”μ΄νŠΈ μ½”λ“œ(Byte Code)둜 μ†ŒμŠ€μ½”λ“œλ₯Ό λ³€ν™˜ν•©λ‹ˆλ‹€. 이 νŒŒμΌμ€ μ»΄ν“¨ν„°μ˜ CPUμ—μ„œ 직접 μ‹€ν–‰λ˜λŠ” 것이 μ•„λ‹Œ JVM이 인터프리터 λ°©μ‹μœΌλ‘œ μ‹€ν–‰μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚€κ³ μž ν•˜λ©΄ JVM이 λ°”μ΄νŠΈ μ½”λ“œλ₯Ό κ° μš΄μ˜μ²΄μ œμ— μ•Œλ§žμ€ 기계어 μ½”λ“œλ‘œ λ³€ν™˜μ‹œν‚΅λ‹ˆλ‹€. 이λ₯Ό ν† ν•˜μ—¬ JVM이 μ„€μΉ˜λœ λͺ¨λ“  μ»΄ν“¨ν„°μ—μ„œλŠ” ν”Œλž«νΌ λ…λ¦½μ μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

 

* WORA (Write Once Run Anywhere)

  • ν•œ 번 μž‘μ„±λœ μ½”λ“œλŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ λ°”λ‘œ 싀행됨
  • κΈ°μ‘΄ μ–Έμ–΄μ˜ ν”Œλž«νΌ 쒅속성을 κ·Ήλ³΅ν•˜μ—¬, μš΄μ˜μ²΄μ œλ‚˜ ν•˜λ“œμ›¨μ–΄μ™€ 관계없이 μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚¬ 수 있음
  • μžλ°”μ†ŒμŠ€(.java)λ₯Ό 컴파일 ν•œ λͺ©μ  μ½”λ“œ(.class)λ₯Ό λ°”μ΄νŠΈ μ½”λ“œ(byte code)라고 ν•˜λ©°
    JVMμ—κ²Œ ν•΄μ„λ˜μ–΄ μ‹€ν–‰λ˜λ―€λ‘œ μžλ°” μ–Έμ–΄λ‘œ μž‘μ„±λœ μ½”λ“œλ“€μ΄ ν”Œλž«νΌ 독립성이 κ°€μ§€κ²Œ 함

* μžλ°” 가상 기계(JVM, Java Virtual Machine)

  • μžλ°” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ˜λŠ” 곡간
  • μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ μƒμ„±ν•œ λ°”μ΄νŠΈ μ½”λ“œλ₯Ό ν˜„μž¬ 컴퓨터가 인식할 수 μžˆλŠ” λͺ…λ ΉμœΌλ‘œ λ³€ν™˜ν•˜μ—¬ μ‹€ν–‰μ‹œν‚΅λ‹ˆλ‹€.

 

πŸ“š 3. μžλ°”μ˜ 개발 및 μ‹€ν–‰

* 개발

  • μžλ°” ν”„λ‘œκ·Έλž¨μ€ μ—¬λŸ¬ μžλ°” μ†ŒμŠ€μ½”λ“œ(.java)둜 λ‚˜λˆ„μ–΄ κ°œλ°œν•©λ‹ˆλ‹€.
  • λ°”μ΄νŠΈ μ½”λ“œλ₯Ό(.class)λ₯Ό ν•˜λ‚˜μ˜ μ‹€ν–‰ 파일둜 λ¬ΆλŠ” 링크 과정이 μ—†μŠ΅λ‹ˆλ‹€. 이 νŠΉμ§•μœΌλ‘œ μΈν•˜μ—¬ μžλ°” ν”„λ‘œκ·Έλž¨μ€ 적은 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘ν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

* μ‹€ν–‰

  • main() λ©”μ„œλ“œλ₯Ό 가진 ν΄λž˜μŠ€λΆ€ν„° 싀행이 μ‹œμž‘λ©λ‹ˆλ‹€.
  • JAVAλŠ” 링크 과정이 μ—†λŠ” λŒ€μ‹ μ— JVM이 ν•„μš”ν•  λ•Œλ§ˆλ‹€ λ‹€λ₯Έ λ°”μ΄νŠΈ μ½”λ“œλ₯Ό λ‘œλ”©ν•©λ‹ˆλ‹€.

 


 

πŸ“Œ III. μžλ°” ν”Œλž«νΌ

πŸ“š 1. μžλ°” API(Application Programming Interace)

μžλ°” API(Application Programming Interace)λŠ” JDK에 ν¬ν•¨λ˜μ–΄ μ£Όμš” κΈ°λŠ₯을 미리 κ΅¬ν˜„ν•΄λ†“μ€ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. κ°œλ°œμžλŠ” APIλ₯Ό μ΄μš©ν•˜μ—¬ 더 쉽고 λΉ λ₯΄κ²Œ ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 


πŸ“š 2. μžλ°” ν”Œλž«νΌ

μžλ°” ν”Œλž«νΌ(Java Platform)은 ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” ν•˜λ“œμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄ ν™˜κ²½μ„ λ§ν•©λ‹ˆλ‹€. μžλ°” ν”Œλž«νΌμ€ JRE(Java Runtime Environment) λ˜λŠ” JDK(Java Development Kit)만 μ„€μΉ˜ν•˜μ—¬λ„ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€. JREλŠ” μžλ°” μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ ν•„μš”ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ“€μΈ JVMκ³Ό μžλ°” APIκ°€ ν¬ν•¨λ˜μ–΄ 일반 μ‚¬μš©μžλŠ” JRE만 μžˆμ–΄λ„ μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. JDKλŠ” μžλ°” 개발자λ₯Ό μœ„ν•œ μƒμ—…μš© μ†Œν”„νŠΈμ›¨μ–΄λ‘œ κ°œλ°œλ„κ΅¬μ™€ JRE둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


πŸ“š 3. μžλ°” 배포판

μžλ°”λŠ” 개발 ν™˜κ²½μ— 따라 λ‹€μ–‘ν•œ 배포판이 μ œκ³΅λ©λ‹ˆλ‹€. 

  • Java EE(Enterprise Editon) : κΈ°μ—…μš© 배포판, κΈ°μ—…μš© μ‘μš© ν”„λ‘œκ·Έλž¨, μ›Ή μ„œλ²„ μ‘μš©ν”„λ‘œκ·Έλž¨ 등에 ν•„μš”ν•œ 개발 도ꡬ 및 라이브러리 제곡
  • Java ME(Micro Editon) : λͺ¨λ°”μΌμš© 배포판, μž„λ² λ””λ“œ μž₯μΉ˜μ—μ„œ μ‹€ν–‰λ˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨ κ°œλ°œμ‹œ μ‚¬μš©
  • Java SE(Standard Editon) : μžλ°” ν‘œμ€€ 배포판

πŸ“š 4. μžλ°” ν”„λ‘œκ·Έλž¨μ˜ μ’…λ₯˜

  • μžλ°” μ‘μš© ν”„λ‘œκ·Έλž¨ (Java Application)
    : λ…λ¦½μ μœΌλ‘œ 싀행될 수 μžˆλŠ” 일반 μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ§ν•©λ‹ˆλ‹€.
  • μžλ°” μ• ν”Œλ¦Ώ (Java Applet)
    : μ›Ή μ„œλ²„μ—μ„œ μ›Ή ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ „μ†Œμ˜€λ””μ–΄ μ›Ή λΈŒλΌμš°μ € μ•ˆμ—μ„œ μ‹€ν•΄μ˜€λ””λŠ” ν”„λ‘œκ·Έλž¨
  • μžλ°” μ„œλΈ”λ¦Ώ (Java Servlet)
    : μ›Ή μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜λŠ” μ„œλ²„μš© μžλ°” ν”„λ‘œκ·Έλž¨
  • JSP (Java Server Page)
    : HTML μ•ˆμ— μžλ°” μ½”λ“œλ₯Ό 포함, μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜λ˜μ–΄ 싀행됨
  • μ•ˆλ“œλ‘œμ΄λ“œ(Android) SDK

πŸ“š 5. μžλ°”μ˜ νŠΉμ§•

μ•žμœΌλ‘œ μš°λ¦¬κ°€ λ°°μ›Œλ³Ό μžλ°”μ˜ 큰 νŠΉμ§•λ“€μž…λ‹ˆλ‹€.

  • ν”Œλž«νΌ 독립적
  • 객체지ν–₯
  • 클래슀둜  μΊ‘μŠν™”
  • 운영체제의  λ„움없이  μžμ²΄μ μœΌλ‘œ  λ©€ν‹°μŠ€λ ˆλ“œ  μ§€μ›
  • 가비지  μ»¬λ ‰μ…˜
    : ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λŠ” JVM이 μžλ™μœΌλ‘œ νšŒμˆ˜ν•©λ‹ˆλ‹€.
  • μ•ˆμ „ν•˜κ³   ν”„λ‘œκ·Έλž¨  μž‘성이  μ‰¬μ›€
    : νƒ€μž… 체킹이 μ—„κ²©ν•˜κ³  λͺ…μ‹œμ μΈ ν¬μΈν„°μ˜ κ°œλ…μ΄ μ—†μŠ΅λ‹ˆλ‹€.
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.