[Java] 객체 지향의 4가지 특징

객체 지향의 4가지 특징

  • 캡슐화

    • 객체의 필드와 메서드를 은닉하는 것

    • 불필요한 접근을 방지할 수 있다.

    • 데이터의 잘못된 변경을 방지할 수 있다.

      public class Person {
         private String name;
         private int age;
      
         public Person(String name, int age) {
             if(name != null) {
                 this.name = name;
             }
             if(age >= 0) {
                 this.age = age;
             }
         }
      
         public void eat() {
             System.out.prinlt("음식을 먹다.");
         }
         public void sleep() {
             System.out.prinln("잠을 자다.");
         }
      }
  • 추상화

    • 공통적인 것을 뽑아낸 것

    • ex) 소리를 내다(추상적)

      • 꽥꽥 소리를 내다(구체적)
      • 멍멍 소리를 내다(구체적)
      public interface Animal {
         public void sound();  
      }
      public class Duck implements Animal {
         @Override
         public void sound() {
             System.out.println("꽥꽥!!");
         }
      } 
      public class Dog implements Animal {
         @Override
         public void sound() {
             System.out.prinln("멍멍!!");
         }
      }
  • 다형성

    • 다양한 형태를 가지는 성질

    • 기존의 코드 변경 없이 다양한 객체를 만들 수 있다.

      public class Example {
         Animal animal = new Duck();
         animal.sound();
      
         animal = new Dog();
         animal.sound();
      }
  • 상속성

    • 부모를 상속받아 자식 객체에서도 사용할 수 있는 성질

    • 반복되는 코드를 줄일 수 있다.

    • 유지 보수가 쉬워진다.

      public abstract class Person {
         private String name;
         private int age;
      
         public void eat() {
             System.out.prinlt("음식을 먹다.");
         }
         public void sleep() {
             System.out.prinln("잠을 자다.");
         }
         public void like();
      }
      public class Honggildong extends Person {
         @Override
         public void like() {
             System.out.prinln("동에 번쩍 서에 번쩍 다니기");
         }
      }
      public class Gogildong extends Person {
         @Override
         public void like() {
             System.out.prinln("둘리랑 놀아주기");
         }
      }