λ°±μ—”λ“œ(Back-End) 개발/Java

μžλ°”(JAVA) μš”μ•½ 정리

rabo93 2025. 1. 10. 11:51
  •  μžλ°”μ˜ νŠΉμ§• : 객체지ν–₯, G.C(Garbage Collector), JVM, WORA

1) WORA (Write Once Run Anywhere)

=> μžλ°” ν”„λ‘œκ·Έλž¨μ€ ν•œ 번 μ†ŒμŠ€μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  λ‚˜λ©΄ 운영체제 상관없이 μ–΄λ””μ„œλ“  μ‹€ν–‰κ°€λŠ₯ν•œ νŠΉμ§•

2) JVM ( Java Virtual Machine, μžλ°” 가상 λ¨Έμ‹  )

=> κ°€μƒμ˜ CPU 역할을 μˆ˜ν–‰ν•˜λŠ” μžλ°”μ˜ 핡심 κ΅¬μ„±μš”μ†Œ

3) Garbage Collector

=> μžλ°”μ—μ„œ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜λŠ” μ—­ν•  (더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 객체λ₯Ό μžλ™μœΌλ‘œ μ •λ¦¬ν•˜λŠ” μ—­ν• , μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜κ°€ 없을 λ•Œ)


  • λ³€μˆ˜λͺ…, λ©”μ„œλ“œ μ‹λ³„μž κ·œμΉ™

1) 곡백 λΆˆκ°€

2) 쀑볡 λΆˆκ°€

3) 숫자둜 μ‹œμž‘ X

4) ν‚€μ›Œλ“œ(μ˜ˆμ•½μ–΄) μ‚¬μš© X

5) 특수문자(_, $) 만 μ‚¬μš© κ°€λŠ₯

6) λŒ€μ†Œλ¬Έμž ꡬ별

---------------------------------------

* ν•„μˆ˜λŠ” μ•„λ‹ˆμ§€λ§Œ μ§€μΌœμ€˜μ•Όν•  약속

7) μ²«κΈ€μž 영문 μ†Œλ¬Έμž 

8) 길이 μ œν•œ μ—†μŒ

9) 의미 μžˆλŠ” 이름 μ‚¬μš©


  • κΈ°λ³Έ μžλ£Œν˜• 8κ°€μ§€
  1 (byte) 2 4 8
μ •μˆ˜ν˜• byte short int long
μ‹€μˆ˜ν˜•     float double
λ¬Έμžν˜•   char    
λ…Όλ¦¬ν˜• boolean      

 

μžλ™ν˜•λ³€ν™˜ (μž‘μ€ -> 큰)

κ°•μ œν˜•λ³€ν™˜ (큰 -> μž‘μ€)

=> μ˜€λ²„ν”Œλ‘œμš° λ°œμƒ μ—¬λΆ€!


  • λ°°μ—΄ : 같은 데이터 νƒ€μž… μ—¬λŸ¬κ°œ μ €μž₯ ν•˜λ‚˜μ˜ λ³€μˆ˜λ‘œ 관리

int[] arr;

arr = {1, 2, 3};             // X (μ€‘κ΄„ν˜ΈλŠ” ν•œμ€„μ— μž‘μ„± 해야함 int[] arr = {1, 2, 3};)

arr = new[] {1, 2, 3};   // O

arr = new int[3];          // O 

arr = new int[3] {1, 2, 3}; // X


  • λ©”μ„œλ“œ : κ°μ²΄λ§ˆλ‹€ κ°€μ§€λŠ” κΈ°λŠ₯μ΄λΌλŠ” μ˜λ―Έμ—μ„œ ν•¨μˆ˜μ™€ 닀름

[μ ‘κ·Όμ œν•œ(public, private..)] λ¦¬ν„΄νƒ€μž… λ©”μ„œλ“œλͺ…([λ°μ΄ν„°νƒ€μž… λ³€μˆ˜λͺ…, ...]) {}


  • λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©

1) 이름이 같은 λ©”μ„œλ“œ

2) νŒŒλΌλ―Έν„° 갯수, νƒ€μž…, μˆœμ„œλ₯Ό λ‹€λ₯΄κ²Œ ν•˜μ—¬ 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬κ°œ μ„ μ–Έν•˜λŠ” 것

3) λŒ€ν‘œμ μΈ 예 : System.out.println() 


  • 클래슀

- λ©€λ²„λ³€μˆ˜

- μƒμ„±μž (객체 μƒμ„±ν•˜λŠ” 방법)

- λ©”μ„œλ“œ

class StudentVO {

       // λ©€λ²„λ³€μˆ˜

       // μƒμ„±μž

       // λ©”μ„œλ“œ

}


  • μ ‘κ·Όμ œν•œμž (λ„“ public > protected > default > private 쒁)

- public : μ œν•œ μ—†μŒ

- protected : 같은 νŒ¨ν‚€μ§€ λ˜λŠ” λ‹€λ₯Έ νŒ¨ν‚€μ§€λ”λΌλ„ μƒμ†κ΄€κ³„λŠ” ν—ˆμš©

- default : 같은 νŒ¨ν‚€μ§€ λ‚΄μ—μ„œλ§Œ

