πŸ–₯️ Javaλž€? πŸ–₯️

거뢁이 개발자·2024λ…„ 12μ›” 30일

Java

λͺ©λ‘ 보기
1/2
post-thumbnail

πŸ–₯️ ν”„λ‘œκ·Έλž˜λ° 언어와 μžλ°”

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” κ³ κΈ‰ 언어와 μ €κΈ‰ μ–Έμ–΄λ‘œ κ΅¬λΆ„λœλ‹€.

κ³ κΈ‰ μ–Έμ–΄

  • μ‚¬λžŒμ΄ μ‰½κ²Œ 이해할 수 μžˆλŠ” μ–Έμ–΄
  • κ³ κΈ‰ μ–Έμ–΄λ‘œ μž‘μ„±λœ νŒŒμΌμ„ μ†ŒμŠ€(Source) 파일이라 ν•œλ‹€.
    ex) Java, C, C++

μ €κΈ‰ μ–Έμ–΄

  • 기계어에 κ°€κΉŒμš΄ μ–Έμ–΄
    ex) μ–΄μ…ˆλΈ”λ¦¬μ–΄

μžλ°”μ˜ νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™λ‹€

λͺ¨λ“  OSμ—μ„œ μ‹€ν–‰ κ°€λŠ₯

  • μžλ°”λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ€ λͺ¨λ“  OSμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•˜λ‹€
  • λ”°λΌμ„œ Windowμ—μ„œ 개발 된 ν”„λ‘œκ·Έλž¨μ„ μˆ˜μ • 없이 λ‹€λ₯Έ OSμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•˜λ‹€λŠ” μž₯점이 μ‘΄μž¬ν•œλ‹€

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°

  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object Oriented Programming, OOP) :
    • λ¨Όμ € 객체(λΆ€ν’ˆ)을 λ§Œλ“€κ³ , 이 객체듀을 μ„œλ‘œ μ—°κ²°ν•΄μ„œ 더 큰 ν”„λ‘œκ·Έλž¨μ„ μ™„μ„±μ‹œν‚€λŠ” 기법
  • μžλ°”λŠ” OOPλ₯Ό μœ„ν•œ 졜적의 언어이닀

λ©”λͺ¨λ¦¬ μžλ™ 정리

  • μžλ°”λŠ” λ©”λͺ¨λ¦¬(RAM)을 μžλ™ κ΄€λ¦¬ν•œλ‹€

ν’λΆ€ν•œ 무료 라이브러리

  • 무료둜 μ‚¬μš© κ°€λŠ₯ν•œ μ˜€ν”ˆ μ†ŒμŠ€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν’λΆ€ν•˜λ‹€.

κ³ κΈ‰ μ–Έμ–΄λ‘œ μž‘μ„±λœ μ½”λ“œλŠ” 컴퓨터가 이해할 수 없기에 컴파일(Compile)μ΄λΌλŠ” 과정을 톡해 JVM이 인식할 수 μžˆλŠ” Java bytecode(*.class)둜 λ³€ν™˜ν•΄μ•Ό ν•œλ‹€.


🦾 λ°”μ΄νŠΈμ½”λ“œ 파일과 μžλ°” 가상 λ¨Έμ‹  (JVM)

μ‚¬μ§„μ—μ„œ λ³Ό 수 μžˆλ“―μ΄ μžλ°”λŠ” 컴파일 λͺ…λ Ήμ–΄(javac)λ₯Ό 톡해 μ†ŒμŠ€ 파일(.java)λ₯Ό κ°€μ§€κ³  λ°”μ΄νŠΈ μ½”λ“œ 파일(.class)λ₯Ό μƒμ„±ν•œλ‹€.

OS의 μ’…λ₯˜μ— μƒκ΄€μ—†μ΄Β λ™μΌν•œ μ†ŒμŠ€ νŒŒμΌμ€ λ™μΌν•œ λ°”μ΄νŠΈ μ½”λ“œ 파일이 μƒμ„±λœλ‹€.

λ°”μ΄νŠΈμ½”λ“œ νŒŒμΌμ„ νŠΉμ • OSκ°€ μ΄ν•΄ν•˜λŠ” 기계어(Binary Code)둜 λ²ˆμ—­ν•˜κ³  μ‹€ν–‰μ‹œν‚€λŠ” λͺ…λ Ήμ–΄λŠ” java이닀

java λͺ…λ Ήμ–΄λŠ” JVM(Java Virtual Machine)을 κ΅¬λ™μ‹œμΌœ λ°”μ΄νŠΈ μ½”λ“œ νŒŒμΌμ„ μ™„μ „ν•œ κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­ν•˜κ³  μ‹€ν–‰μ‹œν‚¨λ‹€.

JVM은 λ°”μ΄νŠΈμ½”λ“œμ™€ λ‹€λ₯΄κ²Œ OS에 μ’…μ†μ μ΄λ―€λ‘œ 각 OSλ³„λ‘œ λ‹€λ₯Έ κΈ°κ³„μ–΄λ‘œ λ³€μ—­ν•΄μ•Ό ν•œλ‹€.
이것이 OSλ³„λ‘œ μ„€μΉ˜ν•˜λŠ” JDK(Java Development Kit)κ°€ λ‹€λ₯Έ μ΄μœ μ΄λ‹€.

