[๊ธฐ์ˆ ๋ฉด์ ‘๋Œ€๋น„] 1. Java

 

1. Java์˜ ํŠน์ง•

- ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (OOP, ๊ฐ์ฒด๋“ค์˜ ์œ ๊ธฐ์ ์ธ ํ˜‘๋ ฅ๊ณผ ๊ฒฐํ•ฉ์— ์ค‘์ ์„ ๋‘” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹)

- ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์š”์†Œ๋“ค์ด ๊ฐ์ฒด๋กœ ํ‘œํ˜„

์žฅ์ )

- JVM(์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ )์œ„์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ์— ๋…๋ฆฝ์ 

- GarbageCollector๋ฅผ ํ†ตํ•œ ์ž๋™์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

๋‹จ์ )

- JVM ์œ„์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆฌ๋‹ค

- ๋‹ค์ค‘ ์ƒ์†์ด๋‚˜ ํƒ€์ž…์— ์—„๊ฒฉํ•˜๋ฉฐ ์ œ์•ฝ์ด ๋งŽ๋‹ค


2-1. ๊ฐ์ฒด๋ž€?

- ๋„“์€ ๊ฐœ๋…์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ- ์ข์€ ๊ฐœ๋…์œผ๋กœ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ class

 

2-2. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) ๋ž€?

- ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐ ๊ฐœ์ฒด๋“ค์˜ ์—ญํ• ์„ ์ •ํ•˜์—ฌ ๊ฐ์ฒด๋“ค ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ

 

2-3. ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์„ค๊ณ„์›์น™ 5๊ฐ€์ง€ (SOLID)

1) SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™)           : ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง„๋‹ค

2) OCP (๊ฐœ๋ฐฉ ํ์‡„ ์›์น™)          : ํ™•์žฅ์—” ์—ด๋ ค์žˆ๊ณ  ์ˆ˜์ •์—” ๋‹ซํ˜€์žˆ์–ด์•ผํ•œ๋‹ค

3) LSP (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)    : ์ƒ์œ„ ํƒ€์ž…์€ ํ•ญ์ƒ ํ•˜์œ„ ํƒ€์ž…์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค

4) ISP (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)  : ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์— ๋ฉ”์†Œ๋“œ๋Š” ์ตœ์†Œํ•œ์ผ์ˆ˜๋ก ์ข‹๋‹ค

                                                   = ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ข‹๋‹ค

5) DIP (์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™)     : ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ณด๋‹ค ์ƒ์œ„ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํด๋ž˜์Šค์™€ ๊ฐ™์ด ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ํด๋ž˜์Šค์™€ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์•ผํ•œ๋‹ค (์˜์กด์„ฑ ์ฃผ์ž…)

 

* ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ : https://dev-coco.tistory.com/142

2-4. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ 4๊ฐ€์ง€ ํŠน์ง• (์ฐธ๊ณ )

1) ์ถ”์ƒํ™” (Abstraction)

- ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”์ถœํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜

- ์—ญํ• ๊ณผ ๊ตฌํ˜„์˜ ๋ถ„๋ฆฌ

- ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ์ถ”์ƒํ™”

 

2) ์ƒ์† (Inheritance)

- ๊ธฐ์กด ํด๋ž˜์Šค ์žฌํ™œ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ž‘์„ฑ

- ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

- ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์œผ๋กœ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ ์ตœ์†Œํ™” ๋ฐ ๊ณต์œ ํ•˜๋Š” ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์— ๊ฐ„ํŽธ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

3) ๋‹คํ˜•์„ฑ (Polymorphism)

- ์ƒ์œ„ ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ํ•˜์œ„ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ (์—…์บ์ŠคํŒ…)

* ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

Vehicle vehicles[] = new Vehicle[2];
vehicles[0] = new Car();
vehicles[1] = new MotorBike();

* ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ ๊ฐ€๋Šฅ

