# [Java] Java μ–Έμ–΄μ˜ νŠΉμ§•, μž₯점에 λŒ€ν•΄
Study Repository

[Java] Java μ–Έμ–΄μ˜ νŠΉμ§•, μž₯점에 λŒ€ν•΄

by rlaehddnd0422

JavaλŠ” JVM(μžλ°” 가상 λ¨Έμ‹ , Java Virtual Machine)을 μ‚¬μš©ν•˜μ—¬ μš΄μ˜μ²΄μ œμ™€ λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•  수 μžˆλŠ” μ–Έμ–΄λ‘œ, μ–΄λŠ μš΄μ˜μ²΄μ œμ—μ„œλ‚˜ 같은 ν˜•νƒœλ‘œ 싀행될 수 μžˆλŠ” 객체 지ν–₯ μ–Έμ–΄μž…λ‹ˆλ‹€.

 

νŠΉμ§•

1. 객체지ν–₯μ–Έμ–΄

  • 객체지ν–₯ μ–Έμ–΄μ˜ νŠΉμ§•μΈ μΊ‘μŠν™”, 상속성, λ‹€ν˜•μ„±μ„ μ™„λ²½ν•˜κ²Œ μ§€μ›ν•©λ‹ˆλ‹€.
    • μ—¬κΈ°μ„œ λ§ν•˜λŠ” μΊ‘μŠν™”, 상속성, λ‹€ν˜•μ„±μ€ 객체지ν–₯κ°œλ…μ— λŒ€ν•΄ λ‹€λ£° λ•Œ μžμ„Ένžˆ μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
    • μš°μ„ μ μœΌλ‘œ μžλ°”λŠ” 이런 νŠΉμ§•λ“€μ΄ μžˆλ‹€ μ •λ„λ§Œ μ•Œμ•„λ‘μ–΄λ„ μ’‹μŠ΅λ‹ˆλ‹€. 
  • 객체λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ 섀계도인 클래슀λ₯Ό μž‘μ„±ν•˜κ³ , 객체와 객체 즉 ν΄λž˜μŠ€μ™€ 클래슀λ₯Ό μ—°κ²°ν•΄μ„œ λͺ©μ μ— 맞게 ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 것이 Java μ–Έμ–΄κ°€ κ°€μ§€λŠ” 큰 νŠΉμ§•μž…λ‹ˆλ‹€.

 

2. λͺ¨λ“  μš΄μ˜μ²΄μ œμ—μ„œ μ‹€ν–‰ κ°€λŠ₯

  • μžλ°”λŠ” JVM을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μœ„μ—μ„œ λ§ν–ˆλ“― μžλ°” μ‹€ν–‰ν™˜κ²½μ΄ μ„€μΉ˜λ˜μ–΄ μžˆλŠ” λͺ¨λ“  μš΄μ˜μ²΄μ œμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

3. ν•˜μ΄λΈŒλ¦¬λ“œ μ–Έμ–΄

  • 컴파일 언어인 λ™μ‹œμ— 인터프리터 μ–Έμ–΄λ‘œ μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜μ—¬ 이진 파일(class)을 λ§Œλ“  λ‹€μŒ μžλ°” λŸ°νƒ€μž„μ΄ 이진 νŒŒμΌμ„ μΈν„°ν”„λ¦¬νŠΈ ν•˜λ©΄μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • μžλ°”λŠ” 컴파일 언어에 κ°€κΉŒμš΄ 속도와 μ‹œμŠ€ν…œ 독립성을 얻을 수 μžˆλ‹€.
μ½”λ“œ μž‘μ„± 및 μ‹€ν–‰ ➑️ (compile) ➑️ 이진 파일 생성 ➑️ JVM에 μ˜ν•΄ λ‹€μ‹œ κΈ°κ³„μ–΄λ‘œ λ³€ν™˜(interprete)λ˜μ–΄ 컴퓨터에 전달

μžλ°”λŠ” 컴파일과, 인터프리터λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜μ—¬ ν•˜μ΄λΈŒλ¦¬λ“œ μ–Έμ–΄λΌλŠ” μ΄λ¦„μœΌλ‘œ λΆˆλ¦½λ‹ˆλ‹€.

 

컴파일 μ–Έμ–΄λž€?

컴파일 μ–Έμ–΄μ˜ μž‘λ™ 방식

μ»΄νŒŒμΌμ€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό Runtime(μ‹€ν–‰μ‹œμ ) 이전에 κΈ°κ³„μ–΄λ‘œ ν•΄μ„ν•˜λŠ” μž‘μ—…λ°©μ‹μž…λ‹ˆλ‹€.

μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ›μ‹œμ½”λ“œλ₯Ό μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ 기계어 λ˜λŠ” 컴퓨터가 μ‚¬μš©ν•  수 μžˆλŠ” μ½”λ“œ(λͺ©μ  ν”„λ‘œκ·Έλž¨, μ‹€ν–‰ 파일)으둜 λ²ˆμ—­ν•΄μ€λ‹ˆλ‹€.

 

