λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
1. Java μžλ°”/1_0. μ±…, κ°•μ˜

[λͺ…ν’ˆ μžλ°” ν”„λ‘œκ·Έλž˜λ°] 1μž₯ μš”μ•½ & 정리

by λΉ„μ†Œμ•Ό 2022. 5. 18.
728x90

[λͺ…ν’ˆ μžλ°” ν”„λ‘œκ·Έλž˜λ°] 1μž₯ μš”μ•½ & μ •리

1μž₯ μžλ°” μ‹œμž‘

1. μ ˆμ°¨μ§€ν–₯κ³Ό 객체지ν–₯, Cμ–Έμ–΄μ˜ νƒœλ™, μžλ°”μ˜ νƒœλ™

 

μ ˆμ°¨μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° // μž‘업을 μˆœμ„œλŒ€λ‘œ ν‘œν˜„, μˆœμ„œλŒ€λ‘œ μ‹€ν–‰
μž‘μ—…μ˜ λ‹¨μœ„μΈ ν•¨μˆ˜λ“€μ˜ μ§‘ν•©μœΌλ‘œ ν”„λ‘œκ·Έλž¨ μž‘μ„±
객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° // κ°μ²΄λ“€ κ°„μ˜ μƒν˜Έμž‘μš©μœΌλ‘œ ν‘œν˜„
μ‚¬λ¬Όμ˜ λ‹¨μœ„μΈ 클래슀 λ˜λŠ” κ°μ²΄λ“€μ˜ μ§‘ν•©μœΌλ‘œ ν”„λ‘œκ·Έλž¨ μž‘μ„±
ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” μ ˆμ°¨μ§€ν–₯κ³Ό 객체지ν–₯ 두 갈래둜 λ‚˜λˆ„μ–΄μ§€λŠ” 것이 μ•„λ‹ˆλ‹€. // μ ˆμ°¨μ§€ν–₯에 객체지ν–₯의 κ°œλ…μ΄ μΆ”κ°€λœ 것

Cμ–Έμ–΄μ˜ νƒœλ™μ€ 쒋은 운영체제 개발 (1970λ…„λŒ€ 초) 
AT&T<μ „ν™” κ΅ν™˜κΈ°(μΌμ’…μ˜ 컴퓨터)<운영체제(μΌμ’…μ˜ μ†Œν”„νŠΈμ›¨μ–΄)<ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄

μžλ°”μ˜ νƒœλ™μ€ IoT μ‚¬λ¬Ό μΈν„°λ„· κ°™μ€ κ°€μ „μ œν’ˆμ— λ“€μ–΄κ°ˆ μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œ (1990λ…„λŒ€)
1. ν”Œλž«νΌμ— 독립적인 μ–Έμ–΄ 개발 // 날씨 μ–΄ν”Œμ„ ν•œ 번만 λ§Œλ“€λ©΄ μ—¬λŸ¬ ν”Œλž«νΌμ—μ„œ λ‹€ λŒμ•„κ°ˆ 수 있게 ν•˜κΈ° μœ„ν•΄, WORA
2. λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ 적은 μž„λ² λ””λ“œ ν”„λ‘œκ·Έλž¨ 개발
+) 객체 μ§€ν–₯ 100% // 1990λ…„λŒ€ 객체지ν–₯ 열풍

-> μžλ°”λŠ” λͺ¨λ“  것을 객체둜 λ³Έλ‹€.

2. ν”Œλž«νΌ 독립성

 

ν”Œλž«νΌ = ν•˜λ“œμ›¨μ–΄ + μš΄μ˜μ²΄μ œ // CPU + O/S
μžλ°” ν”Œλž«νΌ = ν•˜λ“œμ›¨μ–΄ + μš΄μ˜μ²΄μ œ + JVM // CPU + O/S + JVM 
독립적(ν˜Έν™˜μ„±) = ν”Œλž«νΌμ΄ λ‹¬λΌμ Έλ„ μ‹€ν–‰λ¨
쒅속적(쒅속성) = νŠΉμ •ν•œ ν”Œλž«νΌμ—μ„œλ§Œ μ‹€ν–‰λ¨

