λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
β˜•Java

[Java μ΄ν•΄ν•˜κΈ°] 1. μžλ°”λž€?

by Luvbit 2024. 4. 20.

🐰Java의 μ„Έκ³„λ‘œ κ»‘μΆ©~!

 

 


πŸ’œ Javaλž€?

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° (Object Oriented Programming) μ–Έμ–΄λ‘œ,
ν΄λž˜μŠ€μ™€ 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ‘°ν™”ν•˜κ³  λͺ¨λ“ˆν™” ν•©λ‹ˆλ‹€.

 

 

πŸ’š Java의 νŠΉμ§•

1. 좔상화 (Abstraction)

 

μΆ”μƒν™”λŠ” λ³΅μž‘ν•œ 싀세계λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” 과정을 μ˜λ―Έν•©λ‹ˆλ‹€. ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” μ€‘μš”ν•œ μ •λ³΄λ§Œμ„ μΆ”λ €λ‚΄κ³  λΆˆν•„μš”ν•œ μ •λ³΄λŠ” μ œκ±°ν•˜μ—¬ 섀계λ₯Ό λ‹¨μˆœν•˜κ²Œ λ§Œλ“œλŠ” 기법을 μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 'μžλ™μ°¨'λΌλŠ” 클래슀λ₯Ό 섀계할 λ•Œ μ—”μ§„μ˜ μž‘λ™ μ›λ¦¬λ‚˜ μ°¨λŸ‰μ˜ λ‚΄λΆ€ κ΅¬μ‘°λ³΄λ‹€λŠ” κΈ°λŠ₯(가속, μ œλ™ λ“±)에 μ΄ˆμ μ„ 맞μΆ₯λ‹ˆλ‹€.

 

2. μΊ‘μŠν™” (Encapsulation)

 

μΊ‘μŠν™”λŠ” 객체의 데이터(속성)와 κ·Έ 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό ν•˜λ‚˜λ‘œ λ¬ΆλŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 클래슀 λ‚΄λΆ€μ˜ κ΅¬ν˜„μ„ 숨기고 μ™ΈλΆ€λ‘œλΆ€ν„°μ˜ 직접적인 접근을 μ œν•œν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 클래슀의 ν•„λ“œλŠ” 보톡 private으둜 μ„ μ–Έν•˜κ³ , ν•΄λ‹Ή ν•„λ“œλ₯Ό μ‘°μž‘ν•  수 μžˆλŠ” λ©”μ†Œλ“œλŠ” public으둜 μ œκ³΅ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

 

3. λ‹€ν˜•μ„± (Polymorphism)

 

λ‹€ν˜•μ„±μ€ 'λ§Žμ€ ν˜•νƒœλ₯Ό 가짐'을 μ˜λ―Έν•©λ‹ˆλ‹€. 즉, ν•˜λ‚˜μ˜ λ©”μ†Œλ“œλ‚˜ ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλ„λ‘ ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. μ˜€λ²„λ‘œλ”©(같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό λ§€κ°œλ³€μˆ˜μ— 따라 λ‹€λ₯΄κ²Œ λ™μž‘ν•˜λ„λ‘ 함)κ³Ό μ˜€λ²„λΌμ΄λ”©(상속받은 λ©”μ†Œλ“œμ˜ κΈ°λŠ₯을 ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•¨)이 λŒ€ν‘œμ μΈ μ˜ˆμ‹œμž…λ‹ˆλ‹€. λ‹€ν˜•μ„±μ€ 같은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가진 객체듀이 각자의 λ°©μ‹μœΌλ‘œ λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜κ²Œ ν•΄μ€λ‹ˆλ‹€.

 

4. 상속 (Inheritance)

 

상속은 ν•œ ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ 클래슀의 νŠΉμ„±(ν•„λ“œμ™€ λ©”μ†Œλ“œ)을 μ΄μ–΄λ°›λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고, 쀑볡을 μ΅œμ†Œν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Vehicleμ΄λΌλŠ” κΈ°λ³Έ ν΄λž˜μŠ€κ°€ 있고, 이λ₯Ό μƒμ†λ°›λŠ” Car와 Motorcycleμ΄λΌλŠ” μ„œλΈŒν΄λž˜μŠ€κ°€ μžˆμ„ λ•Œ, Car와 Motorcycle은 Vehicle의 속성과 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

 

JavaλŠ” "Write Once, Run Anywhere" (WORA)λΌλŠ” λͺ¨ν† λ‘œ 섀계

μ΄λŠ” Java ν”„λ‘œκ·Έλž¨μ„ μ–΄λ–€ ν”Œλž«νΌμ—μ„œλ“  μ‹€ν–‰ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

 

 

 

 