public class Driver{
 void drice(Vehicle vehicle){
   vehicle.moveForward();
   vehicle.moveBackward();
 }
}
public class Main{
  public static void main(String[] args) {
    Driver driver = new Driver();
    Vehicle Car = new Car();
    Vehicle MotorBike = new MotorBike();
    
    driver.drive(car);
    driver.drive(motorBike);
  }
}

 

4) ์บก์Šํ™” (Encapsulation)

- ์„œ๋กœ ์—ฐ๊ด€์žˆ๋Š” ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋‚˜์˜ ์บก์Š๋กœ ๋งŒ๋“ค์–ด ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ

> ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ (data protection) : ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ํด๋ž˜์Šค์— ์ •์˜๋œ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ๋“ค ๋ณดํ˜ธ

> ๋ฐ์ดํ„ฐ ์€๋‹‰ (data hiding) : ๋‚ด๋ถ€์˜ ๋™์ž‘์„ ๊ฐ์ถ”๊ณ  ์™ธ๋ถ€์—๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋…ธ์ถœ

์ ‘๊ทผ ์ œ์–ด์ž

- private, getter/setter

- ๊ฐ์ฒด ๋‚ด ์ƒ์„ฑ์ž์— ๊ฐ์ฒด๋ฅผ ๋‘” ๊ฒฝ์šฐ ์˜์กด์„ฑ ์ฃผ์ž… ๊ฐœ๋…๊ณผ ์—ฐ๊ฒฐ๋จ

- ์˜์กด์„ฑ์ด ์ฃผ์ž…๋œ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ•œ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด operate()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋„ ์บก์Šํ™”

   -> ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„ ๋‚ฎ์ถ”๊ธฐ (์˜์กด์„ฑ ์ฃผ์ž…๋ฐ›์€ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๋กœ์ง ์•Œํ•„์š” ์—†์Œ)


3. ์—…์บ์ŠคํŒ… & ๋‹ค์šด์บ์ŠคํŒ…

1) ์—…์บ์ŠคํŒ…

- ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ์บ์ŠคํŒ…๋˜๋Š” ๊ฒƒ

- ์ž์‹ ํด๋ž˜์Šค์—๋งŒ ์žˆ๋Š” ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€

- ์ž์‹ ํด๋ž˜์Šค์— ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰

์‚ฌ์šฉ ์ด์œ ) ๋ฐฐ์—ด์— ๋‹ค๋ฅธ ๊ฐ์ฒด ๋„ฃ์„ ๋•Œ / ์ƒ์„ฑ์ž๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž… ์ฐธ์กฐํ•˜๊ณ ์‹ถ์„๋•Œ

class Unit {
    public void attack() {
        System.out.println("์œ ๋‹› ๊ณต๊ฒฉ");
    }
}

class Zealot extends Unit {
    public void attack() {
        System.out.println("์ฐŒ๋ฅด๊ธฐ");
    }

    public void teleportation() {
        System.out.println("ํ”„๋กœํ† ์Šค ์›Œํ”„");
    }
}

public class Main {
    public static void main(String[] args) {
    	// * ์—…์บ์ŠคํŒ…(upcasting)
        Unit unit_up = new Zealot();
        
		unit_up.attack(); // "์ฐŒ๋ฅด๊ธฐ"
        unit_up.teleportation(); // ์‚ฌ์šฉ๋ถˆ๊ฐ€
    }
}

2) ๋‹ค์šด ์บ์ŠคํŒ…

- ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์ž์‹ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ์บ์ŠคํŒ… ๋˜๋Š” ๊ฒƒ

- ์บ์ŠคํŒ… ์—ฐ์‚ฐ์ž ๋ช…์‹œํ•ด์•ผํ•จ

์‚ฌ์šฉ ์ด์œ ) ์—…์บ์ŠคํŒ…ํ•œ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์ž์‹ ํด๋ž˜์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด

class Unit {
    public void attack() {
        System.out.println("์œ ๋‹› ๊ณต๊ฒฉ");
    }
}

