πŸ’»

Java ν”„λ‘œκ·Έλž˜λ° - μžλ°” κΈ°λ³Έ 문법 λ³Έλ¬Έ

KITRI/JAVA

Java ν”„λ‘œκ·Έλž˜λ° - μžλ°” κΈ°λ³Έ 문법

λ˜νš¨λ‹ˆ 2020. 4. 27. 11:37

μžλ°” μ–Έμ–΄μ˜ νŠΉμ§• 

 

1. μš΄μ˜μ²΄μ œμ— 독립적이닀.

: μžλ°”κ°€μƒλ¨Έμ‹ (JVM)을 ν†΅ν•΄μ„œ κ°€λŠ₯ν•œλ°, μžλ°” μ‘μš©ν”„λ‘œκ·Έλž¨μ€ μš΄μ˜μ²΄μ œλ‚˜ ν•˜λ“œμ›¨μ–΄κ°€ μ•„λ‹Œ JVMν•˜κ³ λ§Œ ν†΅μ‹ ν•˜κ³  JVMμ•„ μžλ°” μ‘μš©ν”„λ‘œκ·Έλž¨μœΌλ‘œλΆ€ν„° 전달받은 λͺ…령을 ν•΄λ‹Ή μš΄μ˜μ²΄μ œκ°€ 이해할 수 μžˆλ„λ‘ λ³€ν™˜ν•˜μ—¬ μ „λ‹¬ν•œλ‹€.

 

2. 객체지ν–₯언어이닀.

: 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ μ€‘μ˜ ν•˜λ‚˜λ‘œ 객체지ν–₯ κ°œλ…μ˜ νŠΉμ§•μΈ 상속, μΊ‘μŠν™”, λ‹€ν˜•μ„±μ΄ 잘 적용된 μˆœμˆ˜ν•œ 객체지ν–₯언어이닀. μž¬μ‚¬μš©μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ˜ μš©μ΄μ„± λ“± λ§Žμ€ μž₯점을 가지고 μžˆλ‹€. 

 

3. μžλ™ λ©”λͺ¨λ¦¬κ΄€λ¦¬(Garbage Collection)

: μžλ°”λ‘œ μž‘μ„±λœ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄, 가비지컬렉터가 μžλ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό 관리해주기 λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” λ©”λͺ¨λ¦¬λ₯Ό λ”°λ‘œ κ΄€λ¦¬ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. 

 

4. λ„€νŠΈμ›Œν¬μ™€ λΆ„μ‚°μ²˜λ¦¬λ₯Ό μ§€μ›ν•œλ‹€.

: λ‹€μ–‘ν•œ λ„€νŠΈμ›Œν¬ ν”„λ‘œκ·Έλž˜λ° 라이브러리(Java API)λ₯Ό 톡해 비ꡐ적 짧은 μ‹œκ°„μ— λ„€νŠΈμ›Œν¬ κ΄€λ ¨ ν”„λ‘œκ·Έλž¨μ„ μ‰½κ²Œ κ°œλ°œν•  수 μžˆλ„λ‘ μ§€μ›ν•œλ‹€.

 

5. λ©€ν‹°μ“°λ ˆλ“œλ₯Ό μ§€μ›ν•œλ‹€.

: 일반적으둜 λ©€ν‹°μ“°λ ˆλ“œμ˜ 지원은 μ‚¬μš©λ˜λŠ” μš΄μ˜μ²΄μ œμ— 따라 κ΅¬ν˜„λ°©λ²•λ„ μƒμ΄ν•˜λ©°, 처리 방식도 λ‹€λ₯΄λ‹€. κ·ΈλŸ¬λ‚˜ μžλ°”μ—μ„œ κ°œλ°œλ˜λŠ” λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž¨μ€ μ‹œμŠ€ν…œκ³ΌλŠ” 관계없이 κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. 그리고 μ—¬λŸ¬μ“°λ ˆλ“œμ— λŒ€ν•œ μŠ€μΌ€μ₯΄λ§μ„ μžλ°” 인터프리터가 λ‹΄λ‹Ήν•˜κ²Œ λœλ‹€.

 

