Skip to content

Latest commit

Β 

History

History
265 lines (195 loc) Β· 18.2 KB

1.md

File metadata and controls

265 lines (195 loc) Β· 18.2 KB

μžλ°” μ–Έμ–΄μ˜ ꡬ쑰와 κΈ°λ³Έ 문법

μž‘μ„±μž : μ„œκ·Έλ¦Ό

Table of Contents

Java μ–Έμ–΄μ˜ 탄생 λ°°κ²½

μ¬λ§ˆμ΄ν¬λ‘œμ‹œμŠ€ν…œμ¦ˆμ˜ Green Projectμ—μ„œ μ‹œμž‘

Green Projectμ—μ„œλŠ” κ°€μ •μš© μ „μžκΈ°κΈ°μ˜ 톡합적 μ œμ–΄λ₯Ό μœ„ν•΄, μ „μžκΈ°κΈ°μ—μ„œ μ‚¬μš©λ˜λŠ” μž‘μ€ 컴퓨터 μ–Έμ–΄λ₯Ό μ œμ•ˆν–ˆλ‹€. κ°€μ •μš© μ „μžκΈ°κΈ°μ— μ‚¬μš©λ˜λŠ” powerλ‚˜ memoryκ°€ μ—΄μ•…ν–ˆκΈ° λ•Œλ¬Έμ— 여기에 μ‚¬μš©λ˜λŠ” μ–Έμ–΄λŠ” μž‘κ³  κ²¬κ³ ν•˜κ³ , μ‹ λ’°ν•  수 μžˆλŠ” μ½”λ“œλ₯Ό ν•„μš”λ‘œ ν–ˆλ‹€. λ˜ν•œ λ‹€λ₯Έ CPUκ°€ 선택될 수 있기 λ•Œλ¬Έμ— νŠΉμ • λ””λ°”μ΄μŠ€μ— μ’…μ†λ˜λ©΄ μ•ˆ λ˜μ—ˆλ‹€. λ”°λΌμ„œ Virtual Machineμ—μ„œ λ™μž‘ν•˜λŠ” 쀑간 μ½”λ“œλ₯Ό μƒμ„±ν•˜μ—¬ 이식성이 높은 μ–Έμ–΄λ₯Ό λ””μžμΈν•˜κ²Œ λ˜μ—ˆλ‹€.

μ΄ˆκΈ°μ—λŠ” 절차 지ν–₯ + 객체 지ν–₯ 언어인 C++ 기반으둜 κ°œλ°œλ˜μ—ˆλ‹€. ν•˜μ§€λ§Œ C++ μ–Έμ–΄κ°€ 가진 ν•œκ³„μ— λΆ€λ”ͺν˜€ μ™„λ²½ν•œ 객체 지ν–₯ 언어인 Oak μ–Έμ–΄λ₯Ό κ°œλ°œν•˜μ˜€κ³ , 이미 μ‘΄μž¬ν•˜λŠ” 이름이라 μΆ”ν›„ Java둜 이름이 λ°”λ€Œκ²Œ λ˜μ—ˆλ‹€.

κ·Έ ν›„ Javaλ₯Ό 기반으둜 ν•œ HotJavaλΌλŠ” μ›Ή λΈŒλΌμš°μ €λ₯Ό μ œμž‘ν•˜μ˜€λŠ”λ°, Java의 Applet μ΄λΌλŠ” κΈ°λŠ₯을 보여주기 μœ„ν•΄ λΈŒλΌμš°μ €κ°€ 쀑간 μ½”λ“œ(Bytecode)λ₯Ό 해석할 수 μžˆλ„λ‘ λ§Œλ“€μ—ˆλ‹€. 이 λ•Œ μžλ°” 뢐이 μΌμ–΄λ‚˜ Java μ–Έμ–΄κ°€ κΈ‰κ²©νžˆ ν™•μ‚°λ˜μ—ˆλ‹€. 이후 λ§Žμ€ 업체듀이 Javaλ₯Ό μ§€μ›ν•˜κΈ° μ‹œμž‘ν•˜μ˜€κ³ , 1996λ…„ μžλ°” 2 ν”Œλž«νΌμ΄λΌκ³  λͺ…λͺ…λ˜μ—ˆλ˜ μžλ°” 버전 1.2κ°€ μΆœμ‹œλ˜μ—ˆλ‹€. 그리고 ν˜„μž¬κΉŒμ§€ λ§Žμ€ 버전듀이 μΆœμ‹œλ˜κ³  μžˆλ‹€.

