๐Ÿ“ Language/Java

[Java] Java์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

Boom's 2024. 1. 12. 09:30
๋ฐ˜์‘ํ˜•

1. ์ž๋ฐ”(Java) ๋ž€?


- JAVA๋Š” ๋„คํŠธ์›Œํฌ์ƒ์—์„œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๊ตญ์˜ ์„  ๋งˆ์ดํฌ๋กœ ์‹œ์Šคํ…œ์ฆˆ๊ฐ€ ๊ฐœ๋ฐœํ•œ ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด

 

 

1-1. ์ž๋ฐ”(Java)์˜ ํŠน์ง•


  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ๋†’๋‹ค
  • ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์ด ์šฉ์ด
  • ์ง๊ด€์ ์ธ ์ฝ”๋“œ ๋ถ„์„
  • ๊ฐœ๋ฐœ์†๋„ ํ–ฅ์ƒ
  • ์ƒ์†์„ ํ†ตํ•œ ์žฅ์  ๊ทน๋Œ€ํ™”

 

2.  Object


- Object(๊ฐ์ฒด)๋Š” OOP์—์„œ ์†์„ฑ(๋ณ€์ˆ˜)์™€ ๊ทธ ๋ฐ์ดํ„ฐ์— ๊ด€๋ จ๋˜๋Š” ๋™์ž‘(ํ•จ์ˆ˜).

- ์ž๋ฐ”์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ•„๋“œ(field), ๋™์ž‘์„ ๋ฉ”์„œ๋“œ(method)๋ผ๊ณ  ํ•œ๋‹ค.

 

3.  Overloading vs Overriding


  • Overloading (์˜ค๋ฒ„๋กœ๋”ฉ)
    • ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ •์˜
    • ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๊ฑฐ๋‚˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค.
    • ์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
      • ์ƒ์„ฑ์ž์ธ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…, ๊ฐœ์ˆ˜, ์ˆœ์„œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ ์„ ์–ธ > ๋งค๊ฐœ๊ฐ’์œผ๋กœ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด
public class MyClass {
    private int value1;
    private String value2;

    // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
    public MyClass() {
        this.value1 = 0;
        this.value2 = "Default";
    }

    // ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž
    public MyClass(int value1, String value2) {
        this.value1 = value1;
        this.value2 = value2;
    }

    // ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
    public MyClass(String value2) {
        this.value1 = 0;
        this.value2 = value2;
    }

    // ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
    public MyClass(int value1) {
        this.value1 = value1;
        this.value2 = "Default";
    }

    // ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ
    public void displayValues() {
        System.out.println("Value1: " + value1);
        System.out.println("Value2: " + value2);
    }

    public static void main(String[] args) {
        // ๋‹ค์–‘ํ•œ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ
        MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass(42, "Hello");
        MyClass obj3 = new MyClass("Custom");
        MyClass obj4 = new MyClass(24);

        // ๊ฐ์ฒด์˜ ์ƒํƒœ ์ถœ๋ ฅ
        obj1.displayValues();
        obj2.displayValues();
        obj3.displayValues();
        obj4.displayValues();
    }
}
  • ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ
    • ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์€ ๊ฐ™๋˜ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž… ๊ฐฏ์ˆ˜ ์ˆœ์„œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ ์–ธ > ๋‹ค์–‘ํ•œ ๋งค๊ฐœ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด
public class Calculator {
    // ๋‘ ์ •์ˆ˜๋ฅผ ๋”ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
    public int add(int a, int b) {
        return a + b;
    }

    // ์„ธ ์ •์ˆ˜๋ฅผ ๋”ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // ๋‘ ์‹ค์ˆ˜๋ฅผ ๋”ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
    public double add(double a, double b) {
        return a + b;
    }

    // ๋ฌธ์ž์—ด์„ ์ด์–ด๋ถ™์ด๋Š” ๋ฉ”์†Œ๋“œ
    public String add(String str1, String str2) {
        return str1 + str2;
    }

