๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[OOP][Java] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ด€๋ จ๋œ ๋ ˆ๋ฒจ๋“ค

์ถœ์ฒ˜

ChatGPT

๊ฐ ๋ ˆ๋ฒจ๋“ค

  1. ๊ฐ์ฒด ๋ ˆ๋ฒจ Object Level
  2. ํด๋ž˜์Šค ๋ ˆ๋ฒจ Class Level
  3. ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ Method Level
  4. ํŒจํ‚ค์ง€ ๋ ˆ๋ฒจ Pacakge Level
  5. ๋ชจ๋“ˆ ๋ ˆ๋ฒจ Module Level

 

1. ๊ฐ์ฒด ๋ ˆ๋ฒจ Object Level

1] ๊ฐœ๋…

๊ฐ์ฒด ๋ ˆ๋ฒจ์€ ๊ฐœ๋ณ„ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ์™€ ํ–‰๋™์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค. ๊ฐ ๊ฐ์ฒด๋Š” ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ๋™์ž‘ํ•œ๋‹ค.

2] ๊ฐ์ฒด ์ง€ํ–ฅ ํŠน์ง•

1. ์บก์Šํ™”

๊ฐ์ฒด๊ฐ€ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๊ฐ์ถ”๊ณ , ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•˜๋„๋ก ํ•ด ์™ธ๋ถ€์—์„œ์˜ ์ ‘๊ทผ์„ ์ œ์–ดํ•œ๋‹ค.

2. ๋‹คํ˜•์„ฑ

๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ๊ณ ์œ  ์ƒํƒœ

๊ฐ ๊ฐ์ฒด๋Š” ๊ณ ์œ ํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ํ‘œํ˜„๋œ๋‹ค.

์˜ˆ์ œ

public class Dog {
    private String name;  // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜
    private String breed;

    public Dog(String name, String breed) {  // ์ƒ์„ฑ์ž
        this.name = name;
        this.breed = breed;
    }

    public void bark() {  // ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ
        System.out.println(name + " says: Woof!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog1 = new Dog("Buddy", "Golden Retriever"); // ๊ฐœ๋ณ„ ๊ฐ์ฒด
        Dog dog2 = new Dog("Max", "Bulldog");
        
        dog1.bark(); // Buddy says: Woof!
        dog2.bark(); // Max says: Woof!
    }
}


2. ํด๋ž˜์Šค ๋ ˆ๋ฒจ Class Level

1] ๊ฐœ๋…

ํด๋ž˜์Šค ๋ ˆ๋ฒจ์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„๋‚˜ ํ…œํ”Œ๋ฆฟ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๊ฐ์ฒด๋“ค์ด ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ ธ์•ผ ํ•  ์†์„ฑ๊ณผ ๋™์ž‘์„ ์ •์˜ํ•œ๋‹ค.

2] ๊ฐ์ฒด์ง€ํ–ฅ ํŠน์ง•

1. ์ถ”์ƒํ™”

๊ณตํ†ต์ ์ธ ์†์„ฑ๊ณผ ํ–‰๋™์„ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜์—ฌ, ๋ณต์žกํ•œ ํ˜„์‹ค์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๋ชจ๋ธ๋งํ•œ๋‹ค.

2. ์ƒ์†

ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ํŠน์„ฑ์„ ๋ฌผ๋ ค๋ฐ›์•„ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

3. ์ •์  ๋ฉค๋ฒ„

ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์ •์  ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค.

์˜ˆ์ œ

public class Car {
    private static int numberOfCars = 0; // ์ •์  ๋ณ€์ˆ˜
    private String model; // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

    public Car(String model) { // ์ƒ์„ฑ์ž
        this.model = model;
        numberOfCars++;
    }

    public static int getNumberOfCars() { // ์ •์  ๋ฉ”์„œ๋“œ
        return numberOfCars;
    }

    public String getModel() { // ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ
        return model;
    }
}

 

3. ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ Method Level

1] ๊ฐœ๋…

๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ์€ ๊ฐœ๋ณ„ ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„๊ณผ ๋™์ž‘์— ์ดˆ์ ์„ ๋งž์ถ”๋ฉฐ, ๊ฐ์ฒด์˜ ํ–‰๋™์„ ์ •์˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

2] ๊ฐ์ฒด์ง€ํ–ฅ ํŠน์ง•

1. ์บก์Šํ™”

๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ ,  ์™ธ๋ถ€์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ด€๋ฆฌํ•œ๋‹ค.

2. ๋‹คํ˜•์„ฑ

๋ฉ”์„œ๋“œ๋Š” ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค.

3. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

๊ฐ ๋ฉ”์„œ๋“œ๋Š” ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ์ฑ…์ž„์„ ๊ฐ–๊ณ , ์ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„๋˜์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ์ œ

public class Calculator {
    public int add(int a, int b) { // ๋‹จ์ผ ์ฑ…์ž„ ๋ฉ”์„œ๋“œ
        return a + b;
    }

    public int subtract(int a, int b) {
        return a - b;
    }

    // ๋‹คํ˜•์„ฑ: ์˜ค๋ฒ„๋กœ๋”ฉ
    public double add(double a, double b) {
        return a + b;
    }
}

 


4. ํŒจํ‚ค์ง€ ๋ ˆ๋ฒจ  Package Level

1] ๊ฐœ๋…

ํŒจํ‚ค์ง€ ๋ ˆ๋ฒจ์€ ๊ด€๋ จ ํด๋ž˜์Šค๋“ค์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋ชจ๋“ˆ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ , ์ฝ”๋“œ์˜ ์กฐ์งํ™” ๋ฐ ๊ด€๋ฆฌ์— ๋„์›€์„ ์ค€๋‹ค.

2] ๊ฐ์ฒด์ง€ํ–ฅ ํŠน์ง•

1. ์บก์Šํ™” ๊ฐ•ํ™”

ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ํ†ตํ•ด ์ •๋ณด ์€๋‹‰์„ ๊ฐ•ํ™”ํ•œ๋‹ค.

2. ๋ชจ๋“ˆํ™”

๊ด€๋ จ ํด๋ž˜์Šค๋“ค์„ ๋ฌถ์–ด ๋ชจ๋“ˆํ™”๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ์ฝ”๋“œ์˜ ๊ตฌ์กฐ์  ๊ด€๋ฆฌ์™€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

3. ๋„ค์ž„์ŠคํŽ˜์ด์Šค

๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํด๋ž˜์Šค๋“ค์ด ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

์˜ˆ์ œ

package com.example.utils; // ํŒจํ‚ค์ง€ ์„ ์–ธ

public class MathUtils {
    public static int square(int number) {
        return number * number;
    }
}

 

 

5. ๋ชจ๋“ˆ ๋ ˆ๋ฒจ Module Level

1] ๊ฐœ๋…

๋ชจ๋“ˆ ๋ ˆ๋ฒจ์€ ์ž๋ฐ” 9๋ถ€ํ„ฐ ๋„์ž…๋œ ์‹œ์Šคํ…œ์œผ๋กœ, ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ด€๊ณ„์™€ ์ ‘๊ทผ์„ฑ์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•œ๋‹ค.

2] ๊ฐ์ฒด์ง€ํ–ฅ ํŠน์ง•

1. ์บก์Šํ™”

๋ชจ๋“ˆ์„ ํ†ตํ•ด ํŒจํ‚ค์ง€๋ฅผ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ๊ณต๊ฐœํ•จ์œผ๋กœ์จ ์ •๋ณด ์€๋‹‰์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค.

2. ์˜์กด์„ฑ ๊ด€๋ฆฌ

๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ, ์˜์กด์„ฑ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค.

3. ์žฌ์‚ฌ์šฉ์„ฑ

๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์–ด, ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์—์„œ์˜ ์ฝ”๋“œ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.

์˜ˆ์‹œ

// module-info.java ํŒŒ์ผ
module com.example.application {
    exports com.example.utils; // ๋…ธ์ถœํ•  ํŒจํ‚ค์ง€ ์ •์˜
    requires com.example.logging; // ์˜์กด์„ฑ ์ •์˜
}

 

