Notice
Recent Posts
Recent Comments
Link
Β«   2024/11   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

DOing

[JAVA] 객체 지ν–₯ μ–Έμ–΄1 λ³Έλ¬Έ

Java & Kotlin

[JAVA] 객체 지ν–₯ μ–Έμ–΄1

mangdo 2021. 6. 24. 11:20

🌱 클래슀

클래슀?

ν΄λž˜μŠ€λž€ 속성(μƒνƒœ) + λ©”μ†Œλ“œ(ν–‰μœ„)λ₯Ό μ •μ˜ν•΄λ†“μ€ 것이닀.

ex ) λΆ•μ–΄λΉ΅ν‹€

 

μΈμŠ€ν„΄μŠ€?

μΈμŠ€ν„΄μŠ€λž€ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체이닀.

ex ) λΆ•μ–΄λΉ΅

 

[ μ½”λ“œ : 클래슀 μ‚¬μš©ν•˜κΈ° ]

class Phone {
    String model;
    String color;
    int price;

    void printInfo(){
        System.out.println("μ² μˆ˜λŠ” μ΄λ²ˆμ— " + model + color + " 색상을 " + price + "λ§Œμ›μ— 샀닀.");
    }
}

public class Main {
    public static void main(String[] args) {
        Phone galaxy = new Phone();
        galaxy.model = "Galaxy10";
        galaxy.color = "Black";
        galaxy.price = 100;

        Phone iphone =new Phone();
        iphone.model = "iPhoneX";
        iphone.color = "Black";
        iphone.price = 200;

        galaxy.printInfo();
        iphone.printInfo();

    }
}

 


🌱 μƒμ„±μž

 μƒμ„±μžλŠ” μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” 'μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™” λ©”μ†Œλ“œ'이닀.

 ν΄λž˜μŠ€ 이름과 λ˜‘κ°™μ€ μ΄λ¦„μœΌλ‘œ μ§€μ–΄μ£Όμ–΄μ•Όν•œλ‹€. μƒμ„±μžλ₯Ό λ”°λ‘œ λ§Œλ“€μ§€ μ•ŠμœΌλ©΄ μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ λ¬΅μ‹œμ  μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€. λ¬΅μ‹œμ  μƒμ„±μžλŠ” λ§€κ°œλ³€μˆ˜κ°€ 아무것도 μ—†λŠ” μƒμ„±μžμ΄λ‹€. μΆ”κ°€λ‘œ μ•Œμ•„λ‘μ–΄μ•Όν•  점은 μƒμ„±μžλŠ” μƒμ†λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이닀.

 

[ μ½”λ“œ : λ¬΅μ‹œμ  μƒμ„±μž ]

class Phone {
    String model;
    String color;
    int price;

    // μƒμ„±μž
    Phone(String model, String color, int price){
        this.model = model;
        this.color = color;
        this.price = price;
    }
    void printInfo(){
        System.out.println("μ² μˆ˜λŠ” μ΄λ²ˆμ— " + this.model + this.color + " 색상을 " + this.price + "λ§Œμ›μ— 샀닀.");
    }
}

public class Main {
    public static void main(String[] args) {
        Phone galaxy = new Phone("Galaxy10", "Black", 100);
        Phone iphone =new Phone("iPhoneX", "Black", 200);

        galaxy.printInfo();
        iphone.printInfo();
    }
}

 


🌱 μƒμ†

μƒμ†μ΄λž€ 기쑴의 클래슀λ₯Ό μž¬μ‚¬μš©ν•΄μ„œ μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 것이닀.

 

[ μƒμ†μ˜ μž₯점 ]

0. ⭐λͺ¨λ“ˆμ˜ μž¬μ‚¬μš©μ„±, μ½”λ“œμ˜ 간결성⭐

 

1. 클래슀의 ν™•μž₯이 쉽닀.

 : 기쑴의 클래슀λ₯Ό λ¬Όλ €λ°›μ•„ ν™•μž₯ν•˜λŠ” 방식을 μ‚¬μš©ν•˜κΈ°λ•Œλ¬Έμ— μƒˆλ‘œμš΄ 클래슀λ₯Ό μƒμ„±ν•˜κΈ° 쉽닀.

 

2. 클래슀 변경이 쉽닀.

 : κΈ°μ‘΄ 클래슀λ₯Ό ν™•μž₯ν•΄μ„œ μ‚¬μš©ν•  수 μžˆμ„ λΏλ§Œμ•„λ‹ˆλΌ μ˜€λ²„λΌμ΄λ”©μ„ ν†΅ν•˜μ—¬ κΈ°μ‘΄ 클래슀λ₯Ό λ³€κ²½ν•  μˆ˜λ„ μžˆλ‹€. μ΄λŸ¬ν•œ 기법은 λ‹€ν˜•μ„±μ„ μ œκ³΅ν•  수 μžˆλ‹€.

 

3. 클래슀λ₯Ό 체계화할 수 μžˆλ‹€.

 : λ‹€μˆ˜μ˜ 클래슀의 κ³΅ν†΅λœ μ„±μ§ˆμ„ ν•œκ°œμ˜ μƒμœ„ ν΄λž˜μŠ€μ— ν‘œν˜„(좔상화)ν•¨μœΌλ‘œμ¨ ν΄λž˜μŠ€λ“€μ„ μ΄ν•΄ν•˜κΈ° 쉽닀. 체계적인 클래슀 계측 ꡬ쑰λ₯Ό κ°€μ§€κ²Œλ˜λ©΄ 클래슀λ₯Ό μ‰½κ²Œ 검색, 관리할 수 μžˆλ‹€.

 

