[Java] 객체지향의 특징

재우·2023년 10월 19일

프로그래머스 스진초 과제를 진행하면서 작성한 내용입니다.



객체지향(OOP)의 4가지 특징


1. Encapsulation(캡슐화)

객체의 속성과 행위를 하나로 묶고, 구현 코드를 외부에 감춰 은닉하는것을 뜻한다.
다시 말하면 데이터와 처리 행위를 묶고, 외부에는 그 행위를 보여주지 않는 것이다.
캡슐화는 객체의 응집도와 독립성을 높여 객체의 모듈화를 지향할 수 있게 도와준다.
모듈화는 모듈 단위의 코드 재사용이 가능하기 때문에, 코드 유지 보수에도 도움을 준다.

  • Public, Private, Protected

  • 데이터를 직접 접근하는 것이 아닌 함수로 접근(get/set)

    class BankAccount {
     private double balance; // private
    
     public void deposit(double amount) {
         if (amount > 0) {
             balance += amount;
         }
     }
    
     public double getBalance() {
         return balance;
     }
    }


2. Abstraction(추상화)

중요하고 필요한 정보 만을 표현하기 위해서, 객체의 공통적인 속성과 행위를 하나로 묶는 것을 의미한다.

  • 추상 클래스, 인터페이스

    abstract class Shape { // 추상 클래스
        abstract void draw();
    }
    
    class Circle extends Shape {
        void draw() {
            System.out.println("원을 그립니다.");
        }
    }


3. Inheritance(상속)

상위 클래스에서 정의된 기능을 가져와 재 사용하거나, 새로운 기능을 추가해 코드의 중복을 줄이고 재 사용성을 늘릴 수 있는 방법을 의미한다. 즉, 부모 클래스의 특성을 자식 클래스에서 재사용하는 개념이다.

class Animal {
    void sound() {
        System.out.println("동물이 소리를 내고 있습니다.");
    }
}

class Dog extends Animal {
    void sound() {
        System.out.println("강아지가 짖습니다.");
    }
}


4. Polymorphism(다형성)

객체가 상속을 통해 기능을 확장, 변경하여 여러 형태의 객체로 재구성 되는 것을 의미한다. Overriding과 Overloading을 통해 다형성을 확보할 수 있다.

  • Overriding : 부모 클래스의 메소드를 자식 클래스에서 재정의하여 사용, 재사용성을 높임.
    상위 클래스에 동일한 이름을 가진 함수가 있을 때, 하위 클래스에서 기능을 재 정의 하는 것을 의미한다.

     class Animal { // Overriding (메서드 재정의)
         void makeSound() {
             System.out.println("동물이 소리를 냅니다.");
         }
     }
    
     class Dog extends Animal {
         @Override
         void makeSound() {
             System.out.println("강아지가 짖습니다.");
         }
     }
    
     class Cat extends Animal {
         @Override
         void makeSound() {
             System.out.println("고양이가 야옹합니다.");
         }
     }
    
     public class Main {
         public static void main(String[] args) {
             Animal myDog = new Dog();
             Animal myCat = new Cat();
    
             myDog.makeSound(); // "강아지가 짖습니다."
             myCat.makeSound(); // "고양이가 야옹합니다."
         }
     }
  • Overloading : 하나의 클래스 안에 같은 이름을 가진 함수를 여러 개 만들 수 있게 해줍니다. 구분을 위해 함수의 인자들은 달라야 한다.

    class Calculator {
       int add(int a, int b) { // Overloading (메서드 오버로딩)
           return a + b;
       }
    
       double add(double a, double b) { // Overloading (메서드 오버로딩)
           return a + b;
       }
    }
    
    public class Main {
       public static void main(String[] args) {
           Calculator calculator = new Calculator();
    
           int result1 = calculator.add(5, 10);        // int 타입 파라미터 사용
           double result2 = calculator.add(3.5, 2.5);  // double 타입 파라미터 사용
    
           System.out.println("Result 1: " + result1); // "Result 1: 15"
           System.out.println("Result 2: " + result2); // "Result 2: 6.0"
       }
    }

0개의 댓글