λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

java

1μž₯. μžλ°” μ‹œμž‘ν•˜κΈ°

Do it! μžλ°” μ™„μ „ 정볡 μ±…μœΌλ‘œ κ³΅λΆ€ν•˜λ©΄μ„œ μ •λ¦¬ν•˜λŠ” ν¬μŠ€νŒ…

 

https://youtube.com/playlist?list=PLR9w0n2BH7rfISFIV_BhWSA05YTXjKiYC 

 

[Do it μžλ°” 완전정볡] 01μž₯ μžλ°” μ‹œμž‘ν•˜κΈ°

 

www.youtube.com

 

β… . ν”„λ‘œκ·Έλž˜λ° 언어와 μžλ°”

1. ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄

: 컴퓨터가 이해할 수 μžˆλŠ” λͺ…령을 μž‘μ„±ν•˜κΈ° μœ„ν•œ 도ꡬ

μ»΄ν“¨ν„°λŠ” 0κ³Ό 1만 이해할 수 있기 λ•Œλ¬Έμ— μžλ°”, C, C++κ³Ό 같은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ‚¬μš©ν•΄

이λ₯Ό 컴파일러λ₯Ό 톡해 κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­ν•˜μ—¬ 컴퓨터에 전달해야 함

 

 1) κ³ κΈ‰μ–Έμ–΄ : 인간이 μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ λ¬Έμž₯을 μ‚¬μš©ν•΄ 컴퓨터가 μˆ˜ν–‰ν•΄μ•Ό ν•  μž‘μ—…μ„ μ •μ˜ν•œ μ–Έμ–΄, C, C++, μžλ°” λ“±

 2) 기계어 : 2μ§„ λ°μ΄ν„°λ‘œ κ΅¬μ„±λœ μ–Έμ–΄λ‘œ 컴퓨터가 직접 이해할 수 있음. (001010100010111...)

 3) μ–΄μ…ˆλΈ”λ¦¬μ–΄ : 기계 언어와 1 λŒ€ 1둜 λŒ€μ‘λ˜λŠ” μ–Έμ–΄... κ³ κΈ‰ 언어와 기계어 μ‚¬μ΄μ˜ μ–Έμ–΄

 

 

2. μžλ°”μ˜ νŠΉμ§•

 1) ν”Œλž«νΌ 독립성 : ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ΄ λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•  λ•Œ ν”Œλž«νΌ 독립성이 μžˆλ‹€κ³  ν•œλ‹€. μžλ°”μ˜ 경우 μžλ°” 가상 λ¨Έμ‹  (Java Virtual Machine)을 μ„€μΉ˜ν•˜λ©΄ μ–΄λ–€ ν”Œλž«νΌμ—μ„œλ“  μžλ°”μ˜ μ‹€ν–‰ 파일(.class 파일)을 μ‹€ν–‰ν•  수 μžˆλ‹€.

λ¬Όλ‘  ν”Œλž«νΌλ§ˆλ‹€ λ”°λ‘œλ”°λ‘œ JVM이 있긴 ν•˜λ‹€. μœˆλ„μš°μš©, λ§₯용, λ¦¬λˆ…μŠ€μš© λ“±λ“±... ν—ˆλ‚˜ μ΄λŠ” μ˜€λΌν΄μ—μ„œ μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— λ‚΄ ν”Œλž«νΌμ— λ§žλŠ” JVM을 μ„€μΉ˜ν•˜κΈ°λ§Œ ν•˜λ©΄ λœλ‹€.

  λ°˜λŒ€λ‘œ ν”Œλž«νΌ 쒅속성이 μžˆλŠ” .exe파일(μœˆλ„μš°), .app파일(λ§₯), .sh파일(λ¦¬λˆ…μŠ€) 등은 λ‹€λ₯Έ ν”Œλž«νΌμ—μ„œλŠ” μ‹€ν–‰ν•  수 μ—†λ‹€.

 

 2) 객체 μ§€ν–₯ μ–Έμ–΄

 3) ν•¨μˆ˜ν˜• μ½”λ”© 지원

 4) λΆ„μ‚° 처리 지원

 5) λ©€ν‹° μ“°λ ˆλ“œ 지원

 