Java의 10가지 νŠΉμ§•

  1. λ‹¨μˆœ (Simple)
    C(절차 지ν–₯) + C++(객체 지ν–₯) μ–Έμ–΄λ₯Ό 기초둜 ν•˜μ§€λ§Œ, Cμ–Έμ–΄μ˜ λ³΅μž‘ν•œ κΈ°λŠ₯을 μ œμ™Έν•˜μ—¬ μ½”λ“œλ₯Ό λ‹¨μˆœν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ‹€. 특히 가비지 컬렉터(Garbage Collector)에 μ˜ν•œ μžλ™ λ©”λͺ¨λ¦¬ κ΄€λ¦¬λ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ ν•΄μ œλ₯Ό 신경쓰지 μ•Šμ•„λ„ λœλ‹€.
  2. 객체지ν–₯ (Object-Oriented)
    μžλ°”λŠ” 객체 지ν–₯ μ–Έμ–΄λ‘œ, μ–Έμ–΄λΌλŠ” 객체λ₯Ό μ‚¬μš©ν•΄ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λ„λ‘ ν•œλ‹€. 이둜써 μž¬μ‚¬μš©μ„±(Reusability) 을 높일 수 μžˆλ‹€. μ½”λ“œμ˜ μž¬μ‚¬μš©, 객체의 μž¬μ‚¬μš© 뿐만 μ•„λ‹ˆλΌ μˆ˜λ§Žμ€ 클래슀 λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ„ API둜 μ œκ³΅ν•¨μœΌλ‘œμ„œ μž¬μ‚¬μš©μ„±μ„ 높이고 μžˆλ‹€.
  3. λΆ„μ‚° 처리 (Distributed)
    JavaλŠ” λΆ„μ‚° ν™˜κ²½μ—μ„œ TCP/IP λ“±μ˜ ν”„λ‘œν† μ½œμ„ 톡해 효율적으둜 μ‹€ν–‰ν•  수 μžˆλ„λ‘ μ„€κ³„λœ 언어이닀. JavaλŠ” λ‹€μŒμ„ μ§€μ›ν•œλ‹€.
    • TCP/IP λ„€νŠΈμ›Œν¬ κΈ°λŠ₯ λ‚΄μž₯
    • HTTP, FTP λ“±κ³Ό 같은 ν”„λ‘œν† μ½œμ— λŒ€ν•œ 라이브러리 제곡
    • μ„œλ‘œ λ‹€λ₯Έ 컴퓨터 μƒμ˜ 객체듀도 μ›κ²©μœΌλ‘œ ν˜ΈμΆœν•˜μ—¬ μ‹€ν–‰ν•  수 μžˆλŠ” 원격 λ©”μ„œλ“œ 호좜과 κ΄€λ ¨λœ RMI(Remote Method Invocation) κΈ°λŠ₯의 라이브러리 제곡
  4. 인터프리터 (Interpreter)
    ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” 인터프리터 μ–Έμ–΄, 컴파일 μ–Έμ–΄λ‘œ λ‚˜λ‰œλ‹€. μžλ°”λŠ” 컴파일 언어인 λ™μ‹œμ— 인터프리터 언어이며, 인터프리터에 μ˜ν•΄ μ‹€ν–‰λœλ‹€. μžλ°” ν”„λ‘œκ·Έλž¨μ€ λ‹€μŒκ³Ό 같은 μ‹€ν–‰ 과정을 κ±°μΉœλ‹€.
    • μ†ŒμŠ€μ½”λ“œ(.java) β–ΆοΈŽ 컴파일(Compile): javac β–ΆοΈŽ μ€‘κ°„μ½”λ“œ(.class): λ°”μ΄νŠΈ μ½”λ“œ, 클래슀 파일 β–ΆοΈŽ κΈ°κ³„μ–΄λ‘œ 해석(Interprete): java β–ΆοΈŽ μ‹€ν–‰
  5. 견고 (Robust)
    λ‹€μ–‘ν•œ ν”Œλž«νΌ(컴퓨터) μƒμ—μ„œ μ‹€ν–‰λ˜κΈ° μœ„ν•΄μ„œλŠ” 높은 신뒰성이 μ€‘μš”ν•˜λ‹€. μžλ°”λŠ” λ‹€μŒκ³Ό 같은 κΈ°λŠ₯듀을 μ§€μ›ν•¨μœΌλ‘œμ„œ 높은 신뒰성을 κ΅¬ν˜„ν•˜μ˜€λ‹€.
    • 포인터λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŒ
    • 가비지 μ»¬λ ‰μ…˜(Garbage Collector) κΈ°λŠ₯
    • μ—„κ²©ν•œ 데이터 νƒ€μž…μ˜ 검사 : μ—λŸ¬ μ‘°κΈ° 발견
    • Runtime μ—λŸ¬ 처리
  6. μ•ˆμ „ (Secure)
    컴파일 μ‹œ μ—„κ²©ν•œ 검사λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ λ°œμƒν•  수 μžˆλŠ” μž₯μ• λ₯Ό 미리 λ°©μ§€ν•œλ‹€. μ†ŒμŠ€μ½”λ“œκ°€ 컴파일된 .class ν˜•νƒœμ˜ λ°”μ΄νŠΈμ½”λ“œλŠ” 클래슀 λ‘œλ”, λ°”μ΄νŠΈ μ½”λ“œ 검증기λ₯Ό κ±°μΉœλ‹€. 이 λ•Œ λ¬Έμ œκ°€ μ—†μœΌλ©΄ μΈν„°ν”„λ¦¬ν„°λ‘œ λ„˜κ²¨ μ‹€ν–‰ν•˜κ²Œ λœλ‹€.
    • 클래슀 λ‘œλ” : μ½”λ“œκ°€ μžμ‹ /λ‹€λ₯Έ μ»΄ν“¨ν„°μ—μ„œ 온 것인지 νŒλ‹¨ν•˜κ³  μ½”λ“œλ₯Ό λΆ„λ¦¬ν•œλ‹€.
    • λ°”μ΄νŠΈ μ½”λ“œ 검증기 : μ½”λ“œλ₯Ό κ²€μ¦ν•˜μ—¬ λ¬Έμ œκ°€ 없을 μ‹œ μΈν„°ν”„λ¦¬ν„°λ‘œ λ„˜κΈ΄λ‹€.
  7. ν”Œλž«νΌ 독립적 (Architecture Neutral)
    운영체제, CPU λ“±μ˜ ν•˜λ“œμ›¨μ–΄ 사양에 관계 없이 싀행될 수 μžˆλ‹€. μž‘μ„±λœ μžλ°” ν”„λ‘œν”„λž¨μ€ μžλ°” 컴파일러λ₯Ό 거쳐 μžλ°” 가상 λ¨Έμ‹ μ—μ„œ κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­λ˜κ²Œ λœλ‹€. λ²ˆμ—­λœ 기계어 μ½”λ“œλŠ” ν•˜λ“œμ›¨μ–΄ 사양에 관계 없이 λ™μΌν•˜κ²Œ μ‹€ν–‰λœλ‹€.
  8. 높은 μ„±λŠ₯ (High Performance)
    가비지 μ»¬λ ‰μ…˜(Garbage Collection) κΈ°λŠ₯이 μΆ”κ°€λ˜μ–΄ μžˆμ–΄ μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬ 관리가 κ°€λŠ₯ν•˜λ‹€. μ΄λŠ” λ©”λͺ¨λ¦¬κ°€ ν• λ‹Ήλœ 객체의 μƒνƒœλ₯Ό μΆ”μ ν•˜μ—¬ 더 이상 μ°Έμ‘°λ˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜μ—¬ λΆˆν•„μš”ν•œ λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό λ°©μ§€ν•˜λŠ” κΈ°λŠ₯이닀.
  9. λ©€ν‹°μŠ€λ ˆλ“œ (Multithread)
    μžλ°”λŠ” λ©€ν‹°μŠ€λ ˆλ“œλ₯Ό μ§€μ›ν•œλ‹€. μ΄λŠ” ν•œ λ²ˆμ— μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μˆ˜ν–‰λ˜λŠ” κ³Όμ •μœΌλ‘œ, ν•˜λ‚˜μ˜ CPUκ°€ μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ„ λ™μ‹œμ— μˆ˜ν–‰ν•˜λ„λ‘ ν•¨μœΌλ‘œμ„œ μˆ˜ν–‰ 속도λ₯Ό λΉ λ₯΄κ²Œ ν•œλ‹€.
  10. 동적 (Dynamic)
    μžλ°”λŠ” λ³€ν™”λ˜λŠ” ν™˜κ²½μ— 잘 μ μ‘ν•˜λ„λ‘ μ„€κ³„λœ 언어이닀. λ”°λΌμ„œ 기쑴의 ν”„λ‘œκ·Έλž¨μ— 영ν–₯을 주지 μ•Šκ³  λΌμ΄λΈŒλŸ¬λ¦¬μ— μƒˆλ‘œμš΄ λ©”μ„œλ“œλ‚˜ 속성듀을 μΆ”κ°€ν•  수 있으며, ν”„λ‘œκ·Έλž¨ κ°„ 라이브러리의 연결을 Runtime에 μˆ˜ν–‰ν•¨μœΌλ‘œμ¨ 라이브러리의 λ³€ν™”λ₯Ό κ³§λ°”λ‘œ μ μš©ν•  수 μžˆλ‹€.