class Zealot extends Unit {
    public void attack() {
        System.out.println("์ฐŒ๋ฅด๊ธฐ");
    }

    public void teleportation() {
        System.out.println("ํ”„๋กœํ† ์Šค ์›Œํ”„");
    }
}

public class Main {
    public static void main(String[] args) {

        Unit unit_up;
        Zealot zealot = new Zealot();

        unit_up = zealot; // ์—…์บ์ŠคํŒ…
        
        // * ๋‹ค์šด์บ์ŠคํŒ…(downcasting) - ์ž์‹ ์ „์šฉ ๋ฉค๋ฒ„๋ฅผ ์ด์šฉํ•˜๊ธฐ์œ„ํ•ด, ์ด๋ฏธ ์—…์บ์ŠคํŒ…ํ•œ ๊ฐ์ฒด๋ฅผ ๋˜๋Œ๋ฆด๋•Œ ์‚ฌ์šฉ
        Zealot unit_down = (Zealot) unit_up; // ์บ์ŠคํŒ… ์—ฐ์‚ฐ์ž๋Š” ์ƒ๋žต ๋ถˆ๊ฐ€๋Šฅ. ๋ฐ˜๋“œ์‹œ ๊ธฐ์žฌ
        unit_down.attack(); // "์ฐŒ๋ฅด๊ธฐ"
        unit_down.teleportation(); // "ํ”„๋กœํ† ์Šค ์›Œํ”„" (์ด์ œ ์‚ฌ์šฉ๊ฐ€๋Šฅ)
    }
}

4. JVM์˜ ์—ญํ• 

- ์Šคํƒ ๊ธฐ๋ฐ˜ ๋™์ž‘

- Java Byte Code๋ฅผ OS์— ๋งž๊ฒŒ ํ•ด์„ํ•ด์ฃผ๋Š” ์—ญํ• 

- ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ์ž๋™์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ


5. Java ์ปดํŒŒ์ผ ๊ณผ์ •

1) ๊ฐœ๋ฐœ์ž๊ฐ€ Java ํŒŒ์ผ ์ƒ์„ฑ

2) build

3) Java ์ปดํŒŒ์ผ๋Ÿฌ์˜ javac์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋ฅผ ์ƒ์„ฑ

4) Class Loader๋ฅผ ํ†ตํ•ด JVM ๋ฉ”๋ชจ๋ฆฌ ๋‚ด๋กœ ๋กœ๋“œ

5) ์‹คํ–‰ ์—”์ง„์„ ํ†ตํ•ด ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ํ•ด์„ (๊ฐ OS๋ณ„)


6. Java์—์„œ ์ œ๊ณตํ•˜๋Š” ์›์‹œํƒ€์ž…, ๊ฐ๊ฐ ๋ช‡๋ฐ”์ดํŠธ ์ฐจ์ง€?

- ์ •์ˆ˜ํ˜• byte(1), short(2), int(4), long(8)

- ์‹ค์ˆ˜ํ˜• float(4), double(8)

- ๋…ผ๋ฆฌํ˜• boolean(1)


7. ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding) vs ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)

1) ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding) : ์ƒ์œ„ ํด๋ž˜์Šค์—์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜

2) ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading) : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜/ํƒ€์ž…์„ ๋‹ค๋ฅด๊ฒŒํ•˜์—ฌ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ •์˜


8. ๋ถˆ๋ณ€ ๊ฐ์ฒด

- ๊ฐ์ฒด ์ƒ์„ฑ ์ดํ›„ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด

- ์›์‹œํƒ€์ž…์ธ ๊ฒฝ์šฐ final ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ

- ์ฐธ์กฐํƒ€์ž…์ธ ๊ฒฝ์šฐ