6. 동적 λ‘œλ”©(Dynamic Loading)을 μ§€μ›ν•œλ‹€.

: 보톡 μžλ°”λ‘œ μž‘μ„±λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ—¬λŸ¬ 개의 클래슀둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€. μžλ°”λŠ” 동적 λ‘œλ”©μ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ μ‹œμ— λͺ¨λ“  ν΄λž˜μŠ€κ°€ λ‘œλ”©λ˜μ§€ μ•Šκ³  ν•„μš”ν•œ μ‹œμ μ— 클래슀λ₯Ό λ‘œλ”©ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€. 

 

 


 

JVM(Java Virtual Machine) 

 

"Write once, run anywhere"(ν•œλ²ˆ μž‘μ„±ν•˜λ©΄ μ–΄λ””μ„œλ“  μ‹€ν–‰λœλ‹€.) 즉 μ–΄λŠ κΈ°κΈ°, λ˜λŠ” μ–΄λŠ 운영체제 μƒμ—μ„œλ„ 싀행될 수 있게 ν•˜λŠ” 것과 ν”„λ‘œκ·Έλž¨ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜κ³  μ΅œμ ν™”ν•˜λŠ” 것이 κΈ°λ³Έ κΈ°λŠ₯이닀. μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κ³  ν•΄λ‹Ή μ½”λ“œμ— λŒ€ν•΄ λŸ°νƒ€μž„ ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” 것 λ˜λŠ” ν”„λ‘œμ„ΈμŠ€ 가상 λ¨Έμ‹ μœΌλ‘œ μ •μ˜ν•œλ‹€. JVM의 싀행을 톡해 νž™(Heap)κ³Ό μŠ€νƒ(Stack)의 λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ ν™•μΈν•œλ‹€. 

 

- 가비지 μ»¬λ ‰μ…˜(Garbage Collenction)

μžλ°” μ΄μ „μ—λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ λͺ¨λ“  ν”„λ‘œκ·Έλž¨ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν–ˆμœΌλ‚˜, μžλ°”μ—μ„œλŠ” JVM이 ν”„λ‘œκ·Έλž¨ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•œλ‹€. JVM은 가비지 μ»¬λ ‰μ…˜μ΄λž€ ν”„λ‘œμ„ΈμŠ€λ₯Ό 톡해 λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜λ©°, 이 가비지 μ»¬λ ‰μ…˜μ€ μžλ°” ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μ§€μ†μ μœΌλ‘œ μ°Ύμ•„μ„œ μ œκ±°ν•œλ‹€. 가비지 μ»¬λ ‰μ…˜μ€ μ‹€ν–‰ 쀑인 JVM λ‚΄λΆ€μ—μ„œ μΌμ–΄λ‚œλ‹€.

 

[μ°Έκ³ ]

JDK - μžλ°” 개발 도ꡬ(Java Development Kit)

JRE - μžλ°” μ‹€ν–‰ ν™˜κ²½(Java Runtime Environment), μžλ°”λ‘œ μž‘μ„±λœ μ‘μš©ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κΈ° μœ„ν•œ μ΅œμ†Œν™˜κ²½

JDK = JRE + κ°œλ°œμ— ν•„μš”ν•œ μ‹€ν–‰νŒŒμΌ(javac.exe: μžλ°” 컴파일러(μžλ°”μ†ŒμŠ€μ½”λ“œ -> λ°”μ΄νŠΈμ½”λ“œ) λ“±)

JRE = JVM + 클래슀라이브러리(Java API)

 


λ³€μˆ˜μ˜ νƒ€μž…

: λ³€μˆ˜λž€?값을 μ €μž₯ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬ 곡간을 λ§ν•œλ‹€.

 

μžλ£Œν˜•

: κ°’μ˜ μ’…λ₯˜μ— 따라 값이 μ €μž₯될 κ³΅κ°„μ˜ 크기와 μ €μž₯ν˜•μ‹μ„ μ •μ˜ν•œ 것이 μžλ£Œν˜•μ΄λ‹€. 