Java ν”Œλž«νΌ

ν”Œλž«νΌ(Platform)μ΄λž€, ν”„λ‘œκ·Έλž¨μ΄ 싀행될 수 μžˆλŠ” HW 및 SW ν™˜κ²½μ„ μ˜λ―Έν•œλ‹€.

일반적인 ν”Œλž«νΌμ€ ν•˜λ“œμ›¨μ–΄ 및 ν•˜λ“œμ›¨μ–΄λ₯Ό μ œμ–΄ν•˜λŠ” 운영체제둜 κ΅¬μ„±λ˜μ–΄ μžˆμ§€λ§Œ, μžλ°” ν”Œλž«νΌμ€ μ†Œν”„νŠΈμ›¨μ–΄λ§ŒμœΌλ‘œ κ΅¬μ„±λœλ‹€. μžλ°” ν”Œλž«νΌμ€ 일반적으둜 JDK(Java Development Kit)λΌλŠ” 툴둜 μ„€μΉ˜λœλ‹€.

μžλ°” ν”Œλž«νΌμ˜ μ’…λ₯˜

  • Java SE (Java 2 Platform Standard Edition)
    κ°€μž₯ 기본이 λ˜λŠ” μ—λ””μ…˜, μžλ°” μ–Έμ–΄ λŒ€λΆ€λΆ„μ˜ νŒ¨ν‚€μ§€κ°€ ν¬ν•¨λœλ‹€.
  • Java EE (Java 2 Platform Enterprise Edition)
    ν˜„μ—…μ—μ„œ μ‚¬μš©λ˜λŠ” API듀이 μ§‘μ•½λœ μ—λ””μ…˜μ΄λ‹€. (JSP, Servlet, JDBC λ“±)
  • Java ME (Java 2 Platform Micro Edition)
    λͺ¨λ°”일 κΈ°κΈ° λ“±μ—μ„œ μ‚¬μš©λ˜λŠ” APIκ°€ ν¬ν•¨λœ μ—λ””μ…˜μ΄λ‹€.

