λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Study/Java

[Java] Java 기초 (1)

by hong- 2022. 5. 3.

μ•ˆλ…•ν•˜μ„Έμš” λ°±μ—”λ“œκ°œλ°œμž ν™λ―Όμ •μž…λ‹ˆλ‹€ πŸ™ŒπŸ»πŸ«§

μ˜€λŠ˜λΆ€ν„° Java κΈ°μ΄ˆμ— λŒ€ν•΄ μ„€λͺ…ν•˜λ €κ³  ν•©λ‹ˆλ‹€ !

🫢🏻 μžλ°” Java λž€?

 - 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (Object Oriented Programming, OOP) μž…λ‹ˆλ‹€.

 - μš΄μ˜μ²΄μ œμ— 독립적 "Write Once, Run Anywhere"인 언어라고도 ν•©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ μžλ°”μ˜ νŠΉμ§•μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³ΌκΉŒμš”?

🫰🏻 μžλ°”μ˜ νŠΉμ§•

  1️⃣ μš΄μ˜μ²΄μ œμ— 독립적

   - μžλ°” 이전 언어듀은 νŠΉμ • OS에 따라 λ‹€λ₯΄κ²Œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” 언어듀이 λŒ€λΆ€λΆ„ (C, C++)

     → μžλ°”λŠ” JRE이 μ„€μΉ˜λœ λͺ¨λ“  μš΄μ˜μ²΄μ œμ—μ„œ 싀행이 κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“€μ–΄μ§

       * JRE ?  JVM(μžλ°” 가상머신) + ν‘œμ€€ν΄λž˜μŠ€ 라이브러리

  2️⃣ 객체지ν–₯ μ–Έμ–΄ (Object Oriented Programming, OOP)

   - 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° κ°œλ…μ„ μ‚¬μš©ν•˜λŠ” μ–Έμ–΄

     → λͺ¨λ“  κΈ°λŠ₯은 객체둜 λ§Œλ“€μ–΄ μ‚¬μš©

   - OOP ? κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ΄ λ™μž‘ν•˜λŠ” λΆ€ν’ˆμœΌλ‘œ μ—¬λŸ¬ λΆ€ν’ˆ(객체)듀을 λ§Œλ“€κ³  μ‘°λ¦½ν•˜μ—¬ ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” κ°œλ… 

   - 객체 μ§€ν–₯적으둜 μ„€κ³„λœ ν”„λ‘œκ·Έλž¨μ€ μœ μ§€λ³΄μˆ˜κ°€ 쉽고 ν™•μž₯성이 λ†’μŒ

  3️⃣ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 지원

    - μžλ°” 8버전뢀터 ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž¨μ„ μ§€μ›ν•˜λŠ” 문법인 λžŒλ‹€μ‹κ³Ό 슀트림이 좔가됨

     → 이λ₯Ό μ‚¬μš©ν•˜λ©΄ μ»¬λ ‰μ…˜μ˜ μš”μ†Œλ₯Ό 필터링, λ§€ν•‘, 집계 μ²˜λ¦¬ν•˜κΈ° μ‰¬μ›Œμ§€κ³  μ½”λ“œκ°€ κ°„κ²°ν•΄μ§„λ‹€λŠ” μž₯점이 있음

  4️⃣ μžλ™ λ©”λͺ¨λ¦¬ 관리 (Garbage Collection)

    - μžλ°”λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ μ œκ±°ν•˜λ©° λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•΄μ£ΌλŠ” GCκ°€ 있음

     → 이λ₯Ό 톡해 κ°œλ°œμžλŠ” λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜λŠ” 수고λ₯Ό 덜고 ν•΅μ‹¬μ½”λ“œμ— 집쀑


 

μΆ”κ°€μ μœΌλ‘œ JVMκ³Ό JDK, JRE에 λŒ€ν•΄μ„œλ„ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 

🫢🏻 JVM과 JDK

🫰🏻 JVM (Java Virtual Machine)

  : μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚€λŠ” 도ꡬ

    → JVM이 있기 λ•Œλ¬Έμ— μžλ°”κ°€ μš΄μ˜μ²΄μ œμ— 독립적

     - μžλ°” μ–Έμ–΄λ₯Ό JVM이 이해할 수 μžˆλŠ” μ½”λ“œλ‘œ λ³€ν™˜ν•˜λŠ” 것

     - JVM은 λ°”μ΄νŠΈμ½”λ“œλ₯Ό μš΄μ˜μ²΄μ œμ— λ§žλŠ” κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•΄μ€Œ

     - JVMλŠ” JDKλ‚˜ JREλ₯Ό μ„€μΉ˜ν•˜λ©΄ μžλ™μœΌλ‘œ μ„€μΉ˜λ¨

 

    🎈 ν”„λ‘œκ·Έλž¨μ΄ μ œλŒ€λ‘œ μ‹€ν–‰λ˜κΈ° μœ„ν•΄μ„  ?

     - μ»΄ν“¨ν„°μ˜ λ‹€μ–‘ν•œ μžμ›μ„ ν™œμš©ν•΄μ•Ό 함 → 이런 μžμ›μ„ κ΄€λ¦¬ν•˜λŠ” 것 ? 운영체제

           → μ„œλ‘œ λ‹€λ₯Έ 운영체제 (Linux, Windows, MacOS λ“±)μ—μ„œ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ³„λ„μ˜ 절차 ν•„μš”

               But, JVM은 이런 문제λ₯Ό 해결해쀄 수 있음