    public static void main(String[] args) {
        Calculator calculator = new Calculator();

        // ๋‹ค์–‘ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
        int result1 = calculator.add(2, 3);
        int result2 = calculator.add(1, 4, 7);
        double result3 = calculator.add(3.5, 2.7);
        String result4 = calculator.add("Hello", "World");

        // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
        System.out.println("Result 1: " + result1);
        System.out.println("Result 2: " + result2);
        System.out.println("Result 3: " + result3);
        System.out.println("Result 4: " + result4);
    }
}
  • Overriding (์˜ค๋ฒ„๋ผ์ด๋”ฉ)
    • ์ƒ์†์—์„œ ๋‚˜์˜จ ๊ฐœ๋…
    • ์ƒ์œ„ ํด๋ž˜์Šค(๋ถ€๋ชจ ํด๋ž˜์Šค)์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค(์ž์‹ ํด๋ž˜์Šค)์—์„œ ์ •์˜

 

4.  Servlet & Jsp


  • Servlet
    • ์ž๋ฐ”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์›น ๊ฐœ๋ฐœ ํ‘œ์ค€ ์–ธ์–ด 
    • Container๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑ๋œ ์ˆœ์ˆ˜ ์ž๋ฐ” ์ฝ”๋“œ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๊ฒƒ (Html in JAVA)

 

  1. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ Request, Response ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
  2. ์š”์ฒญ๋œ URL์— ๋งคํ•‘๋œ ์„œ๋ธ”๋ฆฟ์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ
  3. ์ƒ์„ฑ์ž๋Š” init() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰
  4. init() ๋ฉ”์„œ๋“œ๋Š” service() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  service() ๋ฉ”์„œ๋“œ๋Š” ์Šค๋ ˆ๋“œ์— ๋‹ด๊ฒจ์ง„๋‹ค.
  5. ์š”์ฒญํ•œ ๋ฐฉ์‹ (get. post)์— ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋กœ ์ด๋™
  6. ์‘๋‹ตํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ๋Š๋Š”๋‹ค.
  • JSP(Java Server Page)
    • ์ž๋ฐ” ๊ธฐ๋ฐ˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด 
    • Html ๊ธฐ๋ฐ˜์— JAVA ์ฝ”๋“œ๋ฅผ ๋ธ”๋กํ™”ํ•˜์—ฌ ์‚ฝ์ž… (JAVA in Html)

  1. ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)๊ฐ€ JSP ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ
  2. ์„œ๋ฒ„๋Š” JSP ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜
  3. ๋ณ€ํ™˜๋œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋˜์–ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Java ํด๋ž˜์Šค ํŒŒ์ผ๋กœ ์ƒ์„ฑ
  4. ์„œ๋ฒ„๋Š” ์ƒ์„ฑ๋œ ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก
  5. ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œ

5.  JDBC


- Java Data Base Connection์˜ ์•ฝ์ž

- JAVA ์–ธ์–ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ ‘๊ทผ ํ• ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์˜๋ฏธ

 

 

6. Session๊ณผ Cookie


6-1 . Session๊ณผ Cookie ์‚ฌ์šฉ ์ด์œ 

 

- ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ ‘์†์ด ์ด๋ฃจ์–ด์ง€๋ฉฐ ์ด์ „ ํŽ˜์ด์ง€์™€ ํ˜„์žฌ ํŽ˜์ด์ง€ ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ์ง€์†๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด์— ๋”ฐ๋ผ HTTP ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋Š” ์›น์‚ฌ์ดํŠธ์—๋Š” ์›น ํŽ˜์ด์ง€์— ํŠน์ • ๋ฐฉ๋ฌธ์ž๊ฐ€ ๋จธ๋ฌด๋ฅด๊ณ  ์žˆ๋Š” ๋™์•ˆ์— ๊ทธ ๋ฐฉ๋ฌธ์ž์˜ ์ƒํƒœ๋ฅผ ์ง€์†์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์‚ฌ์šฉ