μžλ°” ν”Œλž«νΌμ˜ ꡬ쑰

μžλ°” ν”„λ‘œκ·Έλž¨μ€ μžλ°” 가상 λ¨Έμ‹  μœ„μ—μ„œ λ™μž‘ν•œλ‹€. μžλ°” 가상 λ¨Έμ‹ μ—λŠ” μžλ°” API (μžλ°” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 데 기본적으둜 ν™œμš©ν•  수 μžˆλŠ” 클래슀 라이브러리, 즉 ν‘œμ€€ API 라이브러리)κ°€ μ œκ³΅λœλ‹€.

image

μžλ°” 가상 λ¨Έμ‹ (JVM, Java Virtual Machine) 은 μžλ°” ν”„λ‘œκ·Έλž¨κ³Ό 운영체제 쀑간에 μ‘΄μž¬ν•˜μ—¬ μ„œλ‘œλ₯Ό λΆ„λ¦¬ν•¨μœΌλ‘œμ¨, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μš΄μ˜μ²΄μ œμ— 영ν–₯ 받지 μ•Šκ³  λ™μž‘ν•  수 μžˆλŠ” ν™˜κ²½μ„ μ œκ³΅ν•œλ‹€. 단, JVM은 μš΄μ˜μ²΄μ œμ™€ μ§μ ‘μ μœΌλ‘œ 톡신을 ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μš΄μ˜μ²΄μ œμ— λ§žλŠ” JVM을 μ„€μΉ˜ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

μžλ°” API(Application Programming Interface) λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν•„μš”λ‘œ ν•˜λŠ” 기본적인 클래슀(Class)듀을 κ±°λŒ€ν•œ 라이브러리둜 미리 λ§Œλ“€μ–΄μ„œ μ œκ³΅ν•œλ‹€. μžλ°” μ–Έμ–΄ μžμ²΄λŠ” μž‘κ³  λ‹¨μˆœν•œ ꡬ쑰λ₯Ό κ°–μ§€λ§Œ, λ§Žμ€ κΈ°λŠ₯듀을 APIμ—μ„œ μ œκ³΅ν•˜κ³  μžˆλ‹€. μžλ°” APIλŠ” κ΄€λ ¨λœ κΈ°λŠ₯의 ν΄λž˜μŠ€λ“€μ„ λ¬Άμ–΄ νŒ¨ν‚€μ§€μ˜ ν˜•νƒœλ‘œ μ œκ³΅ν•œλ‹€. (μ£Όμš” νŒ¨ν‚€μ§€ : java.applet, java.awt, java.io, java.lang, java.net, javax.swing, java.util)

Java ν”„λ‘œκ·Έλž¨ ꡬ쑰

  • μžλ°” 클래슀(class) λŠ” μžλ°” ν”„λ‘œκ·Έλž¨μ˜ μ΅œμ†Œ ꡬ성 λ‹¨μœ„λ‘œ, μ„ μ–Έλœ 클래슀 내뢀에 싀행에 ν•„μš”ν•œ λ³€μˆ˜λ‚˜ λ©”μ„œλ“œ 등이 μ •μ˜λœλ‹€. 일반적으둜 μžλ°” ν”„λ‘œκ·Έλž¨μ€ ν•˜λ‚˜μ˜ .java νŒŒμΌμ— ν•˜λ‚˜μ˜ 클래슀 μ •μ˜λ₯Ό μ›μΉ™μœΌλ‘œ ν•œλ‹€.
  • μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 은 λ°”μ΄νŠΈ μ½”λ“œλ‘œ λ²ˆμ—­λœ 후에 λ°”λ‘œ μ‹€ν–‰ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€. 클래슀 내에 main() λ©”μ„œλ“œλ₯Ό 가지고 μžˆμ–΄μ•Ό ν•œλ‹€.
  • μžλ°”λŠ” 블둝({}) 으둜 μžλ°” λ¬Έμž₯λ“€μ˜ 집합을 ν‘œν˜„ν•œλ‹€. λΈ”λ‘μ˜ μ‹œμž‘κ³Ό 끝이 짝을 이루지 μ•ŠμœΌλ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•˜λ©°, 클래슀, λ©”μ„œλ“œ, μžλ°” ꡬ문(if, for, try-catch λ“±)에 μ‚¬μš©λœλ‹€.
  • μžλ°” λ¬Έμž₯은 μ„Έλ―Έμ½œλ‘ (;) 을 μ‚¬μš©ν•΄ λ¬Έμž₯듀을 κ΅¬λΆ„ν•œλ‹€.