ν”Œλž«νΌμ— ν˜Έν™˜μ„±μ΄ μ—†λŠ” μ΄μœ 
1. κ° CPU λ§ˆλ‹€ κΈ°κ³„μ–΄κ°€ λ‹€λ₯΄λ‹€.
2. κ° μš΄μ˜μ²΄μ œ λ§ˆλ‹€ APIκ°€ λ‹€λ₯΄λ‹€.
3. κ° μš΄μ˜μ²΄μ œ λ§ˆλ‹€ μ‹€ν–‰νŒŒμΌ ν˜•식이 λ‹€λ₯΄λ‹€.

μžλ°” μ†ŒμŠ€ νŒŒμΌμ„ μ»΄νŒŒμΌν•œ μ€‘립적인 λ°”μ΄λ„ˆλ¦¬ μ½”λ“œμΈ λͺ©μ  μ½”λ“œ = λ°”μ΄νŠΈ μ½”λ“œκ°€ μ§μ ‘ μ‹€ν–‰λ˜λŠ” κ²ƒμ΄ μ•„λ‹ˆλΌ, JVM에 μ˜ν•΄ μΈν„°ν”„리터 λ°©μ‹μœΌλ‘œ κ°κ°μ˜ ν”Œλž«νΌμ— λ§žκ²Œ λ³€ν™˜λœ λ’€ μ‹€ν–‰λœλ‹€.

C/C++ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν”Œλž«νΌμ— μ’…속적
JAVA μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν”Œλž«νΌμ— λ…립적
JVM은 ν”Œλž«νΌμ— μ’…속적

3. μžλ°”μ— κ΄€ν•˜μ—¬

 

μžλ°” μ†ŒμŠ€νŒŒμΌμ˜ ν™•μž₯자 .java
μžλ°” μ†ŒμŠ€νŒŒμΌμ„ μ»΄νŒŒμΌν•œ 클래슀 파일의 ν™•μž₯자 .class

 

C/C++ ν”„λ‘œκ·Έλž¨ 개발 및 μ‹€ν–‰ // μ—¬λŸ¬ 개의 μ†ŒμŠ€ 파일둜 λ‚˜λˆ„μ–΄ κ°œλ°œν•œ λ’€, μ†ŒμŠ€ νŒŒμΌμ„ μ»΄νŒŒμΌν•œ λͺ©μ  μ½”λ“œμ™€ 라이브러리λ₯Ό μ—°κ²°ν•˜μ—¬ ν•˜λ‚˜μ˜ μ‹€ν–‰ 파일둜 λ§Œλ“¦, λ©”λͺ¨λ¦¬κ°€ 적은 경우 μ‹€ν–‰ λΆˆκ°€

정적 라이브러리의 경우 μ‹€ν–‰ νŒŒμΌμ— ν¬ν•¨μ‹œν‚€λ―€λ‘œ μ‹€ν–‰ 파일 크기가 컀짐 동적 라이브러리의 경우 μ‹€ν–‰ μ‹œκ°„μ— 링크가 일어남

Java ν”„λ‘œκ·Έλž¨ 개발 및 μ‹€ν–‰ // μ—¬λŸ¬ 개의 μ†ŒμŠ€ 파일둜 λ‚˜λˆ„μ–΄ κ°œλ°œν•œ λ’€, μ†ŒμŠ€ νŒŒμΌμ„ μ»΄νŒŒμΌν•œ λ°”μ΄νŠΈμ½”λ“œλ‘œ 이루어진 λͺ©μ  νŒŒμΌμ„ λ§ν¬ν•˜μ—¬ ν•˜λ‚˜μ˜ μ‹€ν–‰νŒŒμΌλ‘œ λ§Œλ“œλŠ” 과정이 μ—†μŒ, 적은 λ©”λͺ¨λ¦¬λ‘œ μ‹€ν–‰ κ°€λŠ₯
클래슀 λ‘œλ”λ₯Ό 톡해 JVM이 λ˜λŠ” Class Loader 클래슀λ₯Ό 톡해 κ°œλ°œμžκ°€ ν•„μš”ν•œ 클래슀 νŒŒμΌμ„ λ™μ μœΌλ‘œ λ‘œλ”© // 동적은 κ·Έλ•Œ κ·Έλ•Œ 