6-2 .  ์„ธ์…˜ (Session)

  • ํŠน์ • ์›น์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋จธ๋ฌด๋ฅด๋Š” ๊ธฐ๊ฐ„ ํ˜น์€ ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž ๋ฐฉ๋ฌธ์„ ์˜๋ฏธ
  • Session์— ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋Š” Server์— ์ €์žฅ
  • ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์บ์‹œ์— ์ €์žฅ๋˜์–ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํžˆ๊ฑฐ๋‚˜ ์„œ๋ฒ„์—์„œ ์‚ญ์ œ์‹œ ์†Œ๋ฉธ
  • ์ฟ ํ‚ค(Cookie)์— ๋น„ํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์ด ์ข‹๋‹ค

6-3 .  ์ฟ ํ‚ค (Cookie)

  • ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†๋‹ค๋Š” HTTP์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•
  • ์ธํ„ฐ๋„ท ์›น ์‚ฌ์ดํŠธ์˜ ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ ๋‚จ๊ฒจ ์‚ฌ์šฉ์ž์™€ ์›น์‚ฌ์ดํŠธ ์‚ฌ์ด๋ฅผ ๋งค๊ฐœํ•ด ์ฃผ๋Š” ์ •๋ณด
  • ์ฟ ํ‚ค(Cookie)๋Š” ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์›น์„œ๋ฒ„์— ์ ‘์†ํ•  ๋•Œ, ์ƒ์„ฑ๋˜๋Š” ๊ฐœ์ธ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋ฐฉ๋ฌธํ•œ ์‚ฌ์ดํŠธ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ์ž„์‹œ ํŒŒ์ผ๋กœ์„œ, Server๊ฐ€ ์•„๋‹Œ Client์— ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์–ด ๋‹ค์Œ์— ํ•ด๋‹น ์›น์„œ๋ฒ„๋ฅผ ์ฐพ์„ ๊ฒฝ์šฐ ์›น์„œ๋ฒ„์—์„œ๋Š” ๊ทธ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์–ด๋–ค ์ •๋ณด๋ฅผ ์ฃผ๋กœ ์ฐพ์•˜๋Š”์ง€ ๋“ฑ์„ ํŒŒ์•…ํ•  ๋•Œ ์‚ฌ์šฉ
  • ์ฟ ํ‚ค(Cookie)๋Š” Client PC์— ์ €์žฅ ๋˜๋Š” ์ •๋ณด, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— ์˜ํ•ด์„œ ์ž„์˜๋กœ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅ
    • ์ •๋ณด ์œ ์ถœ ๊ฐ€๋Šฅ, Session๋ณด๋‹ค ๋ณด์•ˆ์„ฑ์ด ๋‚ฎ์€ ์ด์œ 

Question ) ๋ณด์•ˆ์„ฑ์ด ๋‚ฎ์€ Cookie ๋Œ€์‹  Session์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ ์•ˆํ•˜๋Š” ์ด์œ ?
- ๋ชจ๋“  ์ •๋ณด๋ฅผ Session์— ์ €์žฅํ•˜๋ฉด Server์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด Server์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ„๋‹ค.

 

7. final ํ•„๋“œ์™€ ์ƒ์ˆ˜


  • final์€ Java์—์„œ ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ, ํด๋ž˜์Šค์— ์ ์šฉ๋˜๋Š” ํ‚ค์›Œ๋“œ๋กœ, ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์— ๋”ฐ๋ผ ์˜๋ฏธ๊ฐ€ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‹ค.

7-1.  final ๋ณ€์ˆ˜ (์ƒ์ˆ˜)

  • final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•œ ๋ฒˆ ํ• ๋‹น๋˜๋ฉด ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ƒ์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ƒ์ˆ˜๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•˜๋ฉฐ, ๋‹จ์–ด ์‚ฌ์ด๋ฅผ ์–ธ๋”์Šค์ฝ”์–ด(_)๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ž…๋‹ˆ๋‹ค.