public class 클래슀λͺ… {
  // λ³€μˆ˜ μ •μ˜
  // λ©”μ„œλ“œ μ •μ˜
  public static void main(String args[]) {
    // 싀행될 ν”„λ‘œκ·Έλž¨ μ½”λ“œ
  }
}

Java 데이터 νƒ€μž…κ³Ό λ³€μˆ˜

  • 데이터 νƒ€μž…μ€ λ°μ΄ν„°μ˜ 성격을 κ·œμ •ν•œλ‹€.
  • μ‚¬μš©ν•  데이터λ₯Ό λ³€μˆ˜μ— μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•¨μœΌλ‘œμ¨ λ°μ΄ν„°μ˜ 의미λ₯Ό μ •ν™•ν•˜κ²Œ ν•΄μ„ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€.

데이터 νƒ€μž…

ν‘œν˜„ν˜•νƒœ 데이터 νƒ€μž… 크기 ν‘œν˜„ λ²”μœ„ (μžλ™ μ΄ˆκΈ°ν™” μ‹œ) μ΄ˆκΈ°κ°’
λ…Όλ¦Ώκ°’ boolean 1bit true/false false
단일 문자 char 16bit (2byte) '\u0000' ~ '\uffff' '\u0000' (Null)
μ •μˆ˜ byte 8bit (1byte) -2^7 ~ 2^7-1 (-128 ~ 127) 0
μ •μˆ˜ short 16bit (2byte) -2^15 ~ 2^15-1 (-32768 ~ 32767) 0
μ •μˆ˜ int 32bit (4byte) -2^31 ~ 2^31-1 (μ•½ -21μ–΅ ~ 21μ–΅) 0
μ •μˆ˜ long 64bit (8byte) -2^63 ~ 2^63-1 0L
μ‹€μˆ˜ float 32bit (4byte) 1.4E-45 ~ 3.4028235E38 0.0F
μ‹€μˆ˜ double 64bit (8byte) 4.9E-324 ~ 1.7976931348623157E308 0.0D

* μ •μˆ˜ : λΆ€ν˜Έκ°€ μžˆλŠ” μ •μˆ˜, ν˜•μ„ λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ intκ°€ κΈ°λ³Έν˜•
* μ‹€μˆ˜ : λΆ€ν˜Έκ°€ μžˆλŠ” λΆ€λ™μ†Œμˆ˜μ  μ‹€μˆ˜, ν˜•μ„ λͺ…μ‹œν•˜μ§€ μ•ŠμœΌλ©΄ double이 κΈ°λ³Έν˜•
(λΆ€λ™μ†Œμˆ˜μ μ΄λž€, 컴퓨터가 μ†Œμˆ˜μ μ΄ ν¬ν•¨λœ μ‹€μˆ˜λ₯Ό ν‘œν˜„ν•˜λŠ” 방식 쀑 ν•˜λ‚˜μ΄λ‹€. μ΄λŠ” κ³ μ •μ†Œμˆ˜μ κ³Ό 달리 μ†Œμˆ˜μ μ„ 자유둜이 움직일 수 μžˆμ–΄μ„œ ν‘œν˜„ν•  수 μžˆλŠ” 수의 λ²”μœ„κ°€ 맀우 λ„“λ‹€λŠ” μž₯점이 μžˆλ‹€.)
* μ΄ˆκΈ°ν™” : λ©”μ„œλ“œ(ν•¨μˆ˜) μ•ˆμ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μΈ μ§€μ—­λ³€μˆ˜λŠ” μžλ™μœΌλ‘œ μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠλŠ”λ‹€.
* μ°Έμ‘°ν˜•(Reference Type) λ³€μˆ˜μ˜ μ΄ˆκΈ°κ°’ : null

데이터 νƒ€μž…μ˜ λ²”μœ„ 초과 μ‹œ λ°œμƒν•˜λŠ” 였λ₯˜

  • 컴파일 였λ₯˜ : λ³€μˆ˜ μ΄ˆκΈ°ν™” μ‹œ λ²”μœ„λ₯Ό μ΄ˆκ³Όν•˜λŠ” 경우 λ°œμƒ
  • λŸ°νƒ€μž„ 였λ₯˜ : μ—°μ‚° 결과둜 λ²”μœ„λ₯Ό μ΄ˆκ³Όν•˜λŠ” 경우 λ°œμƒ

데이터 νƒ€μž…μ˜ λ³€ν™˜, ν˜•λ³€ν™˜