JDK>JRE>JVM // JDK의 ν•΅μ‹¬μ€ μ»΄νŒŒμΌλŸ¬, JRE의 ν•΅μ‹¬μ€ JVM
개발 μ‹€ν–‰

JDK의 bin λ””λ ‰ν† λ¦¬μ˜ μ‹€ν–‰νŒŒμΌ
javac // μ»΄νŒŒμΌλŸ¬
java // μžλ°” μ‘μš© ν”„λ‘œκ·Έλž¨ μ‹€ν–‰κΈ°(JVM)

jar // μžλ°” 클래슀 νŒŒμΌμ„ μ••μΆ•ν•œ μžλ°” μ•„μΉ΄μ΄λΈŒ 파일(.jar) 생성, 관리

javap // μžλ°” μ†ŒμŠ€νŒŒμΌμ„ μ»΄νŒŒμΌν•œ λ°”μ΄νŠΈ μ½”λ“œλ₯Ό λ””μ–΄μ…ˆλΈ”ν•œ 결과인 μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œλ‘œ λ³Ό 수 있음

 

java λͺ…λ ΉμœΌλ‘œ μ‹€ν–‰ μ‹œ 클래슀 파일의 ν™•μž₯자 .classλŠ” λΉΌκ³ , 클래슀 파일의 μ΄λ¦„λ§Œ μž…λ ₯ // java Hello2030

μžλ°”λŠ” 컴파일된 클래슀 νŒŒμΌλ“€μ΄λ‚˜ 이듀을 ν•˜λ‚˜λ‘œ μ••μΆ•ν•œ jar 파일 ν˜•νƒœλ‘œ 배포


μžλ°” λ°°ν¬νŒμ˜ μ’…λ₯˜
Java SE(Standard Edition) // λ°μŠ€ν¬νƒ‘, μ„œλ²„ μ‘μš© ν”„λ‘œκ·Έλž¨ κ°œλ°œ ν”Œλž«νΌ
Java ME(Micro Editon) // SE + μž„λ² λ””λ“œ ν”„λ‘œκ·Έλž¨ κ°œλ°œ ν”Œλž«νΌ
Java EE(Enterprise Edition) // SE + 인터넷 기반 μ„œλ²„ 개발 ν”Œλž«νΌ

μžλ°” API // ν΄λž˜μŠ€ λΌμ΄λΈŒλŸ¬λ¦¬
νŒ¨ν‚€μ§€ // μ„œλ‘œ κ΄€λ ¨λœ ν΄λž˜μŠ€λ“€μ„ λ¬Άμ–΄ λ†“은 κ²ƒ, λ””렉토리, κ³„측ꡬ쑰
λͺ¨λ“ˆ // νŒ¨ν‚€μ§€, μ΄λ―Έμ§€, XML νŒŒμΌ λ“±μ˜ μžμ›λ“€μ„ λ¬Άμ€ λ‹¨μœ„, νΌμ¦ μ—°κ²°ν•˜λ“―이 μž‘μ„±
μžλ°” IDE // μ΄ν΄λ¦½μŠ€, μΈν…”λ¦¬μ œμ΄ IDEA

IDE // νŽΈμ§‘, 컴파일, 디버깅을 ν•œλ²ˆμ— ν•  수 μžˆλŠ” ν†΅ν•©λœ 개발 ν™˜κ²½ 
μžλ°” λ„νλ¨ΌνŠΈ // javadoc 주석, /** */ 사이에 html둜 μž‘μ„±, μžλ°” μ†ŒμŠ€νŒŒμΌλ‘œλΆ€ν„° API λ¬Έμ„œ 생성

4. μ„œλΈ”λ¦Ώκ³Ό μ• ν”Œλ¦Ώ, μžλ°”μ˜ νŠΉμ§•

 

μ„œλΈ”λ¦Ώ // μ›Ή μ„œλ²„μ—μ„œ λŒμ•„κ°€λŠ” ν”„λ‘œκ·Έλž¨, λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„ λ° κΈ°νƒ€ μ„œλ²„와 μ—°λ™ν•˜λŠ” λ³΅μž‘ν•œ κΈ°λŠ₯ κ΅¬ν˜„ μ‹œ μ‚¬μš©
μ• ν”Œλ¦Ώ // μ›Ή ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λŒμ•„κ°€λŠ” ν”„λ‘œκ·Έλž¨

 