์ฐธ์กฐ ํƒ€์ž…์€ ๋Œ€ํ‘œ์ ์œผ๋กœ 1.๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜๋„ ์žˆ๊ณ , 2.๋ฐฐ์—ด์ด๋‚˜ 3.List ๋“ฑ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
1. ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ์ผ๋ฐ˜ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•„๋“œ์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋„ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
2. ๋ฐฐ์—ด์ผ ๊ฒฝ์šฐ ๋ฐฐ์—ด์„ ๋ฐ›์•„ copyํ•ด์„œ ์ €์žฅํ•˜๊ณ , getter๋ฅผ clone์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
(๋ฐฐ์—ด์„ ๊ทธ๋Œ€๋กœ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜, ๋ฐ˜ํ™˜ํ•  ๊ฒฝ์šฐ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ. ๋•Œ๋ฌธ์— clone์„ ๋ฐ˜ํ™˜ํ•ด ์™ธ๋ถ€์—์„œ ๊ฐ’ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•จ)
 
3. ๋ฆฌ์ŠคํŠธ์ธ ๊ฒฝ์šฐ์—๋„ ๋ฐฐ์—ด๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ์„ฑ์‹œ ์ƒˆ๋กœ์šด List๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ฐฐ์—ด๊ณผ ๋ฆฌ์ŠคํŠธ๋Š” ๋‚ด๋ถ€๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š”๋ฐ, ์ด๋ฅผ ๋ฐฉ์–ด์  ๋ณต์‚ฌ(defensive-copy)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

- ๋ถˆ๋ณ€๊ฐ์ฒด ์‚ฌ์šฉ์ด์œ ?

๋ถˆ๋ณ€ ๊ฐ์ฒด๋‚˜ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์–ป๋Š” ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
 
1. Thread-Safeํ•˜์—ฌ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์œ ์šฉํ•˜๋ฉฐ, ๋™๊ธฐํ™”๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
(๊ณต์œ  ์ž์›์ด ๋ถˆ๋ณ€์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ๋™์ผํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ)
 
2. ์‹คํŒจ ์›์ž์ ์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
(์–ด๋– ํ•œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ๋˜๋”๋ผ๋„ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์ „์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด ์˜ˆ์™ธ ๋ฐœ์ƒ ์ „๊ณผ ๋˜‘๊ฐ™์€ ์ƒํƒœ๋กœ ๋‹ค์Œ ๋กœ์ง ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)
 
3. ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ํ”ผํ•ด ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ป ๋ถ€์ˆ˜ํšจ๊ณผ : ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ๊ฐ์ฒด์˜ ํ•„๋“œ ๊ฐ’์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์˜ˆ์™ธ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹คํ–‰์ด ์ค‘๋‹จ๋˜๋Š” ํ˜„์ƒ
 
4. ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
 
5. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์Šค์บ”ํ•˜๋Š” ๊ฐ์ฒด์˜ ์ˆ˜๊ฐ€ ์ค„๊ธฐ ๋•Œ๋ฌธ์— Gc ์ˆ˜ํ–‰ ์‹œ ์ง€์—ฐ์‹œ๊ฐ„๋„ ์ค„์–ด๋“ ๋‹ค.)

9. ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค

1) ์ถ”์ƒ ํด๋ž˜์Šค : ํด๋ž˜์Šค ๋‚ด ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จ๋˜๊ฑฐ๋‚˜ abstract๋กœ ์ •์˜๋œ ๊ฒฝ์šฐ 

2) ์ธํ„ฐํŽ˜์ด์Šค : ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๊ฐ€ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š” ๊ฒƒ

 

๊ณตํ†ต์ )

- new ์—ฐ์‚ฐ์ž๋กœ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ถˆ๊ฐ€๋Šฅ

- ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ํ™•์žฅ/๊ตฌํ˜„

์ฐจ์ด์ )

- ์ธํ„ฐํŽ˜์ด์Šค -> ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•ด ํŠน์ •ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•˜๋„๋ก ๊ฐ•์ œ