λ³€μˆ˜μ˜ νƒ€μž…μ„ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ λ³€κ²½ν•˜κ³ μž ν•  λ•Œ, ν˜•λ³€ν™˜ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ λ³€ν™˜ν•  수 μžˆλ‹€. μž‘μ€ 데이터 νƒ€μž…μ—μ„œ 큰 데이터 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것을 λ¬΅μ‹œμ  ν˜•λ³€ν™˜(Promotion), κ·Έ λ°˜λŒ€λ₯Ό λͺ…μ‹œμ  ν˜•λ³€ν™˜(Demotion) 이라고 ν•œλ‹€.

  • λ¬΅μ‹œμ  ν˜•λ³€ν™˜(Promotion) : 데이터 μ†μ‹€μ˜ μš°λ €κ°€ μ—†μ–΄ μžλ™ μΊμŠ€νŒ… κ°€λŠ₯ν•˜λ‹€. (μžλ™ ν˜•λ³€ν™˜)

    int age = 25;
    double avgAge = age; // double avgAge = (double)age;
    • μœ„μ™€ 같이 ν˜•λ³€ν™˜ μ—°μ‚°μžμΈ (double)을 μƒλž΅ν•  수 μžˆλ‹€.
    • 단, λ‹€μŒμ˜ κ·œμΉ™μ— 따라 μžλ™ ν˜•λ³€ν™˜μ΄ 이루어진닀.
      • byte -> short -> int -> long -> float -> double 순
      • char -> int -> long -> float -> double 순
  • λͺ…μ‹œμ  ν˜•λ³€ν™˜(Demotion) : 더 μž‘μ€ λ²”μœ„λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데이터 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜κΈ° λ•Œλ¬Έμ— 데이터 μ†μ‹€μ˜ μš°λ €κ°€ μžˆμ–΄ λͺ…μ‹œμ  μΊμŠ€νŒ…μ΄ ν•„μš”ν•˜λ‹€. (μΆ•μ†Œ ν˜•λ³€ν™˜)

    double avgAge = 24.56;
    int age = (int)avgAge;
    • μœ„μ™€ 같이 ν˜•λ³€ν™˜ μ—°μ‚°μžλ₯Ό λͺ…μ‹œν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

    • 단, 데이터 νƒ€μž…μ΄ μΆ•μ†Œλ˜μ–΄ λ³€ν™˜λœ 후에도 ν•΄λ‹Ή 값을 ν‘œν˜„ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. λ‹€μŒμ€ μ˜¬λ°”λ₯΄μ§€ λͺ»ν•œ μ˜ˆμ΄λ‹€.

      int sum = 128
      byte data = (byte)sum // -128

λ³€μˆ˜

  • λ³€μˆ˜λŠ” 컴퓨터 λ‚΄λΆ€μ˜ 데이터와 1:1 λŒ€μ‘λ˜μ–΄ λ³€μˆ˜λ₯Ό 톡해 λ©”λͺ¨λ¦¬μƒμ˜ 데이터에 μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
  • κΈ°λ³Έν˜•(Primitive Type)κ³Ό μ°Έμ‘°ν˜•(Reference Type) 두 가지 λ³€μˆ˜κ°€ μ‘΄μž¬ν•œλ‹€.
  • μ „μ—­(Global) λ³€μˆ˜μ™€ 지역(Local) λ³€μˆ˜λ‘œ μ„ μ–Έν•  수 μžˆλ‹€.
  • λ³€μˆ˜λŠ” μžμ‹ μ΄ μ†ν•œ 블둝({})을 λ²—μ–΄λ‚˜λ©΄ μ‚¬μš©μ΄ λΆˆκ°€ν•˜λ‹€.

μ „μ—­(Global) λ³€μˆ˜μ™€ 지역(Local) λ³€μˆ˜

  • μ „μ—­(Global) λ³€μˆ˜ : 클래슀 μ„ μ–ΈλΆ€ 밑에 μ„ μ–Έλœ λ³€μˆ˜λ‘œ, μ—¬λŸ¬ λ©”μ„œλ“œμ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.
  • 지역(Local) λ³€μˆ˜ : λ©”μ„œλ“œ μ„ μ–ΈλΆ€ λ°‘ λ˜λŠ” λ©”μ„œλ“œ λ§€κ°œλ³€μˆ˜λ‘œ μ„ μ–Έλœ λ³€μˆ˜λ‘œ, ν•΄λ‹Ή λ³€μˆ˜κ°€ μ„ μ–Έλœ λ©”μ„œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

λ³€μˆ˜ μ„ μ–Έ

  • μžλ°” 가상 λ¨Έμ‹ (JVM)μ—κ²Œ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 할당을 μš”μ²­ν•˜λŠ” 것이닀.
  • 데이터가 ν•„μš”λ‘œ ν•˜λŠ” 크기의 λ©”λͺ¨λ¦¬ 할당을 μœ„ν•΄ 데이터 νƒ€μž…μ„ λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.

Java μ—°μ‚°μž

μ‚°μˆ  μ—°μ‚°μž

  • μ •μˆ˜ν˜•, μ‹€μˆ˜ν˜•μ— μ‚¬μš©λ¨
  • 증감 μ—°μ‚°μž : ++, -- (단항)
  • λΆ€ν˜Έ μ—°μ‚°μž : +, -, *, / (이항)
  • λ‚˜λ¨Έμ§€ μ—°μ‚°μž : % (이항)