λŒ€ν‘œμ μœΌλ‘œ 컴파일 μ–Έμ–΄μ—λŠ” C++, C, Pascal이 μžˆμŠ΅λ‹ˆλ‹€.

 

인터프리터 μ–Έμ–΄λž€?

인터프리터 μ–Έμ–΄μ˜ μž‘λ™ 방식

인터프리터 μ–Έμ–΄λŠ” κΈ°κ³„μ–΄λ‘œ λ³€ν™˜κ³Όμ • 없이 λŸ°νƒ€μž„ μ‹œμ μ— μ†ŒμŠ€μ½”λ“œλ₯Ό ν•œ 쀄씩 읽어가며 ν”„λ‘œκ·Έλž¨μ„ κ΅¬λ™ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

κΈ°κ³„μ–΄λ‘œ λ°”λ‘œ λ³€ν™˜ν•˜μ§€ μ•Šκ³  λŸ°νƒ€μž„μ— μ¦‰μ‹œ ν•΄μ„ν•˜κΈ° λ•Œλ¬Έμ— λ°”λ‘œ Compile 방식에 λΉ„ν•΄ μ‹€ν–‰μ‹œκ°„μ΄ λŠλ¦¬μ§€λ§Œ, λŸ°νƒ€μž„μ— μ‹€μ‹œκ°„ 디버깅 및 μ†ŒμŠ€μ½”λ“œ μˆ˜μ •μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€. 

 

λŒ€ν‘œμ μœΌλ‘œ 인터프리터 μ–Έμ–΄μ—λŠ” Python, Ruby, JSκ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

ν•˜μ΄λΈŒλ¦¬λ“œ μ–Έμ–΄λž€?

ν•˜μ΄λΈŒλ¦¬λ“œ 방식은 컴파일 방식과 μΈν„°ν”„λ¦¬νŠΈ 방식을 μ„žμ–΄λ†“μ€ λ°©μ‹μž…λ‹ˆλ‹€.

 

JavaλŠ” μš΄μ˜μ²΄μ œμ™€ ν•˜λ“œμ›¨μ–΄λ‘œλΆ€ν„° 영ν–₯을 λ°›λŠ” 뢀뢄듀을 μ—†μ• κ³ μž, μ»΄νŒŒμΌμ„ 톡해 μ†ŒμŠ€μ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜μ—¬ μ΄μ§„νŒŒμΌμ„ λ§Œλ“€κ³  - 이후 μ‹€ν–‰ μ‹œμ μ—μ„œ 인터프리터λ₯Ό 톡해 이 μ΄μ§„νŒŒμΌμ„ ν•œ 쀄씩 읽어 μ‹€ν–‰ν•˜λŠ” ν•˜μ΄λΈŒλ¦¬λ“œ 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ ν•˜μ΄λΈŒλ¦¬λ“œ 방식 덕뢄에 μš΄μ˜μ²΄μ œμ—μ„œ λ…λ¦½μ μ΄λΌλŠ” μž₯점을 κ°€μ§€μ§€λ§Œ, 싀행을 μœ„ν•΄ JVM을 거치기 λ•Œλ¬Έμ— λ‹€λ₯Έ 언어에 λΉ„ν•΄ μ‹€ν–‰ 속도가 λŠλ¦¬λ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€. ( 컴파일 λ°©μ‹λ³΄λ‹€λŠ” 느리긴 ν•˜μ§€λ§Œ, κ·Έλž˜λ„ 이진 νŒŒμΌμ„ λ²ˆμ—­ν•˜κΈ° λ•Œλ¬Έμ— μΈν„°ν”„λ¦¬νŠΈ 방식보단 λΉ λ₯΄λ‹€. )

 

ν•œλ§ˆλ””λ‘œ μ •μ˜ν•˜λ©΄ μžλ°”λŠ” "μ–΄λŠ μš΄μ˜μ²΄μ œμ—μ„œλ‚˜ μ‹€ν–‰ν•˜λ‹€λŠ” μž₯μ λŒ€μ‹ , 속도가 λŠλ¦¬λ‹€"λŠ” νŠΉμ§•μ„ κ°€μ§‘λ‹ˆλ‹€.

 

ν•˜μ΄λΈŒλ¦¬λ“œ μ–Έμ–΄μ—λŠ” Java 이외에도 C#이 μžˆμŠ΅λ‹ˆλ‹€.

 

4. λ©”λͺ¨λ¦¬λ₯Ό 직접 κ΄€λ¦¬ν•œλ‹€

  • κ°œλ°œμžκ°€ 직접 λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•˜μ§€ μ•Šμ„ λ•Œ, μžλ°”κ°€ 직접 λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  • 예λ₯Όλ“€μ–΄ 객체 생성 μ‹œ μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ°Ύμ•„ ν• λ‹Ήν•˜κ³ , 가비지 컬렉터λ₯Ό μ‹€ν–‰μ‚¬μΌœ μžλ™μœΌλ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 객체λ₯Ό μ œκ±°ν•˜λŠ” λΆ€λΆ„μ—μ„œ 이 점을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

