본문 바로가기
Java

객체지향 프로그래밍 - 객체지향 기법

by KongJiHoon 2024. 5. 30.

캡슐화(Encapsulation) 이란?

  • 서로 연관된 데이터와 함수를 함계 묶어 외부와 경계를 만들고 필요한 인터페이스만을 밖으로 드러내는 기법
  • 결합도가 낮아지고 재사용이 용이하다.
  • 인터페이스 단순화
  • 데이터의 무결성 보호

예시(캡슐화)

public class Person {
    // private 접근 제어자로 필드 보호
    private String name;
    private int age;

    // public 메서드로 필드 접근
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

 

상속(Inheritance) 이란?

  • 상위클래스의 속성과 메서드를 하위 클래스에서 재정의 없이 물려받아 사용하는 기법
  • 코드의 재사용성을 높이고, 계층 구조를 통해 논리적인 모델 구성

예시(상속)

// 부모 클래스
public class Animal {
    public void eat() {
        System.out.println("This animal is eating.");
    }
}

// 자식 클래스
public class Dog extends Animal {
    public void bark() {
        System.out.println("The dog is barking.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.eat(); // 부모 클래스의 메서드 사용
        myDog.bark(); // 자식 클래스의 메서드 사용
    }
}

 

다형성(Polymorphism) 이란?

  • 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
  • 동일한 인터페이스를 통해 서로 다른 구현을 사용.
    • 오버로딩(Overloading) : 매개변수의 유형과 개수를 다르게 하여 같은 이름의 메서드를 여러 개 가지는 기법
    • 오버라이딩(Overriding) : 상위 클래스에서 정의 한 일반 메서드의 구현을 하위 클래스에서 무시하고 재정의 할 수 있는 기법

예시(다형성)

// 메서드 오버로딩
public class MathUtils {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

// 메서드 오버라이딩
public class Animal {
    public void makeSound() {
        System.out.println("Some generic animal sound");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog();
        myAnimal.makeSound(); // "Bark" 출력
    }
}

 

추상화(Abstraction) 란?

  • 공통 성질을 추출하여 추상 클래스를 설정하는 기법
  • 추상 클래스와 인터페이스를 통해 구현.

예시(추상화)

// 추상 클래스
public abstract class Animal {
    public abstract void makeSound(); // 추상 메서드
    public void sleep() {
        System.out.println("This animal is sleeping.");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Bark");
    }
}

// 인터페이스
public interface Movable {
    void move();
}

public class Car implements Movable {
    @Override
    public void move() {
        System.out.println("The car is moving.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // "Bark" 출력
        myDog.sleep(); // "This animal is sleeping." 출력

        Movable myCar = new Car();
        myCar.move(); // "The car is moving." 출력
    }
}

 

정보은닉(Information hiding) 이란?

  • 캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.
  • 메서드를 숨기고, 인터페이스를 통해서만 접근이 가능하도록 함.
  • 캡슐화의 중요한 개념