비ꡐ μ—°μ‚°μž

  • λŒ€μ†Œ λΉ„κ΅λ‚˜ 객체의 νƒ€μž… 비ꡐ 등에 μ‚¬μš©λ¨
  • 비ꡐ 연산을 μˆ˜ν–‰ν•œ 결과둜 boolean νƒ€μž…μ˜ κ²°κ³Όλ₯Ό 리턴함
  • >, >=, <, <=, ==, !=, instanceof
    • κ°’1 instanceof κ°’2 : κ°’1이 κ°’2 데이터 νƒ€μž…μ˜ 객체인 경우 true λ°˜ν™˜

논리 μ—°μ‚°μž

  • boolean 데이터 νƒ€μž…μ— 적용되며, boolean νƒ€μž…μ˜ κ²°κ³Όλ₯Ό 리턴함
  • &, &&, |, ||, !
    • κ°’1 && κ°’2의 경우, κ°’1이 false인 경우 κ°’2λ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•Šκ³  falseλ₯Ό λ¦¬ν„΄ν•œλ‹€.
    • κ°’1 || κ°’2의 경우, κ°’1이 true인 경우 κ°’2λ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•Šκ³  trueλ₯Ό λ¦¬ν„΄ν•œλ‹€.
    • &, | μ—°μ‚°μžλŠ” λͺ¨λ“  쑰건을 λ‹€ ν™•μΈν•œ ν›„ κ·Έ κ²°κ³Όλ₯Ό λ¦¬ν„΄ν•œλ‹€.

λΉ„νŠΈ μ—°μ‚°μž

  • 값을 λΉ„νŠΈ(bit)둜 μ—°μ‚°ν•˜λŠ” μ—°μ‚°μž
  • λ©”λͺ¨λ¦¬λ₯Ό μ΅œλŒ€ν•œ 효율적으둜 ν™œμš©ν•΄μ•Ό ν•˜λŠ” 경우 λΉ„νŠΈ λ‹¨μœ„λ‘œ 데이터λ₯Ό 관리해야 ν•œλ‹€.
  • & 논리곱(and), | 논리합(or), ^ 배타 논리합(exclusive or, XOR), ~ 보수(not)
  • >>, >>>, << μ‹œν”„νŠΈ
    • κ°’1 >> κ°’2 : κ°’1을 λΉ„νŠΈ λ‹¨μœ„λ‘œ κ°’2의 λΉ„νŠΈ 수만큼 였λ₯Έμͺ½μœΌλ‘œ μ‹œν”„νŠΈ, μ™Όμͺ½μ—λŠ” ν˜„μž¬ λΆ€ν˜Έ λΉ„νŠΈκ°€ μ±„μ›Œμ§
    • κ°’1 >>> κ°’2 : κ°’1을 λΉ„νŠΈ λ‹¨μœ„λ‘œ κ°’2의 λΉ„νŠΈ 수만큼 였λ₯Έμͺ½μœΌλ‘œ μ‹œν”„νŠΈ, μ™Όμͺ½μ—λŠ” 0이 μ±„μ›Œμ§
    • κ°’1 << κ°’2 : κ°’1을 λΉ„νŠΈ λ‹¨μœ„λ‘œ κ°’2의 λΉ„νŠΈ 수만큼 μ™Όμͺ½μœΌλ‘œ μ‹œν”„νŠΈ, 였λ₯Έμͺ½μ—λŠ” 0이 μ±„μ›Œμ§

기타 μ—°μ‚°μž

  • λŒ€μž… μ—°μ‚°μž (=) : λ³€μˆ˜μ˜ 값을 μ €μž₯, 였λ₯Έμͺ½μ˜ 값을 μ™Όμͺ½μ— λŒ€μž…
  • 쑰건 μ‚Όν•­ μ—°μ‚°μž (? :) : if~else문을 μΆ•μ•½ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€.
    • λ³€μˆ˜ = 쑰건 ? κ°’1 : κ°’2 : 쑰건이 참이면 κ°’1이 λ³€μˆ˜μ— λŒ€μž…λ˜κ³ , 거짓이면 κ°’2κ°€ λ³€μˆ˜μ— λŒ€μž…λœλ‹€.

Java의 λ°°μ—΄

배열은 같은 νƒ€μž…μ˜ λ°μ΄ν„°λ“€μ˜ λͺ¨μž„μœΌλ‘œ, λ©”λͺ¨λ¦¬κ°€ μ ˆμ•½λ˜κ³ , 쉽고 κ°„κ²°ν•˜κ²Œ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•  수 μžˆλ‹€.

일차원 λ°°μ—΄μ˜ μ„ μ–Έκ³Ό μ‚¬μš©

  • λ°°μ—΄ 객체λ₯Ό μ°Έμ‘°ν•  λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ β–ΆοΈŽ λ°°μ—΄ 객체 생성
    • λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ : λ°μ΄ν„°νƒ€μž… λ°°μ—΄λ³€μˆ˜λͺ…[]; λ˜λŠ” λ°μ΄ν„°νƒ€μž…[] λ°°μ—΄λ³€μˆ˜λͺ…;
    • λ°°μ—΄ 객체 생성 : λ°°μ—΄λ³€μˆ˜λͺ… = new λ°μ΄ν„°νƒ€μž…[λ°°μ—΄μ˜ 길이];
    • 두 ꡬ문을 합쳐 ν•œ λ¬Έμž₯으둜 ν‘œν˜„ κ°€λŠ₯