3. μžλ°” κ°œλ°œλ„κ΅¬(Java Development Kit),

   μžλ°” μ‹€ν–‰ ν™˜κ²½(Java Runtime Environment)

 

=> JDK ⊃ JRE ⊃ JVM의 관계

 

 

 

 

 

 

β…‘. μžλ°” ν”„λ‘œκ·Έλž¨μ˜ κΈ°λ³Έ ꡬ쑰

1. μžλ°” μ†ŒμŠ€ μ½”λ“œμ˜ μ‹€ν–‰ κ³Όμ •

μ†ŒμŠ€ 파일(.java)을 μž‘μ„±ν•œ ν›„ μ»΄νŒŒμΌμ„ μˆ˜ν–‰ν•˜λ©΄ (이클립슀 μ‚¬μš© μ‹œ μ†ŒμŠ€μ½”λ“œλ₯Ό μ €μž₯ν•˜λ©΄ μžλ™μœΌλ‘œ μ»΄νŒŒμΌμ„ ν•΄μ€€λ‹€.) JVMμ—μ„œ λ™μž‘ν•˜λŠ” λ°”μ΄νŠΈ μ½”λ“œ(.class)κ°€ μƒμ„±λœλ‹€. 이 λ•Œ μ†ŒμŠ€ 파일과 λ°”μ΄νŠΈ μ½”λ“œλŠ” 각각 ν”„λ‘œμ νŠΈ λ‚΄μ˜ src 폴더와 bin 폴더 μ•ˆμ— μœ„μΉ˜ν•œλ‹€. 이후 λ°”μ΄νŠΈ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄ JVM은 OSμ—μ„œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›μ•„ μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œλ‹€.

 

JVM은 λ©”λͺ¨λ¦¬λ₯Ό 크게 method, stack, heap μ˜μ—­μœΌλ‘œ λ‚˜λˆ  μ‚¬μš©ν•¨μœΌλ‘œμ¨ 효율적으둜 κ΄€λ¦¬ν•œλ‹€. 이 쀑 method μ˜μ—­μ—λŠ” class μ˜μ—­, static μ˜μ—­, final(μƒμˆ˜) μ˜μ—­μ΄λΌκ³ λ„ λΆ€λ₯΄λŠ”λ°, λ©”λͺ¨λ¦¬ ν• λ‹Ή 이후 μ‹€ν–‰ 파일인 λ°”μ΄νŠΈ μ½”λ“œκ°€ λ©”λͺ¨λ¦¬μ˜ λ©”μ„œλ“œ μ˜μ—­μ— λ‘œλ”©λœλ‹€.

클래슀 내에 포함돼 μžˆλŠ” main() λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것은 JVM의 μ—­ν• λ‘œ, main() λ©”μ„œλ“œκ°€ μžλ°” ν”„λ‘œκ·Έλž¨μ˜ μ‹œμž‘μ΄μž 끝 μ§€μ μ΄λΌλŠ” λœ»μ΄κΈ°λ„ ν•˜λ‹€.

 

 

2. μ†ŒμŠ€ μ½”λ“œ κΈ°λ³Έ ꡬ쑰

/*
μ—¬λŸ¬μ€„ 주석
*/

package exam01; // package μ„ μ–ΈλΆ€

// ν•œμ€„ 주석
public class Test { // class μ„ μ–ΈλΆ€
	public static void main(String[] ar) { // main() method
        System.out.println("μ½˜μ†” ν™”λ©΄ 좜λ ₯"); // ν™”λ©΄ 좜λ ₯ μ½”λ“œ
    }
}

 1) 주석 : λ©”λͺ¨ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ©°, 컴파일 될 λ•Œ μ œμ™Έλ˜λ―€λ‘œ μ‹€ν–‰ μžμ²΄μ— μ•„λ¬΄λŸ° 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€.

