[Java] 객체지향의 특징

재우·2023년 10월 19일
0
post-custom-banner

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



객체지향(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"
       }
    }

post-custom-banner

0개의 댓글