이차원 λ°°μ—΄

  • 닀차원 λ°°μ—΄ : 일차원 배열을 μ—¬λŸ¬ 개 μ‚¬μš©ν•˜μ—¬ λ‹€μ‹œ 배열을 κ΅¬ν˜„ν•œ 것, 즉 λ°°μ—΄μ˜ λ°°μ—΄
  • λ°°μ—΄μ˜ 크기λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ°°μ—΄ 첨자([])λ₯Ό μ°¨μˆ˜μ— 따라 μΆ”κ°€ν•˜λ©΄ λœλ‹€.
  • λ°°μ—΄ 객체λ₯Ό μ°Έμ‘°ν•  λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ β–ΆοΈŽ λ°°μ—΄ 객체 생성
    • λ°°μ—΄ λ³€μˆ˜ μ„ μ–Έ : λ°μ΄ν„°νƒ€μž… λ°°μ—΄λ³€μˆ˜λͺ… [][]; λ˜λŠ” λ°μ΄ν„°νƒ€μž…[][] λ°°μ—΄λ³€μˆ˜λͺ…; λ˜λŠ” λ°μ΄ν„°νƒ€μž…[] λ°°μ—΄λ³€μˆ˜λͺ… [];
    • λ°°μ—΄ 객체 생성 : λ°°μ—΄λ³€μˆ˜λͺ… = new λ°μ΄ν„°νƒ€μž…[λ°°μ—΄μ˜ λ°°μ—΄ 길이][λ°°μ—΄ 길이]; λ˜λŠ”
      λ°°μ—΄λ³€μˆ˜λͺ… = new λ°μ΄ν„°νƒ€μž…[λ°°μ—΄μ˜ λ°°μ—΄ 길이][]; λ°°μ—΄λ³€μˆ˜λͺ…[인덱슀 번호] = new λ°μ΄ν„°νƒ€μž…[λ°°μ—΄ 길이];

λͺ…λ Ήν–‰ λ§€κ°œλ³€μˆ˜

main() λ©”μ„œλ“œλž€, μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν•„μˆ˜μ μœΌλ‘œ ν¬ν•¨λ˜μ–΄μ•Ό ν•˜λŠ” λ©”μ„œλ“œλ‘œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 싀행될 λ•Œ μžλ™μœΌλ‘œ μ‹€ν–‰λœλ‹€. 일반적으둜 μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ main() λ©”μ„œλ“œ λ‚΄μ—μ„œ λ‹€λ₯Έ 클래슀 객체λ₯Ό μƒμ„±ν•˜κ³ , κ·Έ 객체의 λ©”μ„œλ“œ 호좜 λ˜λŠ” λ³€μˆ˜ μ‘°μž‘ 과정을 톡해 μ›ν•˜λŠ” κ²°κ³Όλ₯Ό μ–»λŠ”λ‹€.

public class CommandLineArgTest {
  public static void main(String args[]) {
    // code
  }
}

μœ„ μ½”λ“œμ˜ main() λ©”μ„œλ“œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ String args[]λΌλŠ” λ§€κ°œλ³€μˆ˜λ₯Ό λ³Ό 수 μžˆλŠ”λ°, 이λ₯Ό λͺ…λ Ήν–‰ λ§€κ°œλ³€μˆ˜λΌκ³  ν•œλ‹€. λͺ…λ Ήν–‰ λ§€κ°œλ³€μˆ˜λŠ” λ¬Έμžμ—΄ 배열을 λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„, ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ ν•„μš”ν•œ 정보λ₯Ό ν”„λ‘œκ·Έλž¨μ— μ „λ‹¬ν•œλ‹€.

  • String 데이터 νƒ€μž…μ˜ 배열이닀.
  • μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ¬Έμžμ—΄μ˜ μˆœμ„œμ— 따라 μ°¨λ‘€λ‘œ 배열에 μ €μž₯λœλ‹€.
  • 곡백을 κ΅¬λΆ„μžλ‘œ μ—¬λŸ¬ 개의 값을 전달할 수 μžˆλ‹€.
  • λ¬Έμžμ—΄ νƒ€μž…μ΄λ―€λ‘œ 숫자λ₯Ό μž…λ ₯ν–ˆμ„ μ‹œ λ¬Έμžμ—΄μ„ 숫자둜 λ³€ν™˜ν•΄μ•Ό ν•œλ‹€.
    • μžλ°” APIμ—μ„œ λ©”μ„œλ“œ 제곡 : Integer 클래슀의 parseInt(), Double 클래슀의 parseDouble()

Java μ œμ–΄λ¬Έ

  • 쑰건 μ œμ–΄λ¬Έ : if, if-else, if-else if, switch λ¬Έ
  • 반볡 μ œμ–΄λ¬Έ : for, while, do-while λ¬Έ
  • 이동 μ œμ–΄λ¬Έ : break, continue, return