μžλ£Œν˜•μ—λŠ” λ¬Έμžν˜•(char), μ •μˆ˜ν˜•(byte, short, int, long), μ‹€μˆ˜ν˜•(float, double) 등이 μžˆλ‹€.

 

μžλ£Œν˜•μ€ 크게 'κΈ°λ³Έν˜•(primitive type)' κ³Ό 'μ°Έμ‘°ν˜•(reference type)' 두 κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆλŠ”λ°, κΈ°λ³Έν˜• λ³€μˆ˜λŠ” μ‹€μ œ 값을 μ €μž₯ν•˜λŠ” 반면, μ°Έμ‘°ν˜• λ³€μˆ˜λŠ” μ–΄λ–€ 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” μ£Όμ†Œ(memory address)λ₯Ό κ°’μœΌλ‘œ κ°–λŠ”λ‹€. μžλ°”λŠ” C언어와 달리 μ°Έμ‘°ν˜• λ³€μˆ˜ κ°„μ˜ 연산을 ν•  수 μ—†μœΌλ―€λ‘œ μ‹€μ œ 연산에 μ‚¬μš©λ˜λŠ” 것은 λͺ¨λ‘ κΈ°λ³Έν˜• λ³€μˆ˜μ΄λ‹€. μ°Έμ‘°ν˜• λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•ŒλŠ” λ³€μˆ˜μ˜ νƒ€μž…μœΌλ‘œ 클래슀의 이름을 μ‚¬μš©ν•˜λ―€λ‘œ 클래슀의 이름이 μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž…μ΄ λœλ‹€. (예, Date today = new Date(); -> Date클래슀 νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜ todayλ₯Ό μ„ μ–Έν•œ 것)

 

 

 

 

 

 

/** 
 * @Author : κΉ€μ†Œν˜„
 * @Date   : 2020. 4. 27.
 * @Description :  μžλ£Œν˜•
 */

 

λ°μ΄ν„°λ‘œ λ“€μ–΄κ°€λŠ” 것은 μžλ£Œν˜•, λͺ¨μžλ₯΄λ©΄ error 이고 λ‚¨μœΌλ©΄ error μ•„λ‹ˆλ‹€. κ·Έλ ‡μ§€λ§Œ μ μ ˆν•˜κ²Œ λ§žλŠ” 데이터 νƒ€μž…μ„ 잘 섀정해주도둝 ν•˜μž.

μ»΄νŒŒμΌν•˜λ©΄ μ£ΌκΈ°μ–΅μž₯치 λ©”λͺ¨λ¦¬ 곡간에 μ˜¬λΌκ°”λ‹€κ°€ ν”„λ‘œκ·Έλž¨μ΄ λλ‚˜λ©΄ λ©”λͺ¨λ¦¬ κ³΅κ°„μ—μ„œ λ‚΄λ €μ˜¨λ‹€. 

 

  • 숫자(μ •μˆ˜, μ‹€μˆ˜)
  • μ •μˆ˜ : byte, short, int, long 

 

  • μ‹€μˆ˜ : float, double

 

  • 문자 : (2byte)

 

  • λ¬Έμžμ—΄ : 2byte 이상 μ°Έμ‘°ν˜• μžλ£Œν˜•

[μ°Έκ³ ]

Cμ–Έμ–΄μ—μ„œλŠ”

char *str = "Hello";

printf("%d", str); -> str의 μ£Όμ†Œκ°’

printf("%s", *str); -> str의 첫번째 λ¬ΈμžλΆ€ν„° 맨 λ§ˆμ§€λ§‰ λ„κ°’κΉŒμ§€ 좜λ ₯ν•œλ‹€.

 

Oracle의 λ¬Έμžμ—΄μ€ λ²„μ „λ³„λ‘œ μ•žλ’€ λ¬Έμžμ— 곡백이 λ“€μ–΄κ°„λ‹€. (κ·Έλž˜μ„œ 크기λ₯Ό λ„‰λ„‰ν•˜κ²Œ μž‘μ•„μ€˜μ•Όν•œλ‹€.)

 

μžλ°”μ˜ λ¬Έμžμ—΄μ€ 맨 뒀에 곡백값(null)이 λ“€μ–΄κ°„λ‹€. 

 