- ์ถ”์ƒํด๋ž˜์Šค -> ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋“ค์˜ ๊ณตํ†ต์ ์ธ ๋กœ์ง ์ถ”์ƒํ™”/๊ธฐ๋Šฅ ํ™•์žฅ ์œ„ํ•ด ์‚ฌ์šฉ

- ์ธํ„ฐํŽ˜์ด์Šค ๋‹ค์ค‘์ƒ์† ๊ฐ€๋Šฅ | ์ถ”์ƒ ํด๋ž˜์Šค ๋‹ค์ค‘์ƒ์† ๋ถˆ๊ฐ€


10. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด

- ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด

- ์ธ์Šคํ„ด์Šค 1๊ฐœ๋งŒ ์กด์žฌํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅ

- ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค ์ž์ฃผ ์ƒ์„ฑํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ (๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ๋ฐฉ์ง€)

- ์˜ˆ์‹œ) Spring Bean (์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ชจ๋“  ๋นˆ๋“ค์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ)

์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ : https://dev-coco.tistory.com/109


11. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)

- JVM ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฒ•

- ์‹œ์Šคํ…œ์—์„œ ๋™์ ์œผ๋กœ ํ• ๋‹น๋๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘์—์„œ ํ•„์š”์—†์–ด์ง„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํšŒ์ˆ˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•

- ๊ณผ์ •

1) JVM์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ๋ฉˆ์ถค

2) GC์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ ์ œ์™ธ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ ์ค‘๋‹จ (Stop The World)

3) ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ œ๊ฑฐ (Mark and SweeP)

* ++ GC์˜ ์ž‘์—…์€ Young ์˜์—ญ์— ๋Œ€ํ•œ Minor GC์™€ Old ์˜์—ญ์— ๋Œ€ํ•œ Major GC๋กœ ๊ตฌ๋ถ„


12. ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

1) ๋ฉ”์†Œ๋“œ(Method) ์˜์—ญ

- ์ „์—ญ๋ณ€์ˆ˜์™€ static ๋ณ€์ˆ˜๋ฅผ ์ €์žฅ

- ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ๋‹ค

ํ• ๋‹น : JVM ๋™์ž‘ํ•ด์„œ ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋ ๋•Œ ์ƒ์„ฑ

 

2) ์Šคํƒ(Stack) ์˜์—ญ = ์ •์ ํ• ๋‹น

- ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ์ดํ„ฐ ๊ฐ’ ์ €์žฅ

- ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๊ณ  ์ข…๋ฃŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

- LIFO ๊ตฌ์กฐ

- ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น๋˜๋ฉด ์ง€์›Œ์ง„๋‹ค

ํ• ๋‹น : ์ปดํŒŒ์ผ ํƒ€์ž„์‹œ ํ• ๋‹น

 

3) ํž™(Heap) ์˜์—ญ = ๋™์ ํ• ๋‹น

- new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค), ๋ฐฐ์—ด ๋“ฑ์ด ์ €์žฅ

- ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

ํ• ๋‹น : ๋Ÿฐํƒ€์ž„์‹œ ํ• ๋‹น


13. ํด๋ž˜์Šค - ๊ฐ์ฒด - ์ธ์Šคํ„ด์Šค

1) ํด๋ž˜์Šค : ๊ฐ์ฒด ์„ค๊ณ„๋„, ๊ฐ์ฒด ์ƒ์„ฑ์— ์‚ฌ์šฉ

2) ๊ฐ์ฒด : ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋จ, ๊ณ ์œ  ์ด๋ฆ„/์ƒํƒœ(ํ•„๋“œ)/ํ–‰๋™(๋ฉ”์„œ๋“œ) ๊ฐ€์ง

3) ์ธ์Šคํ„ด์Šค : ๊ฐ์ฒด์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜์–ด ์‹ค์ œ๋กœ ํ™œ์šฉ๋˜๋Š” ์‹ค์ฒด


