개발공간/HW

❓객체 지향의 특징

로지네 2023. 3. 28. 10:27

1. 캡슐화 

- 하나의 묶음으로 캡슐화 하는 것

- 객체 내부의 데이터를 외부에서 접근하지 못하도록 제한하여 유지보수성을 높이는 것

 

public class Person {
    private String name;
    private int age;

    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;
    }
}

Person 클래스

name과 age 변수가 private으로 선언된 Person 클래스

따라서 외부에서 직접 접근 불가!

 

2. 추상화

- 공통된 속성들을 추출해 인터페이스로 정의하는 것

public abstract class Animal {
    public abstract void move();
}

public class Puppy extends Animal {
    @Override
    public void move() {
        System.out.println("네 발로 걸어요. 멍!");
    }
}

public class Bird extends Animal {
    @Override
    public void move() {
        System.out.println("훨훨 날아다녀요!");
    }
}

Animal 클래스는 move() 메소드를 추상 메소드로 선언

Puppy, Bird 클래스는 Animal 클래스를 상속받아 move() 메소드를 구현

 

 

3. 다형성

- 같은 이름의 메소드나 클래스가 여러개 존재, but ! 서로 다른 기능을 수행하는 것

- 이름 그대로 다양한 형태

- 하나의 인터페이스나 클래스를 여러 방법으로 구현하거나 사용하는 것

 

public class Animal {
    public void makeSound() {
        System.out.println("동물이 내는 소리!");
    }
}

public class Puppy extends Animal {
    @Override
    public void makeSound() {
        System.out.println("멍!");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("야옹!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Animal();
        Animal animal2 = new Puppy();
        Animal animal3 = new Cat();

        animal1.makeSound(); // "동물이 내는 소리!" 출력
        animal2.makeSound(); // "멍!" 출력
        animal3.makeSound(); // "야옹!" 출력
    }
}

 

4. 상속

- 부모 자식간의 관계, 물려받기

- 이미 작성된 클래스를 기반으로 새 클래스 작성 가능

- 자식 클래스는 부모 클래스에서 정의된 필드와 메소드를 직접 선언하지 않아도 사용 가능

- extends

 

public class Animal {
    public void move() {
        System.out.println("동물이 움직여요!");
    }
}

public class Puppy extends Animal {
    public void bark() {
        System.out.println("멍!");
    }
}

public class Cat extends Animal {
    public void meow() {
        System.out.println("야옹!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Puppy puppy = new Puppy();
        Cat cat = new Cat();

        animal.move(); 
        puppy.move(); 
        puppy.bark();
        cat.move(); 
        cat.meow(); 
    }
}

 

검색하고 정리한 결과? 💙

 

  • 캡슐화(encapsulation): 객체의 필드와 메소드를 외부에서 직접 접근할 수 없도록 보호하는 것으로, 정보은닉(information hiding)의 개념을 포함

 

  • 추상화(abstraction): 객체들이 가지는 공통적인 특징을 추출해서 모델화하는 것으로, 객체 지향 프로그래밍에서 필수적인 개념 중 하나

 

  • 다형성(polymorphism): 같은 타입 또는 같은 메소드를 호출하더라도 다양한 동작을 수행할 수 있는 것으로, 객체 지향 프로그래밍의 중요한 특징 중 하나

 

  • 상속(inheritance): 이미 작성된 클래스를 기반으로 새로운 클래스를 작성할 수 있는 것으로, 코드의 재사용성을 높일 수 있음

'개발공간 > HW' 카테고리의 다른 글

❓Spring에서 DI, IoC란 무엇일까?  (0) 2023.04.04
🔎 지그재그(ZigZag)가 가진 기능 분석하기  (0) 2023.04.03
❓@Annotation 어노테이션  (0) 2023.03.29
❓@Override 오버라이딩  (0) 2023.03.29
❓인터페이스란?  (0) 2023.03.28