5. μ˜€ν”ˆμ†ŒμŠ€ 라이브러리의 풍뢀함

  • μžλ°”λŠ” μ˜€ν”ˆμ†ŒμŠ€ 언어이고 μžλ°” ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•˜λŠ” 라이브러리 λ˜ν•œ μ˜€ν”ˆμ†ŒμŠ€μ˜ 양이 λ°©λŒ€ν•˜μ—¬, κ³ κΈ‰κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” λŒ€μ‹  κ²€μ¦λœ μ˜€ν”ˆμ†ŒμŠ€ 라이브러리λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

 

6. λ©€ν‹° μ“°λ ˆλ“œ 지원

  • λ©€ν‹° μ“°λ ˆλ“œ κΈ°λŠ₯은 λ‹€λ₯Έ μ–Έμ–΄μ—μ„œλŠ” μš΄μ˜μ²΄μ œμ— 따라 κ΅¬ν˜„λ°©λ²•λ„ μ²˜λ¦¬λ°©μ‹λ„ λ‹€λ₯΄μ§€λ§Œ μžλ°”μ—μ„œ κ°œλ°œλ˜λŠ” λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž¨μ€ μ‹œμŠ€ν…œκ³ΌλŠ” 관계없이 κ΅¬ν˜„ κ°€λŠ₯ν•˜λ©°, κ΄€λ ¨λœ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ œκ³΅λ˜λ―€λ‘œ κ΅¬ν˜„μ΄ μ‰½μŠ΅λ‹ˆλ‹€. 
  • 그리고 μ—¬λŸ¬ μ“°λ ˆλ“œμ— λŒ€ν•œ μŠ€μΌ€μ₯΄λ§μ„ μžλ°”μ˜ 인터프리터가 λ‹΄λ‹Ήν•˜κ²Œ λ˜μ–΄ λ©€ν‹° μ“°λ ˆλ“œ κΈ°λŠ₯을 λ‹€λ₯Έ 언어에 λΉ„ν•΄ 비ꡐ적 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

7. λ„€νŠΈμ›Œν¬μ™€ λΆ„μ‚°μ²˜λ¦¬ 지원

  • 인터넷과 λŒ€κ·œλͺ¨ λΆ„μ‚°ν™˜κ²½μ„ 염두에 두어 λ‹€μ–‘ν•œ λ„€νŠΈμ›Œν¬ ν”„λ‘œκ·Έλž˜λ° 라이브러리λ₯Ό 톡해 비ꡐ적 짧은 μ‹œκ°„μ— λ„€νŠΈμ›Œν¬ κ΄€λ ¨ ν”„λ‘œκ·Έλž¨μ„ μ‰½κ²Œ κ°œλ°œν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€.

 

7. 동적 λ‘œλ”© 지원

  • μžλ°”λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ€ μ—¬λŸ¬ 클래슀둜 κ΅¬μ„±λ˜μ–΄ μžˆλŠ”λ°, μ‹€ν–‰ μ‹œμ— λͺ¨λ“  ν΄λž˜μŠ€κ°€ λ‘œλ”©λ˜λŠ” 것이 μ•„λ‹Œ, ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 ν•„μš”ν•œ μ‹œμ μ— 클래슀λ₯Ό λ‘œλ”©ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.

 


<참고 자료>

 

 

[Java] 컴파일 언어인가? 인터프리터 언어인가?

컴파일 μ–Έμ–΄ 컴파일 μ–Έμ–΄(compiled language)λŠ” κ΅¬ν˜„μ²΄λ“€μ΄ 일반적으둜 컴파일러(μ†ŒμŠ€ μ½”λ“œλ‘œλΆ€ν„° 기계어λ₯Ό μƒμ„±ν•΄λ‚΄λŠ” λ³€ν™˜κΈ°)μ΄λ©΄μ„œ 인터프리터(λŸ°νƒ€μž„ μ „ λ³€ν™˜ 과정을 κ±°μΉ˜μ§€ μ•ŠλŠ”, μ†ŒμŠ€ μ½”λ“œμ˜

rumor1993.tistory.com

 

 

[κ°œλ°œμΈν„΄] script 언어와 typeμ–Έμ–΄

μ•ˆλ…•ν•˜μ„Έμš”. R&D 개발 κ·Έλ£Ή 인턴 λ°•μ •ν˜„μž…λ‹ˆλ‹€. ν˜„μž¬ 인턴 κ³Όμ •μ˜ λ°±μ—”λ“œ μ»€λ¦¬ν˜λŸΌμ€ JavaScript둜 μ§„ν–‰λ˜κ³  μžˆλŠ”λ°μš”. 이번 μ£Όμ°¨μ—λŠ” JavaScript와 TypeScriptλ₯Ό λΉ„κ΅ν•΄λ³΄λ©΄μ„œ 두 μ–Έμ–΄μ˜ 차이점과 μ–Έμ–΄μ˜

blog.barogo.io

 

λΈ”λ‘œκ·Έμ˜ 정보

Study Repository

rlaehddnd0422

ν™œλ™ν•˜κΈ°