쀄 수 ν˜•μ‹ 단좕킀
1쀄 // 주석 λ‚΄μš© ctrl + /
2쀄 이상  /* 주석 λ‚΄μš© */ ctrl + shift + /

 2) νŒ¨ν‚€μ§€ μ„ μ–ΈλΆ€

  νŒ¨ν‚€μ§€λ₯Ό μ§€μ •ν•˜λ©΄ 주석을 μ œμ™Έν•œ 첫 쀄에 νŒ¨ν‚€μ§€μ˜ 선언이 μ™€μ•Όν•œλ‹€. νŒ¨ν‚€μ§€λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ(λ””ν΄νŠΈ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•  λ•Œ)λŠ” 이 선언이 μƒλž΅λœλ‹€. μœ„ μ˜ˆμ œμ—μ„œλŠ” exam01 νŒ¨ν‚€μ§€ μ•ˆμ— μ†ŒμŠ€ 파일이 μœ„μΉ˜ν•˜κ³  μžˆλ‹€. 

 

 3) 클래슀 μ„ μ–ΈλΆ€

  μœ„ μ˜ˆμ œμ—μ„œ public class Test 쀑 class TestλŠ” 클래슀λͺ…이 TestλΌλŠ” 것을 λ‚˜νƒ€λ‚΄λŠ”λ°, 이 λ•Œ 클래슀λͺ…은 μ†ŒμŠ€ 파일λͺ…κ³Ό μΌμΉ˜ν•΄μ•Όλ§Œ ν•œλ‹€. λ”°λΌμ„œ ν•΄λ‹Ή μ†ŒμŠ€ 파일λͺ…은 Test.javaμ—¬μ•Ό ν•œλ‹€. 

  그리고 클래슀 λͺ… λ’€μ—λŠ” μ€‘κ΄„ν˜Έκ°€ μ˜€λŠ”λ°, 이 λ‚΄λΆ€μ—λŠ” 클래슀의 내뢀에 포함될 수 μžˆλŠ” λ‚΄λΆ€ κ΅¬μ„±μš”μ†Œ (field, method, constructor(μƒμ„±μž), inner class)κ°€ μœ„μΉ˜ν•΄μžˆλ‹€. 이 λ‚΄λΆ€ κ΅¬μ„±μš”μ†Œλ§Œμ΄ 클래슀 μ•ˆμ— μžˆμ„ 수 μžˆλ‹€. 이 예제 μ•ˆμ—λŠ” main() λ©”μ„œλ“œκ°€ μžˆμŒμ„ λ³Ό 수 μžˆλ‹€.

 

 4) main() λ©”μ„œλ“œ

  λ©”μ„œλ“œμ˜ κ΅¬μ‘°λŠ” '리턴 νƒ€μž… λ©”μ„œλ“œλͺ…(~) {}'의 ν˜•νƒœλ‘œ, public static void main(String[] ar) μ—μ„œ 리턴(λ°˜ν™˜) νƒ€μž…μ€ void, λ©”μ„œλ“œλͺ…은 main이닀. λ©”μ„œλ“œ μ›ν˜• μ•žμ— μœ„μΉ˜ν•œ public static은 λ©”μ„œλ“œλ₯Ό κΎΈλ©°μ£ΌλŠ” μˆ˜μ‹μ–΄ μ·¨κΈ‰ μ •λ„λ‘œ, public staticν•œ λ©”μ„œλ“œλ‘œ 이해할 수 μžˆλ‹€.

  참고둜 λ°”μ΄νŠΈ μ½”λ“œ(.class)κ°€ λ©”μ„œλ“œ μ˜μ—­μ— λ‘œλ”©λ˜λ©΄ JVM은 main() λ©”μ„œλ“œλΆ€ν„° μ°ΎκΈ° λ•Œλ¬Έμ— κ°€μž₯ λ¨Όμ € μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

 

 