πŸ’› Java의 μ£Όμš” ꡬ성 μš”μ†Œ

  • JDK (Java Development Kit): Java ν”„λ‘œκ·Έλž¨μ„ κ°œλ°œν•  λ•Œ ν•„μš”ν•œ 컴파일러(javac), 라이브러리, 도ꡬλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
  • JRE (Java Runtime Environment): Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  λ•Œ ν•„μš”ν•œ JVMκ³Ό 라이브러리, 기타 νŒŒμΌλ“€μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
  • JVM (Java Virtual Machine): Java λ°”μ΄νŠΈμ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 가상 λ¨Έμ‹ μœΌλ‘œ, Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄μ—¬λŸ¬ OSμ—μ„œ λ™μΌν•˜κ²Œ 싀행될 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. WORAλ₯Ό κ°€λŠ₯ν•˜κ²Œ λ„μ™€μ€λ‹ˆλ‹€.

 

⚠️ 기타 νŠΉμ§• 

객체 지ν–₯: JavaλŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP) μ–Έμ–΄λ‘œ, ν΄λž˜μŠ€μ™€ 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ‘°ν™”ν•˜κ³  λͺ¨λ“ˆν™” ν•©λ‹ˆλ‹€.
ν”Œλž«νΌ 독립성: Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ JVM(Java Virtual Machine) μœ„μ—μ„œ μ‹€ν–‰λ˜λ―€λ‘œ, Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€ν–‰λ˜λŠ” μ‹œμŠ€ν…œμ˜ OS에 ꡬ애받지 μ•ŠμŠ΅λ‹ˆλ‹€.
λ©”λͺ¨λ¦¬ 관리: 가비지 μ»¬λ ‰μ…˜μ„ μ‚¬μš©ν•΄ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ λ©”λͺ¨λ¦¬λ₯Ό μˆ˜λ™μœΌλ‘œ 관리할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
닀쀑 μŠ€λ ˆλ“œ: JavaλŠ” λ‚΄μž₯된 μŠ€λ ˆλ“œ 지원을 톡해 병렬 μ²˜λ¦¬μ™€ λ©€ν‹°νƒœμŠ€ν‚Ήμ„ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ„€νŠΈμ›Œν¬ μ„ΌνŠΈλ¦­: λ„€νŠΈμ›Œν‚Ήμ„ μœ„ν•œ κ΄‘λ²”μœ„ν•œ 라이브러리λ₯Ό μ œκ³΅ν•˜μ—¬, λ„€νŠΈμ›Œν¬ 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ„ κ°„νŽΈν•˜κ²Œ ν•˜λΉˆλ‹€.
λ³΄μ•ˆ: μƒŒλ“œλ°•μŠ€ λ³΄μ•ˆ λͺ¨λΈμ„ μ‚¬μš©ν•˜μ—¬, μ‹œμŠ€ν…œ λ³΄μ•ˆμ„ ν•΄μΉ˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ μ•ˆμ „ν•˜κ²Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ°•λ ₯ν•œ ν‘œμ€€ 라이브러리: JavaλŠ” κ΄‘λ²”μœ„ν•œ ν‘œμ€€ 라이브러리(Java Standard Edition)λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 데이터 ꡬ쑰, λ„€νŠΈμ›Œν‚Ή, 파일 처리 λ“± λ‹€μ–‘ν•œ μž‘μ—…μ„ μš©μ΄ν•˜κ²Œ ν•©λ‹ˆλ‹€.

 

 

 

Eclipseλ₯Ό ν†΅ν•œ Java λ°œλ‹΄κΆˆλ³΄κΈ°

public class Hello {
       public static void main(String args[]) {
           System.out.println("Hello, World !");
}

 

  • main ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•˜κ³  λλ‚΄μ€λ‹ˆλ‹€. 였직 ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•©λ‹ˆλ‹€. OSκ°€ 제일 λ¨Όμ € ν˜ΈμΆœν•©λ‹ˆλ‹€. 
  • static : κ³΅μœ ν•˜λŠ” λͺ©μ μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•˜λ‚˜μ˜ 무언가λ₯Ό μ—¬λŸ¬λͺ…μ΄μ„œ λ‚˜λˆ μ“Έ λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. ( λ©”λͺ¨λ¦¬ μ ˆμ•½ 효과 )
  • static은 objectκ°€ μƒμ„±λ˜μ§€μ•Šμ•„λ„ λ©”λͺ¨λ¦¬κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€. μš°μ„ μˆœμœ„κ°€ κ°€μž₯ λ†’μŠ΅λ‹ˆλ‹€.
  • out에 λŒ€ν•œ 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•˜μŒμ—λ„, 호좜이 κ°€λŠ₯ν•œ 것이 static의 κ°œλ…μ΄λΌκ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

🩡 ν”„λ‘œκ·Έλž¨μ˜ κΈ°λ³Έ ꡬ쑰 

