객체 지향의 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("둘리랑 놀아주기"); } }