3. μ†ŒμŠ€ 파일 컴파일과 λ°”μ΄νŠΈ μ½”λ“œ 생성

 

  1개의 μ†ŒμŠ€ νŒŒμΌμ—λŠ” μ—¬λŸ¬ 개의 클래슀 파일이 포함될 수 μžˆλŠ”λ°, 클래슀 λͺ…κ³Ό 파일 λͺ…이 κ°™μ•„μ•Όλ§Œ ν•˜λ‹ˆ μ—¬λŸ¬ 클래슀 파일 쀑 public 클래슀 λͺ…κ³Ό 파일 λͺ…을 μΌμΉ˜μ‹œν‚€λ©΄ λœλ‹€. 이 λ•Œλ¬Έμ— 파일 1개 λ‹Ή public ν΄λž˜μŠ€λ„ 1개만 μ‘΄μž¬ν•œλ‹€.

  μ†ŒμŠ€ νŒŒμΌμ„ μ»΄νŒŒμΌν•  λ•Œ, 클래슀 ν•˜λ‚˜ λ‹Ή λ°”μ΄νŠΈ μ½”λ“œ(.class)κ°€ ν•˜λ‚˜μ”© μƒμ„±λœλ‹€. 즉 μ†ŒμŠ€ 파일(.java)κ°€ ν•œκ°œμ—¬λ„ ν΄λž˜μŠ€κ°€ 100개 μ •μ˜ λ˜μ–΄ μžˆλ‹€λ©΄ λ°”μ΄νŠΈ μ½”λ“œλ„ 100κ°œκ°€ μƒμ„±λœλ‹€.

 

package sec01_basicsyntax.EX02_ByteCodeFiles;

class A { // A.class
}

class B { // B.class
}

class C { // C.class 
	class D { // C$D.class
    }
}

public class ByteCodeFiles { // ByteCodeFiles.class
	public static void main(String[] args) {
    }
}

 

  λ”°λΌμ„œ μœ„ μ˜ˆμ œμ—μ„œλŠ” 4개의 클래슀 파일이 μƒκΈ°κ²Œ λœλ‹€. 이 λ•Œ class C μ•ˆμ— μžˆλŠ” class D의 κ²½μš°λŠ” 클래슀 내뢀에 ν¬ν•¨λ˜μ–΄ 있기 λ•Œλ¬Έμ— μ΄λ„ˆ 클래슀, class CλŠ” μ•„μš°ν„° 클래슀라고 ν•œλ‹€. μ΄λ„ˆ 클래슀 DλŠ” μžμ‹ μ„ 감싸고 μžˆλŠ” 클래슀 CλΆ€ν„° ν‘œν˜„ν•΄μ•Ό ν•˜λŠ”λ°, 'class C μ•ˆμ˜ class D' 같은 의미λ₯Ό λ‹΄κ³  μžˆμ–΄μ•Ό ν•œλ‹€. λ•Œλ¬Έμ— μ΄λ„ˆ 클래슀의 λ°”μ΄νŠΈμ½”λ“œλŠ” 'μ•„μš°ν„° 클래슀$μ΄λ„ˆ 클래슀.class'같이 μƒμ„±λ˜κ³ , class DλŠ” 'D.class'κ°€ μ•„λ‹Œ 'C$D.class'와 같이 ν‘œν˜„λœλ‹€.

 

 