14. ์ƒ์„ฑ์ž (Constructor)

- ํด๋ž˜์Šค์™€ ์ด๋ฆ„์ด ๊ฐ™์€ ๋ฉ”์„œ๋“œ

- ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ

- ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ default๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ, ์ƒ์„ฑ์ž๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋‹ค๋ฅด๊ฒŒํ•˜์—ฌ ์˜ค๋ฒ„๋กœ๋”ฉ ๊ฐ€๋Šฅ


15. Wrapper Class์™€ Boxing/UnBoxing

- Wrapper Class : ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์— ๋Œ€ํ•œ ๊ฐ์ฒด ํ‘œํ˜„

- Boxing : ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• -> Wrapper Class 

- UnBoxing : Wrapper -> Class ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• 


16. Synchronized

- ์—ฌ๋Ÿฌ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•œ ๊ฐœ์˜ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์“ฐ๋ ˆ๋“ค์€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ชปํ•˜๊ฒŒ ๋ง‰๋Š” ๊ฐœ๋…

- ๋ฐ์ดํ„ฐ์˜ thread-safe๋ฅผ ์œ„ํ•ด ์ž๋ฐ”์—์„œ Synchronized ํ‚ค์›Œ๋“œ ์ œ๊ณตํ•ด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์“ฐ๋ ˆ๋“œ๊ฐ„ ๋™๊ธฐํ™” ์‹œ์ผœ ๋ฐ์ดํ„ฐ์˜ thread-safe ๋ณด์žฅ

- Synchronized๋Š” ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ์— ์‚ฌ์šฉํ•ด์„œ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Synchronized ํ‚ค์›Œ๋“œ๋ฅผ ๋‚จ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด ์˜คํžˆ๋ ค ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์ €ํ•˜ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Œ


17. new String๊ณผ ๋ฆฌํ„ฐ๋Ÿด("")

- new String()์€ new ํ‚ค์›Œ๋“œ๋กœ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ €์žฅ

- ๋ฆฌํ„ฐ๋Ÿด("")์€ Heap ๋‚ด String Constant Pool ์˜์—ญ์— ์ €์žฅ


18. static

- static ๋ณ€์ˆ˜/๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ๋•Œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋จ

- ํด๋ž˜์Šค ๋กœ๋”ฉ์ด ๋๋‚˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (์ธ์Šคํ„ด์Šค=๊ฐ์ฒด ์ƒ์„ฑ์—†์ด ์‚ฌ์šฉ๊ฐ€๋Šฅ)

- ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ 

- GC ๊ด€๋ฆฌ ์˜์—ญ ๋ฐ– -> ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์ด ์œ ์ง€๋œ์ฑ„๋กœ ์กด์žฌ

static ๋ณ€์ˆ˜์™€ static ๋ฉ”์„œ๋“œ : https://dev-coco.tistory.com/153


19. Error์™€ Exception ์ฐจ์ด

1) Error

- ์‹คํ–‰ ์ค‘ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ์น˜๋ช…์  ์˜ค๋ฅ˜

- ์ปดํŒŒ์ผ ์‹œ์ ์— ์ฒดํฌํ•  ์ˆ˜ ์—†๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ๋น„์ •์ƒ ์ข…๋ฃŒ

- ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ UncheckedException

2) Exception

- ๊ฒฝ๋ฏธํ•œ ์˜ค๋ฅ˜

- try-catch๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ ์ข…๋ฃŒ ๋ง‰์„ ์ˆ˜ ์žˆ์Œ

 

(์ค‘์š”๋„ ๋‚ฎ์€ ๋ถ€๋ถ„)

 

 

* String, StringBuffer, StringBuilde

- String์€ ๋ถˆ๋ณ€์˜ ์†์„ฑ์„ ๊ฐ€์ง€๋ฉฐ, StringBuffer์™€ StringBuilder๋Š” ๊ฐ€๋ณ€์˜ ์†์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค

- StringBuffer๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ

- StringBuilder๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฐจ์ด & ์žฅ๋‹จ์  : https://dev-coco.tistory.com/25

 

String ๊ฐ์ฒด๊ฐ€ ๋ถˆ๋ณ€์ธ ์ด์œ 

1. ์บ์‹ฑ ๊ธฐ๋Šฅ์— ์˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ๊ณผ ์†๋„ ํ–ฅ์ƒ
- Java์—์„œ String ๊ฐ์ฒด๋“ค์€ Heap์˜ String Pool ์ด๋ผ๋Š” ๊ณต๊ฐ„์— ์ €์žฅ๋˜๋Š”๋ฐ, ์ฐธ์กฐํ•˜๋ ค๋Š” ๋ฌธ์ž์—ด์ด String Pool์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  Pool์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ฌธ์ž์—ด ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋นˆ๋„๊ฐ€ ๋†’์„ ์ˆ˜๋ก ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
2. thread-safe
- String ๊ฐ์ฒด๋Š” ๋ถˆ๋ณ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ํŠน์ • String ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋”๋ผ๋„ ์•ˆ์ „ํ•˜๋‹ค.
3. ๋ณด์•ˆ๊ธฐ๋Šฅ
- ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ ๊ฐ•์ œ๋กœ ํ•ด๋‹น ์ฐธ์กฐ์— ๋Œ€ํ•œ ๋ฌธ์ž์—ด ๊ฐ’์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์— ์œ ๋ฆฌํ•˜๋‹ค.

* ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ์ˆœ์„œ

1) static ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€ : ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ ๋  ๋•Œ ๋ณ€์ˆ˜๊ฐ€ ์ œ์ผ ๋จผ์ € ์ดˆ๊ธฐํ™” ๋œ๋‹ค.
2) ํ•„๋“œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€ : ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ƒ์„ฑ์ž block ๋ณด๋‹ค ์•ž์„œ ์ดˆ๊ธฐํ™” ๋œ๋‹ค.
3) ์ƒ์„ฑ์ž block : ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ JVM์ด ๋‚ด๋ถ€์ ์œผ๋กœ locking( thread-safe ์˜์—ญ )

* ๋‚ด๋ถ€ ํด๋ž˜์Šค(Inner Class) ์žฅ์ 

1) ๋‚ด๋ถ€ ํด๋ž˜์Šค์—์„œ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์— ์†์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
2) ์„œ๋กœ ๊ด€๋ จ ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์–ด์„œ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ, ์บก์Šํ™”๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.
3) ์™ธ๋ถ€์—์„œ๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์ฝ”๋“œ์˜ ๋ณด์•ˆ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค

* Reflection

- ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ํƒ€์ž…์„ ์•Œ์ง€ ๋ชปํ•ด๋„ ๊ทธ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ/ํƒ€์ž…/๋ณ€์ˆ˜๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ž๋ฐ” API


* CheckedException & UnCheckedException

1) CheckedException์€ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ๋ฅผ ๋งํ•˜๊ณ , ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋Œ€ํ‘œ์ ์ธ Exception - IOException, ClassNotFoundException ๋“ฑ

2) UncheckedException์€ ์‹คํ–‰ํ•˜๊ณ  ๋‚œ ํ›„์— ์•Œ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ๋งํ•˜๊ณ , ๋”ฐ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
๋Œ€ํ‘œ์ ์ธ Exception - NullPointerException, ArrayIndexOutOfBoundException ๋“ฑ

3) RuntimeException์€ UncheckedException์„ ์ƒ์†ํ•œ ํด๋ž˜์Šค์ด๊ณ , RuntimeException์ด ์•„๋‹Œ ๊ฒƒ์€ CheckedException์„ ์ƒ์†ํ•œ ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค.

* ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ : https://dev-coco.tistory.com/32

๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์ž๋ฐ” ์ปฌ๋ ‰์…˜์—๋Š” List, Set, Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด์— ๋”ํ•ด Stack, Queue ์ธํ„ฐํŽ˜์ด์Šค๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