- private : 클래슀 λ‚΄μ—μ„œλ§Œ


  • static : 클래슀 
public class Ex {
	public static void main(String[] args) {
                   Person p = new Person();
                   Person p2 = new Person();

                   // p.num = 10 // => X
                   Person.num = 10;
                  System.out.println(Person.num);     // 10

      }
}

class Person {
    String name;         // 객체(μΈμŠ€ν„΄μŠ€)λ§ˆλ‹€ κ°€μ§ˆ 수 있음
    static int num;      //  클래슀
	public static void method() {}

}

 


  • 상속 

1) λΆ€λͺ¨ν΄λž˜μŠ€μ˜ 멀버λ₯Ό μžμ‹ν΄λž˜μŠ€μ—μ„œ 선언없이 μ‚¬μš©ν•  수 μžˆλŠ” 것 (μ€‘λ³΅μ½”λ“œ 제거)

2) 닀쀑 상속 λΆˆκ°€ (=>μžλ°”μ—μ„œλ§Œ μ•ˆλ¨)

3) private 상속 λΆˆκ°€

4) μ˜€λ²„λΌμ΄λ”© (λΆ€λͺ¨ν΄λž˜μŠ€λ‘œλΆ€ν„° 물렀받은 λ©”μ„œλ“œλ₯Ό "μž¬μ •μ˜")

  • νƒ€μž…λ³€ν™˜(레퍼런슀 ν˜•λ³€ν™˜) : λΆ€λͺ¨νƒ€μž…μœΌλ‘œλŠ” μ–Όλ§ˆλ“ μ§€ κ°€λŠ₯, μžμ‹μ€ λ³€μˆ˜μ— μ–΄λ–€ 객체가 μ €μž₯λ˜μ–΄μžˆλŠ”μ§€κ°€ μ€‘μš” 
public class Ex {
	
	public static void main(String[] args) {
    	A a = (A) new F();	// O (FλŠ” A,C,Fμ—μ„œ μ‚¬μš©κ°€λŠ₯)
	// C c = a;		// X 
        // F f = a;		// X (λ‹€μš΄μΊμŠ€νŒ…)
        C c2 = (C)a;		// O (2번째의 μ˜¬λ°”λ₯Έ λ‹΅)
        F f2 = (F)c2;		// O (μ„Έλ²ˆμ§Έμ˜ μ˜¬λ°”λ₯Έ λ‹΅, c2에 λ‚šμ΄μ§€ 말기. c2μ—λŠ” aκ°€, F()κ°€ λ“€μ–΄μžˆμŒ)
	// B b = (B)c2; 	// X (c2λŠ” F()μ΄λ―€λ‘œ A,C,Fμ—μ„œλ§Œ κ°€λŠ₯)    
    }    
}
class A {}

class B extends A {}
class C extends A {}

class D extends B {}
class E extends B {}

class F extends C {}
class G extends C {}

  • 동적바인딩 : μ½”λ“œμƒμ—μ„œ ν˜ΈμΆœλ˜λŠ” κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” λ©”μ„œλ“œμ™€ μ‹€μ œλ‘œ μ‹€ν–‰ μ‹œμ μ— ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œκ°€ λ‹€λ₯Έ ν˜„μƒ

=> λ³€μˆ˜μ— μ–΄λ–€ 객체가 μ €μž₯λ˜μ–΄ μžˆλŠ”μ§€κ°€ μ€‘μš”!

public class test {
	
	public static void main(String[] args ) {
		
		P p1 = new C();
		P p2 = new P();
		
		System.out.println(p1.name); // P (λ³€μˆ˜λŠ” 동적바인딩이 적용 μ•ˆλ¨)
		p1.method(); // C (동적바인딩 : λ©”μ„œλ“œλ§Œ 적용됨)
	}
}
class P {
	String name = "P";
	public void method() {
		System.out.println("P");
	}
}

class C extends P {
	String name = "C";
	public void method() {
		System.out.println("C");
	}
}

 


  • μΆ”μƒν΄λž˜μŠ€

1) μΆ”μƒλ©”μ„œλ“œλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” 클래슀

2) abstract ν‚€μ›Œλ“œκ°€ 뢙은 클래슀

3) 객체λ₯Ό 생성할 수 μ—†λ‹€.

   => 좔상적인 κ°œλ…μ΄λ―€λ‘œ 생성 X

   => 클래슀이기 λ•Œλ¬Έμ— μƒμ„±μžκ°€ 있음

        (μžμ‹ 클래슀 객체 μƒμ„±μ‹œ λΆ€λͺ¨ μƒμ„±μž 호좜됨)

public class test {
	