JDK,JRE,JVM에 λŒ€ν•΄ 더 μžμ„Ένžˆ μ•Œκ³  μ‹ΆμœΌλ©΄ μ•„λž˜ 글을 μ°Έκ³ ν•˜μž
πŸ–₯️ Java JDK/JRE/JVM/SE/EE/MEλž€? πŸ–₯️

πŸ€“ μ‹€μŠ΅(Window κΈ°μ€€)

μ‹€μŠ΅μ„ 톡해 μ†ŒμŠ€μ½”λ“œ μž‘μ„±κ³Ό javac 및 java λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•΄λ³΄μž
μš°μ„  μ•„λž˜μ™€ 같이 디렉토리λ₯Ό κ΅¬μ„±ν•˜μž

temp
β”œβ”€β”€ src 					   # μ†ŒμŠ€ 파일이 μ €μž₯λ˜λŠ” 디렉토리
β”‚   β”œβ”€β”€ ch01
β”‚       β”œβ”€β”€ sec06			   # νŒ¨ν‚€μ§€ 디렉토리
β”‚           β”œβ”€β”€ Hello.java	   # μ†ŒμŠ€ 파일
β”‚
β”œβ”€β”€ bin						   # νŒŒμ΄νŠΈμ½”λ“œ 파일이 μ €μž₯λ˜λŠ” 디렉토리

πŸ“‚νŒ¨ν‚€μ§€λž€?

  • μžλ°”λŠ” νŒŒμΌμ„ μ‰½κ²Œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ νŒ¨ν‚€μ§€(package)λ₯Ό μ‚¬μš©ν•œλ‹€.
  • 파일 μ‹œμŠ€ν…œμ˜ 디렉토리라 μƒκ°ν•˜λ©΄ λœλ‹€.

λ‹€μŒκ³Ό 같이 μ†ŒμŠ€ νŒŒμΌμ„ μž‘μ„±ν•˜μž

package ch1.sec06;

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

κ·ΈλŸ°λ‹€μŒ tempλ””λ ‰ν† λ¦¬λ‘œ 이동 ν›„ javacλ₯Ό 톡해 μ»΄νŒŒμΌμ„ μ§„ν–‰ν•œλ‹€

javac -d [λ°”μ΄νŠΈμ½”λ“œ μ €μž₯ μœ„μΉ˜] [μ†ŒμŠ€μ½”λ“œ 경둜/*.java]


μœ„ μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ 같이 μž‘μ„±ν•˜λ©΄ λœλ‹€
javac -d bin scr/ch01/sec06/Hello.java


λ§ˆμ§€λ§‰μœΌλ‘œ javaλ₯Ό 톡해 μ‹€ν–‰μ‹œν‚¨λ‹€
μ΄λ•Œ μ£Όμ˜ν•  점은 νŒ¨ν‚€μ§€ κ²½λ‘œλŠ” .을 μž…λ ₯ν•΄μ•Ό ν•˜λ©° ν΄λž˜μŠ€λŠ” .classλ₯Ό μ œμ™Έν•œ 클래슀 λͺ…λ§Œ μž…λ ₯ν•΄μ•Ό ν•œλ‹€

java -cp [λ°”μ΄νŠΈμ½”λ“œ 파일 μœ„μΉ˜] [νŒ¨ν‚€μ§€ 경둜.클래슀λͺ…]


μœ„ μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ 같이 μž‘μ„±ν•˜λ©΄ λœλ‹€
javac -d bin ch01.sec06.Hello

✏️ μ½”λ“œ μš©μ–΄ 이해

package ch01.sec06
  • λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό νŒ¨ν‚€μ§€ 선언이라 ν•œλ‹€
  • μ†ŒμŠ€νŒŒμΌμ΄ src/ch01/sec06 νŒ¨ν‚€μ§€μ— μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€
  • νŒŒμ΄νŠΈμ½”λ“œ νŒŒμΌλ„ bin/ch01/sec06 νŒ¨ν‚€μ§€μ— μƒμ„±λœλ‹€
public class Hello{
	//클래슀 블둝
}
  • λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό 클래슀 선언이라 ν•œλ‹€
  • ν΄λž˜μŠ€λŠ” 숫자둜 μ‹œμž‘ν•  수 μ—†κ³  곡백을 포함할 수 μ—†λ‹€
  • μ†ŒμŠ€ 파일λͺ…κ³Ό λŒ€μ†Œλ¬Έμžκ°€ μ™„λ²½νžˆ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€
public static void main(String[] args){
	//λ©”μ†Œλ“œ 블둝
}
  • λ‹€μŒκ³Ό 같은 μ½”λ“œλ₯Ό main() λ©”μ†Œλ“œλΌ λΆ€λ₯Έλ‹€
  • main() λ©”μ†Œλ“œλ₯Ό ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ§„μž…μ  (entry point)이라 λΆ€λ₯Έλ‹€



Reference

profile
λŠλ¦΄μ§€λΌλ„ κΎΈμ€€ν•˜κ³  κΌΌκΌΌν•˜κ²Œ

0개의 λŒ“κΈ€