4. μ½˜μ†” 좜λ ₯ λ©”μ„œλ“œμ™€ λ¬Έμžμ—΄ 좜λ ₯

 

 1) λ¬Έμžμ—΄ 좜λ ₯

  : λ¬Έμžμ—΄μ€ String μžλ£Œν˜•μœΌλ‘œ μ €μž₯되며, λ°˜λ“œμ‹œ 값을 ν°λ”°μ˜΄ν‘œ("")μ•ˆμ— ν‘œκΈ°ν•΄μ•Ό ν•œλ‹€. λ¬Έμžμ—΄+λ¬Έμžμ—΄μ΄λ‚˜ λ¬Έμžμ—΄+κΈ°λ³Έ μžλ£Œν˜•μ€ λ¬Έμžμ—΄μ΄ λœλ‹€.

 

 2) System.out.println()

  : μ΄ν΄λ¦½μŠ€μ—μ„œλŠ” sysout μž…λ ₯ ν›„ + ctrl + spacebar 의 λ‹¨μΆ•ν‚€λ‘œ 뢈러올 수 있으며, μ΄λŠ” 좜λ ₯ ν›„ μ€„λ°”κΏˆμ„ ν•΄μ£ΌλŠ” λ©”μ„œλ“œμ΄λ‹€. 

  • System.out.print() : μ€„λ°”κΏˆ(κ°œν–‰) 없이 κ·Έλƒ₯ 좜λ ₯만 ν•΄μ£ΌλŠ” λ©”μ„œλ“œ
  • System.out.printf() : μ§€μ‹œμžλ₯Ό 톡해 λ³€μˆ˜μ˜ 값을 μ—¬λŸ¬ κ°€μ§€ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ 좜λ ₯ν•  수 μžˆλŠ” λ©”μ„œλ“œλ‘œ, 기본적으둜 κ°œν–‰μ€ λͺ»ν•œλ‹€. cμ–Έμ–΄μ—μ„œλŠ” 기본적으둜 μ“°μ΄λŠ” λ©”μ„œλ“œμ΄λ‹€.κΈ°λ³Έ ν˜•μ‹μ€ System.out.printf("좜λ ₯ 포맷", 인자, 인자, ...)의 ν˜•νƒœλ‘œ, 좜λ ₯ 포맷 내에 %둜 μ‹œμž‘ν•˜λŠ” μœ„μΉ˜λŠ” 인자둜 값이 λ„˜μ–΄μ˜€λŠ” μœ„μΉ˜λ‹€.
  •  
  • μ§€μ‹œμž %b %d %o %x %f %c %s
    좜λ ₯ νƒ€μž… boolean 10μ§„μˆ˜ μ •μˆ˜ 8μ§„μˆ˜ μ •μˆ˜ 16μ§„μˆ˜ μ •μˆ˜ μ†Œμˆ˜μ  ν˜•μ‹ 문자 λ¬Έμžμ—΄
  • %f둜 좜λ ₯ν•  κ²½μ—λŠ” '%전체 자릿수 + . + μ†Œμˆ˜μ  자릿수 + f'둜 ν‘œν˜„ν•΄ μ •ν˜•ν™”ν•  수 μžˆλ‹€. 예λ₯Ό λ“€λ©΄ %4.2fλŠ” 전체 μžλ¦Ώμˆ˜λŠ” 4개, μ†Œμˆ˜μ  μ•„λž˜λŠ” λ°˜μ˜¬λ¦Όν•˜μ—¬ 2μžλ¦¬κΉŒμ§€ ν‘œν˜„ν•œλ‹€. 

 

 3) λ³€μˆ˜μ— λ„£μ–΄ 좜λ ₯ν•˜κΈ°

  : int μžλ£Œν˜•μ˜ λ³€μˆ˜ age, String μžλ£Œν˜•μ˜ λ³€μˆ˜ addr을 λ¨Όμ € μ„ μ–Έν•˜κ³ , μ•„λž˜ μ˜ˆμ œμ™€ 같이 μ†Œκ΄„ν˜Έ μ•ˆμ— λ”°μ˜΄ν‘œ 없이 κ·Έλƒ₯ λ³€μˆ˜λ₯Ό λ„˜κ²¨μ£Όλ©΄ λ³€μˆ˜ μ•ˆμ˜ κ°’μœΌλ‘œ λŒ€μ²΄λ˜μ–΄ 좜λ ₯λœλ‹€.

public class Printf {
    public static void main(String[] args) {
        
        int age = 10;        
        String addr = "경기도";
        
        //'%n'μ§€μ‹œμžλ₯Ό μ‚¬μš© μ•ˆ ν–ˆμ„ 경우
        System.out.print("μ€„λ°”κΏˆ");
        System.out.print("μ—†μŒ");
        
        System.out.printf("μ€„λ°”κΏˆ κΈ°λŠ₯");
        System.out.printf("μ—†μŒ.");
        
        //'%n'μ§€μ‹œμžλ₯Ό μ‚¬μš©ν•œ 경우
        System.out.printf("쀄바꾸기%n");
        System.out.printf("성곡!%n");
        
        System.out.printf("λ‚΄ λ‚˜μ΄λŠ” %dμ‚΄ μž…λ‹ˆλ‹€.%n",age);
        System.out.printf("λ‚΄ λ‚˜μ΄λŠ” %dμ‚΄ 이고 %s에 μ‚΄κ³  μžˆμŠ΅λ‹ˆλ‹€.%n",age,addr);
        
        System.out.println("λ‚΄ λ‚˜μ΄λŠ” " + age + "μ‚΄");
        System.out.println("κ±°μ£Όμ§€λŠ” " + addr);
    }
} // μ½”λ“œ 좜처 : https://keep-cool.tistory.com/15

 

'java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

2μž₯. μžλ£Œν˜•  (0) 2022.01.28