public class Example {
    // final ๋ณ€์ˆ˜ (์ƒ์ˆ˜)
    final int MAX_VALUE = 100;
    
    public void printMaxValue() {
        System.out.println("Max value: " + MAX_VALUE);
    }
    
    public static void main(String[] args) {
        Example example = new Example();
        example.printMaxValue();
    }
}

 

7-2.  final ํ•„๋“œ

  • ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ค‘ final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋œ ํ•„๋“œ๋Š” ์ดˆ๊ธฐํ™” ์ดํ›„์— ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. final ํ•„๋“œ๋Š” ์ฃผ๋กœ ํ•œ ๋ฒˆ ์„ค์ •๋˜๋ฉด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
public class Example {
    // final ํ•„๋“œ
    final int fixedValue;
    
    // ์ƒ์„ฑ์ž์—์„œ final ํ•„๋“œ ์ดˆ๊ธฐํ™”
    public Example(int value) {
        this.fixedValue = value;
    }
    
    public void printFixedValue() {
        System.out.println("Fixed value: " + fixedValue);
    }
    
    public static void main(String[] args) {
        Example example = new Example(42);
        example.printFixedValue();
    }
}

 

8. ์ ‘๊ทผ์ œํ•œ์ž


  • ์ž๋ฐ”์—์„œ ์ ‘๊ทผ์ œํ•œ์ž๋Š” public, private, protected 3๊ฐ€์ง€ ์กด์žฌ
์ ‘๊ทผ ์ œํ•œ์ž ์ œํ•œ ๋Œ€์ƒ ์ œํ•œ ๋ฒ”์œ„ ์šฐ์„  ์ˆœ์œ„
private ํด๋ž˜์Šค, ์ƒ์„ฑ์ž, ๋ฉ”์†Œ๋“œ ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด๋ถ€ 1
default (package-private) ํด๋ž˜์Šค, ํ•„๋“œ, ์ƒ์„ฑ์ž, ๋ฉ”์†Œ๋“œ ๊ฐ™์€ ํŒจํ‚ค์ง€ 2
protected ํ•„๋“œ, ์ƒ์„ฑ์ž, ๋ฉ”์†Œ๋“œ ๊ฐ™์€ ํŒจํ‚ค์ง€ /
์ž์‹ ๊ฐ์ฒด
3
public ํด๋ž˜์Šค, ํ•„์Šค, ์ƒ์„ฑ์ž, ๋ฉ”์†Œ๋“œ ์—†์Œ 4
  1. private:
    • private ์ ‘๊ทผ ์ œ์–ด์ž๋Š” ๊ฐ€์žฅ ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • ํ•ด๋‹น ๋ฉค๋ฒ„๋Š” ๋™์ผํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์™ธ๋ถ€ ํด๋ž˜์Šค๋‚˜ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋Š” ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  2. default (package-private):
    • default๋Š” ๋ณ„๋„์˜ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์˜ ๊ธฐ๋ณธ ๊ฐ’์ž…๋‹ˆ๋‹ค.
    • ํ•ด๋‹น ๋ฉค๋ฒ„๋Š” ๋™์ผํ•œ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋Š” ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์™ธ๋ถ€ ํŒจํ‚ค์ง€์—์„œ๋Š” ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  3. protected:
    • protected ์ ‘๊ทผ ์ œ์–ด์ž๋Š” default๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค.
    • ํ•ด๋‹น ๋ฉค๋ฒ„๋Š” ๋™์ผํ•œ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์™ธ๋ถ€ ํŒจํ‚ค์ง€์—์„œ๋Š” ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  4. public:
    • public ์ ‘๊ทผ ์ œ์–ด์ž๋Š” ๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • ํ•ด๋‹น ๋ฉค๋ฒ„๋Š” ์–ด๋””์„œ๋“ ์ง€ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

9. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 4๊ฐ€์ง€ ํŠน์„ฑ


  1. ์บก์Аํ™” (Encapsulation):
    • ์บก์Аํ™”๋Š” ๊ฐ์ฒด์˜ ์ƒํƒœ(๋ฐ์ดํ„ฐ)์™€ ํ–‰์œ„(๋ฉ”์„œ๋“œ)๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ •๋ณด๋ฅผ ์€๋‹‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
    • ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์ƒํƒœ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ์™ธ๋ถ€์—์„œ๋Š” ๊ฐ์ฒด์˜ ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”๋ฐ ์ค‘์ 
    • ์ •๋ณด ์€๋‹‰์„ ํ†ตํ•ด ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ์™ธ๋ถ€์—์„œ๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
  2. ์ƒ์† (Inheritance):
    • ์ƒ์†์€ ๋ถ€๋ชจ ํด๋ž˜์Šค(์Šˆํผ ํด๋ž˜์Šค)์˜ ํŠน์ง•๊ณผ ๊ธฐ๋Šฅ์„ ์ž์‹ ํด๋ž˜์Šค(์„œ๋ธŒ ํด๋ž˜์Šค)๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค
    • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ฃผ๊ณ , ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค.
    • ์„œ๋ธŒ ํด๋ž˜์Šค๋Š” ์Šˆํผ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜(์˜ค๋ฒ„๋ผ์ด๋”ฉ)ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ๋‹คํ˜•์„ฑ (Polymorphism):
    • ๋‹คํ˜•์„ฑ์€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋‚˜ ์—ฐ์‚ฐ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๋งํ•œ๋‹ค.
    • ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ๋‹คํ˜•์„ฑ์„ ๊ตฌํ˜„
    • ๋‹คํ˜•์„ฑ์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  4. ์ถ”์ƒํ™” (Abstraction):
    • ์ถ”์ƒํ™”๋Š” ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ณตํ†ต์ ์ธ ํŠน์„ฑ์„ ์ถ”์ถœํ•˜์—ฌ ๋ชจ๋ธ๋งํ•˜๋Š” ๊ณผ์ •์ด๋ฉฐ, ์‹ค์ œ ์„ธ๊ณ„์˜ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๊ฐœ๋…
    • ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ƒํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ํ‘œํ˜„ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ฐ์ถ˜๋‹ค.
    • ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ณ , ์‚ฌ์šฉ์ž๋Š” ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

10. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ 5๊ฐ€์ง€ ์›์น™


  • ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ์˜ ํ•ต์‹ฌ, ์ด๋ฅผ 'SOLID'์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  1. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle, SRP):
    • ํ•œ ํด๋ž˜์Šค๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
    • ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค.
  2. ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open-Closed Principle, OCP):
    • ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌ์„ฑ ์š”์†Œ(ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ํ•จ์ˆ˜ ๋“ฑ)๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ, ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov Substitution Principle, LSP):
    • ํ•˜์œ„ ํƒ€์ž…(์„œ๋ธŒ ํด๋ž˜์Šค)์€ ์ƒ์œ„ ํƒ€์ž…(์Šˆํผ ํด๋ž˜์Šค)์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ์ฆ‰, ์ƒ์† ๊ด€๊ณ„์—์„œ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์™€ ํ˜ธํ™˜์„ฑ์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค.
  4. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface Segregation Principle, ISP):
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งบ์œผ๋ฉด ์•ˆ ๋œ๋‹ค.
    • ์ฆ‰, ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์‹ ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋งŒ์„ ํฌํ•จํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์•ผ ํ•œ๋‹ค.
  5. ์˜์กด ์—ญ์ „ ์›์น™ (Dependency Inversion Principle, DIP):
    • ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋‘˜ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.
    • ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์˜์กด ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
๋ฐ˜์‘ํ˜•