  • 클래슀: λͺ¨λ“  Java μ½”λ“œλŠ” 클래슀 내뢀에 μ‘΄μž¬ν•©λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” 객체의 섀계도 역할을 ν•˜λ©°, μƒνƒœ(속성)κ³Ό ν–‰μœ„(λ©”μ†Œλ“œ)λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
  • λ©”μ†Œλ“œ: νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œμ˜ μ§‘ν•©μž…λ‹ˆλ‹€. ν–‰μœ„(동사)라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 클래슀 λ‚΄μ—μ„œ μ •μ˜λ©λ‹ˆλ‹€.
  • λ³€μˆ˜: 데이터λ₯Ό μ €μž₯ν•˜λŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μœΌλ‘œ, νƒ€μž…μ— 따라 λ‹€μ–‘ν•œ 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μƒμ„±μž: 객체λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” νŠΉλ³„ν•œ μœ ν˜•μ˜ λ©”μ†Œλ“œλ‘œ, 클래슀의 이름을 μ‚¬μš©ν•΄ μ •μ˜λ©λ‹ˆλ‹€.
  • νŒ¨ν‚€μ§€: κ΄€λ ¨ ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ·Έλ£Ήν™”ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

 

 

🧑 μ ‘κ·Ό μ œν•œμž 

  • Private  : 이 ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ©€λ²„λŠ” ν•΄λ‹Ή 클래슀 λ‚΄μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • Default  : μ ‘κ·Ό μ œν•œμžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ €μž₯ν•˜μ§€ μ•ŠμœΌλ©΄ 기본적으둜 적용되며, 같은 νŒ¨ν‚€μ§€ 내에 ν΄λž˜μŠ€μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€
  • Protected : μ™ΈλΆ€ νŒ¨ν‚€μ§€ 쀑 상속받은 μžμ‹λ§Œ μ ‘κ·Ό κ°€λŠ₯이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 같은 νŒ¨ν‚€μ§€ 내에 ν΄λž˜μŠ€λŠ” λ‹Ήμ—°νžˆ μ ‘κ·Ό κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • Public : 이 ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ©€λ²„λŠ” μ–΄λ””μ„œλ“  μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ™ΈλΆ€ , λ‚΄λΆ€ λͺ¨λ‘ κ°€λŠ₯ν•˜λ©°, 클래슀, λ³€μˆ˜, λ©”μ„œλ“œ, μƒμ„±μžμ— λŒ€ν•œ μ™„μ „ν•œ 접근을 ν—ˆμš©ν•©λ‹ˆλ‹€.

 

🀍 λͺ…λͺ… κ·œμΉ™

  • 클래슀 : μ²«κΈ€μžλŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.
  • λ©”μ†Œλ“œ, λ³€μˆ˜ : μ†Œλ¬Έμž μž‘μ„±, κ°’(데이터)λ₯Ό μ €μž₯ν•˜λŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μž…λ‹ˆλ‹€.
  • μƒμˆ˜ : μ „λΆ€ λŒ€λ¬Έμž (ex MAX). λ³€ν•˜μ§€ μ•ŠλŠ” κ°’μž…λ‹ˆλ‹€.
  • 단어와 단어가 μ΄μ–΄μ§ˆλ•Œ λ‘λ²ˆμ§Έ λ‹¨μ–΄μ˜ μ²«κΈ€μžλŠ” λŒ€λ¬Έμž (ex blackWhite , PinkWhite)

 

 

 

 

 

μžλ°”λ₯Ό 처음 μ ‘ν•˜μ‹ λ‹€λ©΄ , 이런게 μžˆλ‹€ ν•˜κ³  λ„˜μ–΄κ°€λ©΄μ„œ μ•„λž˜μ˜ λ‚΄μš©λ§Œ κΈ°μ–΅ν•΄μ£Όμ„Έμš”! 

 

 

 

 

 

 

 

 

 

κ°μ²΄λŠ” μ‹€μƒν™œμ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  것이 될수 μžˆμŠ΅λ‹ˆλ‹€. ex) λΆ•μ–΄λΉ΅ , 토끼

μ‹€μƒν™œμ˜ 물건을 곡μž₯μ—μ„œ 찍어내듯이, 무언가λ₯Ό λ§Œλ“€κΈ°μœ„ν•΄μ„œλŠ” ꡬ쑰λ₯Ό μ•Œμ•„μ•Όν•©λ‹ˆλ‹€.
λŒ€ν‘œμ μΈ μ˜ˆμ‹œλ‘œ, ν΄λž˜μŠ€λŠ” λΆ•μ–΄λΉ΅ ν‹€μž…λ‹ˆλ‹€.

ν† λΌλŠ” κΉ‘μΆ©κΉ‘μΆ© λ›°κΈ°λ„ν•˜κ³ , 당근을 먹기도 ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ ν† λΌλŠ” λ³€μˆ˜(=λͺ…사),
λ¨Ήκ³  λ›°λŠ” ν–‰μœ„λŠ” λ©”μ„œλ“œ(=동사) μž…λ‹ˆλ‹€.