JSP(Java Server Page)λŠ” μ›Ή μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜λŠ” μŠ€ν¬λ¦½νŠΈ μ–Έμ–΄μ΄λ‹€. JSP ν”„λ‘œκ·Έλž¨μ€ μ‹€ν–‰ μ „에 μ»΄νŒŒμΌλ˜μ–΄ μ„œλΈ”릿이라고 λΆˆλ¦¬λŠ” μžλ°” μ½”λ“œλ‘œ λ³€ν™˜λ˜μ–΄ μ‹€ν–‰λœλ‹€.

ν•˜λ‚˜μ˜ μ†ŒμŠ€νŒŒμΌμ— μ—¬λŸ¬ ν΄λž˜μŠ€ μž‘μ„± κ°€λŠ₯, public ν΄λž˜μŠ€λŠ” 1개만 μž‘μ„± κ°€λŠ₯
μžλ°” μ†ŒμŠ€νŒŒμΌ 이름 = 클래슀 이름, ν•˜λ‚˜μ˜ μ†ŒμŠ€ νŒŒμΌμ— μ—¬λŸ¬ 개의 ν΄λž˜μŠ€κ°€ μž‘μ„±λ˜μ–΄ μžˆλŠ” 경우 public 클래슀 이름과 κ°™μŒ
μ†ŒμŠ€νŒŒμΌμ„ μ»΄νŒŒμΌν•˜λ©΄ ν΄λž˜μŠ€ 1κ°œλ‹Ή ν΄λž˜μŠ€νŒŒμΌ 1개
ν•˜λ‚˜μ˜ ν΄λž˜μŠ€ νŒŒμΌμ— 2개 μ΄μƒμ˜ main λ©”μ†Œλ“œκ°€ μžˆμ„ μˆ˜ μ—†μŒ

 

class C {
    class D {
    }
}

μžλ°”λŠ” 클래슀 μ•ˆμ— μƒˆλ‘œμš΄ 클래슀, 즉 λ‚΄λΆ€ 클래슀λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.
클래슀 DλŠ” ν΄λž˜μŠ€ C내에 μž‘μ„±λœ λ‚΄λΆ€ ν΄λž˜μŠ€(inner class)λ‘œμ„œ C$D.class μ΄λ¦„μœΌλ‘œ ν΄λž˜μŠ€ νŒŒμΌμ΄ μƒμ„±λœλ‹€.


μžλ°”μ˜ νŠΉμ§•
1. ν”Œλž«νΌμ— λ…립적
2. 객체 μ§€ν–₯ // μΊ‘μŠν™”, 상속성, λ‹€ν˜•μ„±
3. 클래슀둜 μΊ‘μŠν™”
4. 운영체제의 도움 없이 자체적으둜 λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό 지원
5. κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ // μ•Œμ•„μ„œ λ©”λͺ¨λ¦¬ κ΄€λ¦¬

6. μ‹€μ‹œκ°„ μ‘μš© μ‹œμŠ€ν…œμ— 뢀적합 // μ‹€ν–‰ λ„쀑 μ˜ˆμΈ‘ν•  μˆ˜ μ—†λŠ” μ‹œμ μ— κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ μ‹€ν–‰λ˜λ―€λ‘œ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ΄ μΌμ‹œμ μœΌλ‘œ μ€‘단

 

μ‹€ν–‰ μ†λ„λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ JIT μ»΄νŒŒμΌλŸ¬κ°€ μ‚¬μš©λœλ‹€. μ΅œκ·Όμ—λŠ” μ‹€ν–‰ν•˜λŠ” λ„쀑 μžλ°” ν”„λ‘œκ·Έλž¨μ„ ν•΄λ‹Ή CPU의 κΈ°κ³„μ–΄ μ½”λ“œλ‘œ μ»΄νŒŒμΌν•˜κ³  CPUκ°€ λ°”λ‘œ κΈ°κ³„μ–΄λ₯Ό μ‹€ν–‰ν•˜λ„둝 ν•˜λŠ” JIT(Just In Time) μ»΄νŒŒμΌλ§ κΈ°λ²•을 μ΄μš©ν•œλ‹€.

 

728x90