์š”์•ฝ

๋ ˆ๋ฒจ ์„ค๋ช… ๊ฐ์ฒด์ง€ํ–ฅ ํŠน์ง•
๊ฐ์ฒด ๋ ˆ๋ฒจ ๊ฐœ๋ณ„ ๊ฐ์ฒด์˜ ์ƒํƒœ์™€ ํ–‰๋™์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์บก์Šํ™”
๋‹คํ˜•์„ฑ
๊ณ ์œ  ์ƒํƒœ ๊ด€๋ฆฌ
ํด๋ž˜์Šค ๋ ˆ๋ฒจ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํƒฌํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ณตํ†ต์ ์ธ ์†์„ฑ๊ณผ ํ–‰๋™์„ ์ •์˜ํ•œ๋‹ค. ์ถ”์ƒํ™”
์ƒ์†
์ •์  ๋ฉค๋ฒ„ ๊ด€๋ฆฌ
๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ ๊ฐœ๋ณ„ ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„๊ณผ ๋™์ž‘์„ ์ •์˜ํ•˜๋ฉฐ, ๊ฐ์ฒด์˜ ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์บก์Šํ™”
๋‹คํ˜•์„ฑ
๋‹จ์ผ ์ฑ…์ž„ ์›์น™
ํŒจํ‚ค์ง€ ๋ ˆ๋ฒจ ๊ด€๋ จ ํด๋ž˜์Šค๋“ค์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋ชจ๋“ˆ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ , ์ฝ”๋“œ์˜ ์กฐ์งํ™” ๋ฐ ๊ด€๋ฆฌ์— ๋„์›€์„ ์ค€๋‹ค. ์บก์Šํ™” ๊ฐ•ํ™”
๋ฌ˜๋“ˆํ™”
๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ
๋ชจ๋“ˆ ๋ ˆ๋ฒจ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌํ•˜๊ณ , ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•œ๋‹ค. ์บก์Šํ™”
์˜์กด์„ฑ ๊ด€๋ฆฌ
์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€

 