	public static void main(String[] args ) {
//		new ν•œμ†κ²€(); // X μΆ”μƒλ©”μ„œλ“œλŠ” λ“œλžλ˜λ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ—!
		new Hero(); // μƒμ„±μž 호좜됨!
		
	}
}
class Hero {
	ν•œμ†κ²€ weapon = new μ‹ λ¬Έμ§€μΉΌ(); 
	// νž™μ— μƒμ„±λ˜λŠ” μˆœμ„œ : 였브젝트 객체 생성 > ν•œμ†κ²€ 객체 생성 > μ‹ λ¬Έμ§€μΉΌ 생성 => λͺ¨λ‘ κ°μ‹Έμ„œ weaponμ—μ„œ 호좜 κ°€λŠ₯
}
abstract class ν•œμ†κ²€ {
	ν•œμ†κ²€() {
		System.out.println("μƒμ„±μž 호좜됨!");
	}
	
} // 무기듀을 λ¬Άμ„λ•Œ 좔상적인 μ΄λ¦„μœΌλ‘œ λ¬ΆκΈ° μœ„ν•΄ μΆ”μƒλ©”μ„œλ“œ μ‚¬μš©
class λ‚‘μ€κΈ€λΌλ””μš°μŠ€ extends ν•œμ†κ²€ {
//	public public λ‚‘μ€κΈ€λΌλ””μš°μŠ€() {
//		super(); //μƒλž΅ λ˜μ–΄ 있음
//	}
}
class μ‹ λ¬Έμ§€μΉΌ extends ν•œμ†κ²€ {}

  • μΈν„°νŽ˜μ΄μŠ€ : μˆœλ„ 100% μΆ”μƒλ©”μ„œλ“œλ§Œ μ„ μ–Έν•  수 μžˆλŠ”κ±°, default λ©”μ„œλ“œ μΆ”κ°€λ˜κΈ΄ 함

1) μƒμˆ˜μ™€ μΆ”μƒλ©”μ„œλ“œλ§Œ 올 수 μžˆμœΌλ―€λ‘œ

    λ³€μˆ˜λŠ” public static final μƒλž΅ κ°€λŠ₯. 

    λ©”μ„œλ“œλŠ” public abstract μƒλž΅ κ°€λŠ₯.

2) 닀쀑상속 κ°€λŠ₯ (μΈν„°νŽ˜μ΄μŠ€ λΌλ¦¬λŠ” extends 싀체 클래슀 implements)

   => μΆ”μƒλ©”μ„œλ“œ μ΄λ―€λ‘œ 이름이 같은 λ©”μ„œλ“œλ₯Ό 2개 물렀받더라도 λͺ¨ν˜Έν•˜μ§€ μ•ŠμœΌλ―€λ‘œ

        μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속을 ν—ˆμš©ν•¨

3) μƒμ„±μžκ°€ μ—†μŒ (μΆ”μƒν΄λž˜μŠ€μ™€μ˜ 차이점!)

   => μƒμ†λ°›λŠ” 싀체 ν΄λž˜μŠ€μ—μ„œ superλŠ” Objectλ₯Ό λœ»ν•¨


  • Wrapper 클래슀 

- κΈ°λ³Έ 데이터 νƒ€μž… 8κ°€μ§€μ—λŠ” κΈ°λŠ₯이 μ—†μ–΄ 1:1둜 κΈ°λŠ₯을 μ§€μ›ν•΄μ£ΌλŠ” ν΄λž˜μŠ€λ“€μ„ λ§Œλ“€μ–΄ λ†“μŒ

- μ‚¬μš© 이유 : ν˜•λ³€ν™˜κ³Ό 비ꡐ연산을 ν•˜κΈ° μœ„ν•΄ 


  • Collection Framework (API, 라이브러리) : 자료ꡬ쑰λ₯Ό κ΅¬ν˜„ν•΄ 놓은 클래슀

- SET /  LIST / MAP

1) Set : μ€‘λ³΅ν—ˆμš© X

=> κ΅¬ν˜„μ²΄ 클래슀 : HashSet, LinkedHashSet(μˆœμ„œ), TreeSet(μ •λ ¬) 

=> 속도 λΉ λ₯Έ μˆœμ„œ : HashSet > LinkedHashSet > TreeSet

 

2) LIST : λ°°μ—΄μ²˜λŸΌ 인덱슀λ₯Ό κ°€μ§€λ©° 크기 λ³€κ²½ κ°€λŠ₯ 

=> κ΅¬ν˜„μ²΄ 클래슀 : ArrayList, LinkedList, Vector

=> ArrayList VS Vector : λ©€ν‹°μ“°λ ˆλ“œ μ•ˆμ „ μ—¬λΆ€!

                                        ArrayList (μ•ˆμ „ X) /   Vector(μ•ˆμ „ O)

=> ArrayList VS LinkedList : 데이터λ₯Ό μ°Έμ‘°ν•  λ•Œ (get, select, κ°€μ Έμ˜¬λ•Œ) ArrayListκ°€ 빠름

                                             λ°μ΄ν„° μΆ”κ°€/μ‚­μ œ(μ•žλ’€)λŠ” λ˜‘κ°™μŒ

                                             λ°μ΄ν„° 쀑간 μΆ”κ°€/μ‚­μ œλŠ” LinkedListκ°€ 빠름

 

3) Map  : key, value ν•œμŒμœΌλ‘œ 데이터 μ €μž₯

=> κ΅¬ν˜„μ²΄ 클래슀 : HashMap, LinkedHashMap(μˆœμ„œ), TreeMap(μ •λ ¬)