μžλ°”μ—μ„œ μ£Όμ†Œκ°’μ„ 비ꡐ할 일은 거의 μ—†μœΌλ―€λ‘œ λ¬Έμžμ—΄ λΉ„κ΅μ—λŠ” equals()λ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•˜μž.

 

μŠ€νƒμ˜μ—­μ— ν• λ‹Ήλœλ‹€. 

 

new ν‚€μ›Œλ“œ => νž™μ˜μ—­μ— ν• λ‹Ήλœλ‹€.

 

  • λ…Όλ¦¬ν˜• μžλ£Œν˜• :  T(1), F(0) 1btye λ‚΄λΆ€μ μœΌλ‘œ trueλŠ” 1둜, falseλŠ” 0 κ°’μœΌλ‘œ λ“€μ–΄κ°„λ‹€. 

 

 


 

 

[μ°Έκ³ ] λ³΄μˆ˜ν‘œν˜„

μ‹­μ§„μˆ˜λ₯Ό μ΄μ§„μˆ˜ 숫자둜 바꿔라.

 

μ΄μ§„μˆ˜ 숫자λ₯Ό μ‹­μ§„μˆ˜λ‘œ 바꿔라.

즉, 음수면 

예) -15이면 14λ₯Ό μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν•  λ•Œ 0으둜 μ±„μ›Œμ£Όκ³  λ‚˜λ¨Έμ§€λ₯Ό 1둜 μ±„μ›Œμ§„λ‹€.

0000 1110 (1을 0으둜 λ°”κΎΈκΈ°)-> 1111 0001

 

 


 

 

/**
 * @Author : κΉ€μ†Œν˜„
 * @Date   : 2020. 4. 27.
 * @Description : μ—°μ‚°μž μš°μ„ μˆœμœ„
 *  1) μ΅œμš°μ„  μ—°μ‚°μž      : ., [], ()
 *  2) 단항 μ—°μ‚°μž         : !, ~, +/-, ++/--(μ „μœ„ν˜•μ¦κ°μ—°μ‚°μž), (cast) λ˜λŠ” (μžλ£Œν˜•)
 *  3) μ‚°μˆ  μ—°μ‚°μž         : *, /, %, +, -
 *  4) μ‹œν”„νŠΈ μ—°μ‚°μž      : <<, >>, >>>
 *  5) λΉ„κ΅μ—°μ‚°μž          : <, >, <=, >=, ==, !=  
 *  6) λ…Όλ¦¬μ—°μ‚°μž          : &, ^, |, &&, ||
 *  7) μ‚Όν•­μ—°μ‚°μž          : 쑰건식?μ°Έ:거짓
 *  8) λŒ€μž…μ—°μ‚°μž          : =, *=, /=, %=, +=, &=, ^=, ...
 *  9) ν›„μœ„ν˜•μ¦κ°μ—°μ‚°μž : ++/--
 *  10) μˆœμ°¨μ—°μ‚°           : ,
 */

 

 

  • 단항 μ—°μ‚°μž    : !, ~, +/-, ++/--, (cast) λ˜λŠ” (μžλ£Œν˜•) 
  • 1) μ¦κ°μ—°μ‚°μž

μ—°μ‚°μž μˆœμ„œμ— μ˜ν•΄μ„œ 계산이 λœλ‹€.

 

  • 2) CAST(μžλ£Œν˜•) μ—°μ‚°μž

μ •μˆ˜λ©΄ μ •μˆ˜, μ‹€μˆ˜λ©΄ μ‹€μˆ˜ λ”± 맞게 μ¨μ£ΌλŠ” 것이 κ°€μž₯ 이상적인 κ²½μš°μ΄λ‹€. μ—°μ‚° κ²°κ³Ό λ²”μœ„κ°€ μ„ μ–Έν•œ μžλ£Œν˜•μ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜μ„œ 더 큰 λ²”μœ„μ˜ μžλ£Œν˜•μ΄ ν•„μš”ν•œ 경우 큰 λ²”μœ„μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. 