[ μžλ°” μƒμ†μ˜ νŠΉμ§• ]

1. 닀쀑 상속을 μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.

 : 였직 ν•˜λ‚˜μ˜ λΆ€λͺ¨ν΄λž˜μŠ€λ§Œ κ°€μ§ˆ 수 μžˆλ‹€.

 

2. μžλ°”μ˜ λͺ¨λ“  ν΄λž˜μŠ€λŠ” Object 클래슀의 ν•˜μœ„ν΄λž˜μŠ€μ΄λ‹€.

 : μžλ°”μ˜ μ΅œμƒμœ„ ν΄λž˜μŠ€λŠ” Object ν΄λž˜μŠ€μ΄λ‹€. ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν• λ•Œ μƒμœ„ν΄λž˜μŠ€λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•„λ„ λ¬΅μ‹œμ μœΌλ‘œ Objectν΄λž˜μŠ€κ°€ μƒμœ„ 클래슀둜 μ§€μ •λ˜κ²Œλœλ‹€. 즉, μžλ°”μ˜ λͺ¨λ“  ν΄λž˜μŠ€λŠ” Object클래슀의 λͺ¨λ“  속성과 κΈ°λŠ₯을 상속받아 μ‚¬μš©ν•œλ‹€.

 

 

[ μ½”λ“œ : 상속 ]

class Ramen {
    int price = 3000;

    void cooking(){
        System.out.println("라면을 끓인닀.");
    }
}
class TteockRamen extends Ramen{
    void putTteock(){
        System.out.println("라면에 떑을 λ„£λŠ”λ‹€.");
    }
}
class CheeseRamen extends Ramen{
    void putCheese(){
        System.out.println("라면에 치즈λ₯Ό λ„£λŠ”λ‹€.");
    }
}

public class Main {
    public static void main(String[] args) {
        CheeseRamen cheeseRamen = new CheeseRamen();
        cheeseRamen.cooking();
        cheeseRamen.putCheese();
        
        Ramen ramen = new TteockRamen();
        ramen.cooking();
        // ramen.putTteock(); : μ ‘κ·Ό λΆˆκ°€
    }
}

Ramenνƒ€μž…μ˜ ramen λ³€μˆ˜μΈλ° κ΅¬ν˜„μ²΄λŠ” TteockRamen으둜 μƒμ„±ν•œ 객체이닀.

μ‹€μ œ κ°μ²΄λŠ” TteockRamen이여도 μ„ μ–Έ νƒ€μž…μ€ Ramenμ΄λΌμ„œ TteockRamen에 ν•΄λ‹Ήν•˜λŠ” λ‚΄μš©λ¬Όμ„ κ°€μ§€κ³ λŠ” μžˆμ§€λ§Œ Ramen에 μžˆλŠ” κΈ°λŠ₯밖에 μˆ˜ν–‰ν•  수 μ—†λ‹€.

 


 

🌱 μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”©

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

  : μ˜€λ²„λ‘œλ”©μ€ 같은 클래슀 λ‚΄μ—μ„œ 같은 μ΄λ¦„μ˜ μƒμ„±μžλ‚˜ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것이닀.

  : μ€‘λ³΅μ •μ˜

  : 이름은 같아도 λ§€κ°œλ³€μˆ˜μ˜ 갯수 ν˜Ήμ€ νƒ€μž…μ΄ λ‹€λ₯΄λ‹€.

 

μ˜€λ²„λΌμ΄λ”©

  : μ˜€λ²„λΌμ΄λ”©μ€ λΆ€λͺ¨ν΄λž˜μŠ€μ— μžˆλŠ” λ©”μ†Œλ“œλ₯Ό μžμ‹ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μ„ μ–Έν•˜λŠ” 것이닀.

  : μž¬μ •μ˜

  : 이름, λ§€κ°œλ³€μˆ˜μ˜ 갯수, νƒ€μž…μ΄ λͺ¨λ‘ κ°™μ•„μ•Όν•œλ‹€.

  : λ‹€ν˜•μ„±μ˜ 기반이 λ˜λŠ” κ°œλ…μ΄λ‹€.

 

 

[ μ½”λ“œ : μ˜€λ²„λ‘œλ”©κ³Ό μ˜€λ²„λΌμ΄λ”© ]

class Ramen {
    void cooking(){
        System.out.println("라면을 끓인닀.");
    }
    // μ˜€λ²„λ‘œλ”©
    void cooking(int count){
        System.out.println("라면을 "+count+" 개 끓인닀.");
    }
    void pay(){
        System.out.println("가격은 3000원 μž…λ‹ˆλ‹€.");
    }
}
class CheeseRamen extends Ramen{
    void putCheese(){
        System.out.println("라면에 치즈λ₯Ό λ„£λŠ”λ‹€.");
    }
    @Override
    void pay(){ // μ˜€λ²„λΌμ΄λ”©
        System.out.println("가격은 3500원 μž…λ‹ˆλ‹€.");
    }
}

public class Main {
    public static void main(String[] args) {
        CheeseRamen cheeseRamen = new CheeseRamen();
        cheeseRamen.cooking();
        cheeseRamen.cooking(2);
        cheeseRamen.pay();
    }
}

좜λ ₯κ²°κ³Ό

 

 

 

좜처

처음 μ‹œμž‘ν•˜λŠ” JAVA ν”„λ‘œκ·Έλž˜λ°(김좩석 μ €) 

슀파λ₯΄νƒ€ μ½”λ”© 클럽 μžλ°” κ°•μ˜