List / Set / Map / Stack / Queue

  • List๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๋กœ๋Š” ArrayList๊ฐ€ ์žˆ๊ณ , ์ด๋Š” Vector๋ฅผ ๊ฐœ์„ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์™ธ์—๋„ LinkedList ๋“ฑ์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Vector, ArrayList, LinkedList, Stack, Queue
  • Set์€ ์ˆœ์„œ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๋กœ๋Š” HashSet์ด ์žˆ๊ณ , ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” LinkedHashSet์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (Map์˜ key-value ๊ตฌ์กฐ์—์„œ key ๋Œ€์‹  value๊ฐ€ ๋“ค์–ด๊ฐ€ value๋ฅผ key๋กœ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ)
    • HashSet, LinkedHashSet, TreeSet
  • Map์€ ํ‚ค์™€ ๊ฐ’์ด ํ•œ ์Œ์œผ๋กœ ์ด๋ค„์ ธ ์žˆ๊ณ , ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ˆœ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. key์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” LinkedHashMap์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • HashMap, TreeMap, HashTable, Properties
  • Stack ๊ฐ์ฒด๋Š” ์ง์ ‘ new ํ‚ค์›Œ๋“œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Queue ์ธํ„ฐํŽ˜์ด์Šค๋Š” LinkedList์— new ํ‚ค์›Œ๋“œ๋ฅผ ์ ์šฉํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

* ์ œ๋„ค๋ฆญ : https://dev-coco.tistory.com/28

  • ์ œ๋„ค๋ฆญ์€ ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์„ ํ•˜๋‚˜๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋ฒ”์šฉ์ ์ด๊ณ  ํฌ๊ด„์ ์œผ๋กœ ์ง€์ •ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • ์ œ๋„ค๋ฆญ ํƒ€์ž…์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ž˜๋ชป๋œ ํƒ€์ž…์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์–ด ์—๋Ÿฌ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

* final VS finally VS finalize

  • final์€ ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ, ๋ณ€์ˆ˜, ์ธ์ž๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•œ ๋ฒˆ๋งŒ ํ• ๋‹นํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • final ๋ณ€์ˆ˜๋Š” ํ•œ ๋ฒˆ ์ดˆ๊ธฐํ™”๋˜๋ฉด ๊ทธ ์ดํ›„์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • final ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ๋•Œ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • final ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • finally๋Š” try-catch์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, try-catch๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ finally block์ด ํ•ญ์ƒ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ๋ฌด๋ฆฌ ํ•ด์ค˜์•ผ ํ•˜๋Š” ์ž‘์—…์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋Š” ์ฝ”๋“œ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค.
  • finalize๋Š” Object ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์ด๋ฉฐ, GC์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ์ ˆ๋Œ€ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. GC๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์ ์ด ๋ถˆ๋ถ„๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๊ณ , finalize() ๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด ์žˆ์œผ๋ฉด GC๊ฐ€ ์ด๋ฃจ์–ด์งˆ ๋•Œ ๋ฐ”๋กœ Garbage Collectiong ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GC๊ฐ€ ์ง€์—ฐ๋˜๋ฉด์„œ OOME(Out of Memory Exception)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— finalize() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

* ์ง๋ ฌํ™”

  • ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์˜ ์‹œ์Šคํ…œ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”์ดํŠธ(byte) ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋ฉฐ,
    ๋ฐ˜๋Œ€๋กœ ์ง๋ ฌํ™”๋œ ๋ฐ”์ดํŠธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ '์—ญ์ง๋ ฌํ™”'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • (๊ฐ„๋‹จํžˆ) JVM์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผ(ํž™ or ์Šคํƒ)๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ์ˆ 

 

 

์ถœ์ฒ˜ : https://dev-coco.tistory.com/153

  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ์— ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ ํ•˜๊ธฐ