ChatGPT์—๊ฒŒ ์ด ๊ธ€์˜ ์ถœ์ฒ˜๋ฅผ ๋ฌผ์—ˆ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ด€๋ จ๋œ ๋ ˆ๋ฒจ

  1. ํด๋ž˜์Šค ๋ ˆ๋ฒจ
    • ์„ค๋ช…: ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์˜ ์ฒญ์‚ฌ์ง„(blueprint)์œผ๋กœ, ๋ฐ์ดํ„ฐ์™€ ํ–‰๋™(๋ฉ”์„œ๋“œ)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ‹€๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ์ถœ์ฒ˜:
      • "Design Patterns: Elements of Reusable Object-Oriented Software" by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
        • ์ด ์ฑ…์—์„œ๋Š” ํด๋ž˜์Šค์™€ ๊ฐ์ฒด์˜ ์—ญํ• ์„ ๊ฐ•์กฐํ•˜๋ฉฐ, ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ์˜ ์„ค๊ณ„ ํŒจํ„ด์„ ํ†ตํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Design Patterns on Amazon
      • "Object-Oriented Software Construction" by Bertrand Meyer
        • Bertrand Meyer์˜ ์ฑ…์€ ํด๋ž˜์Šค์˜ ์ •์˜์™€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋ฉฐ, ํด๋ž˜์Šค๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ์ค‘์‹ฌ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Object-Oriented Software Construction on Amazon
  2. ๊ฐ์ฒด ๋ ˆ๋ฒจ
    • ์„ค๋ช…: ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ, ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด๋Š” ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์‹ค์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด์ž…๋‹ˆ๋‹ค.
    • ์ถœ์ฒ˜:
      • "Object-Oriented Analysis and Design with Applications" by Grady Booch
        • ์ด ์ฑ…์—์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๋ฉฐ, ๊ฐ์ฒด ์ง€ํ–ฅ ๋ถ„์„ ๋ฐ ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Object-Oriented Analysis and Design with Applications on Amazon
      • "Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development" by Craig Larman
        • Craig Larman์€ ๊ฐ์ฒด์˜ ์—ญํ• ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ ๋ถ„์„ ๋ฐ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ UML ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Applying UML and Patterns on Amazon
  3. ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ
    • ์„ค๋ช…: ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰๋™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ์ฒ˜:
      • "Java: The Complete Reference" by Herbert Schildt
        • ์ด ์ฑ…์€ ์ž๋ฐ”์—์„œ ๋ฉ”์„œ๋“œ์˜ ์ •์˜์™€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•, ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ ๋ฐ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Java: The Complete Reference on Amazon
      • "Effective Java" by Joshua Bloch
        • Joshua Bloch๋Š” ๋ฉ”์„œ๋“œ ์„ค๊ณ„์™€ ๊ด€๋ จ๋œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Effective Java on Amazon
  4. ์ธํ„ฐํŽ˜์ด์Šค ๋ ˆ๋ฒจ
    • ์„ค๋ช…: ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ๊ณ„์•ฝ์„ ๋ช…์‹œํ•˜๋ฉฐ, ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ์ฒ˜:
      • "Head First Java" by Kathy Sierra, Bert Bates
        • ์ด ์ฑ…์€ ์ž๋ฐ”์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋…์„ ์‹œ๊ฐ์ ์ด๊ณ  ์ง๊ด€์ ์œผ๋กœ ์„ค๋ช…ํ•˜์—ฌ ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Head First Java on Amazon
      • "Core Java Volume I - Fundamentals" by Cay S. Horstmann, Gary Cornell
        • ์ด ์ฑ…์€ ์ž๋ฐ”์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์‚ฌ์šฉ๋ฒ•์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋ฉฐ, ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋˜๋Š”์ง€๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
        • ๋งํฌ: Core Java Volume I - Fundamentals on Amazon

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ด€๋ จ๋œ ์ฃผ์š” ๊ฐœ๋…

  • ์ถ”์ƒํ™” (Abstraction):
    • ์„ค๋ช…: ์ถ”์ƒํ™”๋Š” ๊ฐ์ฒด์˜ ๋ณธ์งˆ์ ์ธ ํŠน์ง•์„ ๋ชจ๋ธ๋งํ•˜์—ฌ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ , ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ์ฒ˜:
      • "Object-Oriented Software Engineering: A Use Case Driven Approach" by Ivar Jacobson
        • ์ด ์ฑ…์€ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๊ณ  ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Object-Oriented Software Engineering on Amazon
  • ์บก์Šํ™” (Encapsulation):
    • ์„ค๋ช…: ์บก์Šํ™”๋Š” ๊ฐ์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธฐ๋ฉฐ, ๊ณต๊ฐœ๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ์ฒ˜:
      • "The Pragmatic Programmer" by Andrew Hunt, David Thomas
        • ์ด ์ฑ…์€ ์บก์Šํ™”์˜ ์ค‘์š”์„ฑ๊ณผ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์—์„œ์˜ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: The Pragmatic Programmer on Amazon
  • ์ƒ์† (Inheritance):
    • ์„ค๋ช…: ์ƒ์†์€ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ์ฒ˜:
      • "Design Patterns: Elements of Reusable Object-Oriented Software"
        • ์ด ์ฑ…์—์„œ๋Š” ์ƒ์†๊ณผ ์กฐํ•ฉ์„ ํ†ตํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ํŒจํ„ด์„ ์„ค๋ช…ํ•˜๋ฉฐ, ์ƒ์†์˜ ์—ญํ• ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹คํ˜•์„ฑ (Polymorphism):
    • ์„ค๋ช…: ๋‹คํ˜•์„ฑ์€ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์ด ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ–‰๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ์ฒ˜:
      • "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin
        • ์ด ์ฑ…์€ ๋‹คํ˜•์„ฑ์˜ ๊ฐœ๋…์„ ์†Œ๊ฐœํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
        • ๋งํฌ: Clean Code on Amazon