κ·ΈλŸ¬λ‚˜, 예λ₯Ό λ“€μ–΄ μ •μˆ˜ + μ‹€μˆ˜ λ₯Ό μ •μˆ˜ν˜•μœΌλ‘œ λ°”κΏ”μ£ΌλŠ” 경우, CASTμ—°μ‚°μžλ₯Ό μ΄μš©ν•œ ν˜•λ³€ν™˜μ΄ ν•„μš”ν•˜λ‹€.

 

 

 

 

 

 

ν›„μœ„μ—°μ‚°μžλ³΄λ‹€ + μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„κ°€ 더 λ†’λ‹€.
μ „μœ„μ—°μ‚°μžκ°€ +μ—°μ‚°μžλ³΄λ‹€ μš°μ„ μˆœμœ„κ°€ 더 λ†’λ‹€.

 

 

ν˜•λ³€ν™˜

ν˜•λ³€ν™˜(μΊμŠ€νŒ…, casting)μ΄λž€? λ³€μˆ˜ λ˜λŠ” μƒμˆ˜μ˜ νƒ€μž…μ„ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것

 

- ν˜•λ³€ν™˜ 방법

(νƒ€μž…) ν”Όμ—°μ‚°μž

 

double d = 85.6;

int score = (int) d;

 

μžλ™ ν˜•λ³€ν™˜

μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…κ°„μ˜ λŒ€μž…μ΄λ‚˜ 연산을 ν•  λ•Œ, ν˜•λ³€ν™˜μœΌλ‘œ νƒ€μž…μ„ μΌμΉ˜μ‹œν‚€λŠ” 것이 μ›μΉ™μ΄μ§€λ§Œ κ²½μš°μ— 따라 νŽΈμ˜μƒμ΄ 이유둜 ν˜•λ³€ν™˜μ„ μƒλž΅ν•  수 μžˆλ‹€. κ·Έλ ‡λ‹€κ³  ν•΄μ„œ ν˜•λ³€ν™˜μ΄ 이루어지지 μ•Šμ€ 것은 μ•„λ‹ˆκ³ , μ»΄νŒŒμΌλŸ¬κ°€ μƒλž΅λœ ν˜•λ³€ν™˜μ„ μžλ™μ μœΌλ‘œ μΆ”κ°€ν•œλ‹€. 

λ³€μˆ˜κ°€ μ €μž₯ν•  수 μžˆλŠ” κ°’μ˜ λ²”μœ„λ³΄λ‹€ 더 큰 값을 μ €μž₯ν•˜λ €λŠ” κ²½μš°μ— ν˜•λ³€ν™˜μ„ μƒλž΅ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. 

 

μžλ™ ν˜•λ³€ν™˜ κ·œμΉ™

1. boolean을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 7개의 κΈ°λ³Έν˜•μ€ μ„œλ‘œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€.

2. κΈ°λ³Έν˜•κ³Ό μ°Έμ‘°ν˜•μ€ μ„œλ‘œ ν˜•λ³€ν™˜ν•  수 μ—†λ‹€. 

3. μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…μ˜ λ³€μˆ˜κ°„μ˜ 연간은 ν˜•λ³€ν™˜μ„ ν•˜λŠ” 것이 μ›μΉ™μ΄μ§€λ§Œ, κ°’μ˜ λ²”μœ„κ°€ μž‘μ€ νƒ€μž…μ—μ„œ 큰 νƒ€μž…μœΌλ‘œμ˜ ν˜•λ³€ν™˜μ€ μƒλž΅ν•  수 μžˆλ‹€. 

 


 

  • μ‚°μˆ  μ—°μ‚°μž   : *, /, %, +, -

 

 

  • λΉ„κ΅μ—°μ‚°μž : <, >, <=, >=, ==, !=  

 

 

  • λ…Όλ¦¬μ—°μ‚°μž  : & , ^ , | , && , ||

 

 

 

  • μ‚Όν•­μ—°μ‚°μž : 쑰건식? μ°Έ: 거짓

 

 

 

 

  • λŒ€μž…μ—°μ‚°μž : =, *=, /=, %=, +=, &=, ^=, ...

 

 

 

λ°˜μ‘ν˜•
Comments