๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ ๊ณต๋ถ€/Java, Python

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

by syLim___ 2023. 7. 24.
728x90

๊ฐ์ฒด์ง€ํ–ฅ์ด๋ž€,

์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„

๋ช…๋ น์–ด์˜ ๋ชฉ๋ก์œผ๋กœ ๋ณด๋Š” ์‹œ๊ฐ์—์„œ ๋ฒ—์–ด๋‚˜

์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค์˜ ๋ชจ์ž„์œผ๋กœ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ

โœ… ์บก์Аํ™”(Encapsulation)

 - ์„œ๋กœ ์—ฐ๊ด€ ์žˆ๋Š” ์†์„ฑ(data)๋“ค๊ณผ ๊ธฐ๋Šฅ(method)๋“ค์„ ํ•˜๋‚˜์˜ ์บก์А๋กœ ๋ฌถ๊ณ , ์ด ์บก์А์„ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 - ์‹œ์Šคํ…œ ๋‚ด๋ถ€ ๊ตฌํ˜„์˜ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์™ธ๋ถ€๋กœ ๋“œ๋Ÿฌ๋‚ด์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 - ์บก์Аํ™”๋œ ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ์™ธ๋ถ€์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๊ณ , ์™ธ๋ถ€์—์„œ๋Š” ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 - ์บก์Аํ™”์˜ ๋ชฉ์ ์€ ์ •๋ณด ๋ณดํ˜ธ์™€ ์ •๋ณด ์€๋‹‰์ด๋‹ค.

 - ์ผ๋ฐ˜์ ์œผ๋กœ ์บก์Аํ™”๋Š” ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ์ œํ•œ์ž๋ฅผ private์œผ๋กœ ์„ค์ •ํ•จ์œผ๋กœ์จ ๊ตฌํ˜„ํ•œ๋‹ค.

 - ์™ธ๋ถ€์—์„œ๋Š” public ์ ‘๊ทผ์ œํ•œ์ž๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ private ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

๐Ÿฅ ์บก์Аํ™”์˜ ์žฅ์ 

 - ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•˜์—ฌ๋„ ์™ธ๋ถ€ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋œ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค

 - ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ธ๋‹ค.

 - ์ •๋ณด์€๋‹‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ, ๊ฐ ๊ฐ์ฒด๋“ค์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 - ๋ณด์•ˆ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

 

๐Ÿฅ ์˜ˆ์‹œ

 

Student.java

public class Student {

    private String name;
    private int age;
    private int studentId;

    public Student() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getStudentId() {
        return studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

}

 - ํ•™์ƒ์˜ ๊ฐœ์ธ์ •๋ณด๋ฅผ private์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์บก์Аํ™”ํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ ์™ธ๋ถ€์—์„œ๋Š” name, age, studentId์—๋Š” ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ณ , public์œผ๋กœ ์ •์˜๋œ ๋ฉ”์†Œ๋“œ๋“ค์„ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ ๋ฐ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 


 

โœ… ์ถ”์ƒํ™”(Abstraction)

 - ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ ๊ทผ๋ณธ์ ์ธ ๋ถ€๋ถ„์„ ์ถ”์ถœํ•˜๊ณ , ์ถ”์ถœํ•œ ๋ถ€๋ถ„๋“ค์„ ๊ฐ„๋‹จํ•˜๊ณ  ์ •ํ™•ํ•œ ์–ธ์–ด๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ

 - ์‰ฝ๊ฒŒ ๋งํ•ด, ๊ตฌ์ฒด์ ์ธ ์„ธ๋ถ€์‚ฌํ•ญ์€ ๋ฌด์‹œํ•˜๊ณ  ํ•ต์‹ฌ์ ์ธ ํŠน์ง•๋“ค์„ ๊ฐ•์กฐํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ.

 

๐Ÿฅ ์ถ”์ƒํ™”์˜ ์žฅ์ 

 - ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹์„ ์ˆจ๊ธฐ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ๋…ธ์ถœ์‹œํ‚ค๋ฏ€๋กœ, ๊ฐ์ฒด ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ๊ณผ ๋ณต์žก์„ฑ์ด ๊ฐ์†Œํ•œ๋‹ค.

 - ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค.

 - ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 - ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

 - ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

 

๐Ÿฅ ์˜ˆ์‹œ

 

Animal.java

public interface Animal {
    public void say();
    public void walk();
}

 

Dog.java

public class Dog implements Animal{

    @Override
    public void say() {
        System.out.println("๋ฉ๋ฉ");
    }

    @Override
    public void walk() {
        System.out.println("ํ† ๋„๋„๋„๋„");
    }
}

 

Cat.java

public class Cat implements Animal {

    @Override
    public void say() {
        System.out.println("์•ผ์˜น");
    }

    @Override
    public void walk() {
        System.out.println("์šฐ๋‹ค๋‹ค๋‹ค๋‹ค");
    }
}

 


 

โœ… ๋‹คํ˜•์„ฑ(Polymorphism)

 - ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ.

 - ํ•˜๋‚˜์˜ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž๋ฃŒํ˜•์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ.

 - ๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด์„œ ํ•˜๋‚˜์˜ ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 - ์ฆ‰, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์ž์‹ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿฅ ๋‹คํ˜•์„ฑ์˜ ์žฅ์ 

 - ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 - ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

 - ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค.

 

๐Ÿฅ  ์˜ˆ์‹œ

 

Car.java

public class Car {

    public void drive(){
        System.out.println("์šด์ „์ค‘...");
    }
    public void stop(){
        System.out.println("์ •์ง€!!!");
    }

}

 

Ambulance.java

public class Ambulance extends Car{
    public void siren(){
        System.out.println("์‚์šฉ์‚์šฉ์‚์šฉ");
    }
}

 

FireTruck.java

public class FireTruck extends Car {
    public void water(){
        System.out.println("์ดค์•„์•„์•…๐Ÿ’ฆ"); // ๋ฌผ๋ฟŒ๋ฆฌ๋Š” ์†Œ๋ฆฌ์ž„
    }
}

 

 - ๊ฐ์ฒด ํƒ€์ž…์„ Ambulance, FireTruck ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•˜์—ฌ๋„ Car ํƒ€์ž…์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜๋“ค์„ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 


โœ… ์ƒ์†์„ฑ(Inheritance)

 - ๊ธฐ์กด์˜ ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅ๋œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ

 - ํด๋ž˜์Šค๋“ค์€ ์ƒ์†์„ ํ†ตํ•ด ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๋ ๊ฒŒ ๋œ๋‹ค

 - ์ƒ์†ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค(๋˜๋Š” superclass), ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋ฅผ ์ž์‹ ํด๋ž˜์Šค(๋˜๋Š” subclass)๋ผ๊ณ  ํ•œ๋‹ค.

 - ์ž์‹ํด๋ž˜์Šค์—์„œ๋Š” ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋“ค์„ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ž์‹ํด๋ž˜์Šค์—์„œ ์ƒˆ๋กœ ์ •์˜ํ•  ๋ฉค๋ฒ„๋งŒ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿฅ ์ƒ์†์˜ ์žฅ์ 

 - ์ฝ”๋“œ์˜ ์ค‘๋ณต์ด ๊ฐ์†Œํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค.

 - ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

 - ์ฝ”๋“œ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•ด์ง„๋‹ค.

 - ์œ ์—ฐํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค

 

๐Ÿฅ ์˜ˆ์‹œ

 

Person.java

public class Person {
    String name;
    int age;

    public Person(){}

    public void showInfo(){
        System.out.println("์ด๋ฆ„: " + name + ", ๋‚˜์ด: " + age);
    }
}

 

Student.java

public class Student extends Person {

    int studentId;

    public Student() {}

    public void showStudentInfo(){
        System.out.println("์ด๋ฆ„: " + name + ", ๋‚˜์ด: " + age + ", ํ•™๋ฒˆ: " + studentId);
    }

}

 

728x90

'๊ฐœ์ธ ๊ณต๋ถ€ > Java, Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] Reflection  (0) 2023.11.17
[Java] equals(), hashCode()  (0) 2023.10.25
[Java] BlockingQueue  (0) 2023.10.18
[Java] Java TCP socket programming  (0) 2023.09.19
[Java] ์ž๋ฐ” ๋กœ๊น…(Logging)  (0) 2023.09.06