🫰🏻 JRE (Java Runtime Environment)

JVM + ν‘œμ€€ 클래슀 라이브러리

 - μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰λ§Œ ν•  것이라면 JRE만 싀행해도 상관이 μ—†μŒ

    → But, μžλ°” ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  것이기 λ•Œλ¬Έμ— JDKλ₯Ό μ„€μΉ˜ν•΄μ•Ό 함


🫰🏻 JDK (Java Development Kit)

JRE + κ°œλ°œμ— ν•„μš”ν•œ 도ꡬ

- μžλ°” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 및 개발 κ°€λŠ₯ 도ꡬ

 

  1️⃣ OracleJDK : 였라클 νšŒμ‚¬μ—μ„œ κ΄€λ¦¬ν•˜λŠ” 버전

  2️⃣ OpenJDK : μ˜€ν”ˆμ†ŒμŠ€


Java κΈ°λ³Έ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μŒ μ½”λ“œλ₯Ό 보고 클래슀, λ©”μ„œλ“œ, μ ‘κ·Όμ œμ–΄μž, static, void 등에 λŒ€ν•΄μ„œλ„ μ•Œλ €λ“œλ¦΄κ²Œμš” !

public class Main{
	public static void main(String[] args) {
     
     }
}

πŸ“ 클래슀 (Class)

  - ν΄λž˜μŠ€λŠ” 객체λ₯Ό 찍어낼 수 μžˆλŠ” ν‹€

  - μžλ°”λŠ” 객체지ν–₯ 언어이기 λ•Œλ¬Έμ— λͺ¨λ“  μ½”λ“œλ₯Ό 클래슀 λ‚΄ μž‘μ„±ν•¨

  - κ°μ²΄μ˜ ꡬ쑰λ₯Ό 클래슀 내에 μ½”λ“œλ‘œ μ •μ˜ν•˜λ©΄ 이후에 클래슀λ₯Ό ν™œμš©ν•˜μ—¬ λ™μΌν•œ ꡬ쑰의 객체λ₯Ό μ‰½κ²Œ 생성할 수 있음


πŸ“ main λ©”μ„œλ“œ

(1) λ©”μ„œλ“œμ‹œκ·Έλ‹ˆμ²˜ : [μ ‘κ·Ό μ œμ–΄μž] [λ¦¬ν„΄νƒ€μž…] [λ©”μ„œλ“œλͺ…] (λ§€κ°œλ³€μˆ˜) { 
(2) λ©”μ„œλ“œ λ°”λ”” :             ~~
                 }
public static void main(String[] args){
    System.out.println("Welcome!");
    print("Welcome, jeju");
}

static void print(String input){
	System.out.println(input);
}

   πŸ‘‰πŸ» μ™œ print() λ©”μ„œλ“œλ₯Ό main() λ©”μ„œλ“œμ—μ„œ ν˜ΈμΆœν•˜λŠ”κ°€ ?

      →  μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λ©΄ main() λ©”μ„œλ“œλ₯Ό κ°€μž₯ λ¨Όμ € μ°Ύμ•„ main() μ•ˆμ— μžˆλŠ” 것을 순차적으둜 μ‹€ν–‰


πŸ“ μ ‘κ·Ό μ œμ–΄μž (Access Modifier)

  - 클래슀, λ³€μˆ˜, λ©”μ„œλ“œμ˜ μ ‘κ·Ό κΆŒν•œμ„ μ •μ˜

public > protected > default > private

   1️⃣ public

     : λͺ¨λ“  접근을 ν—ˆμš©

   2️⃣ protected

    : 같은 νŒ¨ν‚€μ§€(폴더)에 μžˆλŠ” 객체와 상속 κ΄€κ³„μ˜ κ°μ²΄λ“€λ§Œ ν—ˆμš©

   3️⃣ default

    : 같은 νŒ¨ν‚€μ§€(폴더)에 μžˆλŠ” κ°μ²΄λ“€λ§Œ ν—ˆμš©

   4️⃣ private

    : 같은 클래슀 λ‚΄μ—μ„œλ§Œ ν—ˆμš©


πŸ“ static

 - λ³€μˆ˜λ‚˜ λ©”μ„œλ“œκ°€ 객체의 것이 μ•„λ‹ˆλΌ 클래슀의 μ†ν•œ κ²ƒμž„μ„ μ§€μ •ν•˜λŠ” ν‚€μ›Œλ“œ

 - 클래슀λ₯Ό 섀계할 λ•Œ, λ©€λ²„λ³€μˆ˜ 쀑 λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ— κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 것에 static 을 λΆ™μž„

 - static이 뢙은 멀버 λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ μ‚¬μš©ν•  수 있음


πŸ“ returnκ³Ό void

 - μžλ°”μ˜ λ©”μ„œλ“œλŠ” 리턴할 κ°’μ˜ νƒ€μž…μ„ λͺ…μ‹œν•΄μ£Όμ–΄μ•Ό 함 

 - 데이터λ₯Ό λ¦¬ν„΄ν•˜μ§€ μ•Šμ„ 경우 void !