클래스라는 형태로 데이터와 메소드를 캡슐화 합니다.
접근제어자를 통해서 클래스 외부에서 데이터에 접근하는것을 막을 수 있습니다.
접근이 금지된 데이터는 메소드를 통해서 접근합니다.
이를 통해서 데이터의 무분별한 변경을 막을 수 있고, 메소드를 통하기 때문에 필요하다면 메소드에서 필요한 검증처리를 추가할 수 있습니다.
또한 캡슐화를 했기 때문에 데이터와 메소드가 한곳에 모여있고 그로인해 코드의 유지보수가 편리합니다..
상속은 상위 클래스의 특성을 하위 클래스가 물려받는 개념입니다.
상속을 하지 않는다면 비슷한 목적을 가진 클래스들은 중복된 코드를 작성하여 정의 됩니다.
이는 유지보수가 불편해지고, 클래스 간의 관계를 이해하기 어렵습니다.
상속을 사용하면 코드의 중복을 줄일 수 있고, 새로운 클래스를 생성할 때에도 간편합니다.
간편하지만 상속의 남용은 오히려 복잡성을 증가시킬 수 있습니다.
상속을 과도하게 사용하면 부적절한 상속 관계가 형성될수도 있기 때문에 조심해서 잘 설계해야 합니다.
또한 상속을 통해서 클래스간 관계를 표현하기가 명확해집니다.
다형성이란 같은 이름의 메소드가 여러 객체에서 다른 동작을 수행할 수 있게 만듭니다.
오버라이딩을 통해서 간단하게 부모클래스의 메소드를 재사용, 재정의를 할 수 있습니다.
이를통해 어떤 유형의 객체가 메소드를 호출하냐에 따라 다양한 동작이 나올 수 있습니다.
이는 확장에 용이하며 유연성을 높일 수 있습니다.
주의할 점은 객체의 타입이나 메소드의 타입들을 정확히 알고 사용해야 오류를 방지할 수 있습니다.
추상화란 복잡한 시스템을 간단한 개념으로 표현한 것 입니다.
추상화를 통해 시스템을 이해하기 쉬워지고 추상 클래스나 인터페이스를 정의할 수 있습니다.
추상 클래스나 인터페이스를 이용하여 코드의 재사용성을 높이고, 유지보수를 용이하게 합니다.
추상화를 하지 않는다면 시스템의 복잡성이 증가하고 유지보수에 많은 비용이 들게 됩니다.
또한 추상 클래스나 인터페이스를 통해 재사용이 불가능하므로 코드의 중복이 늘어나게 됩니다.
OOP의 특징들을 알아보니 각 특징들이 서로 연관되어 있고,
유지보수와 재사용성을 강조하고 있다고 생각이 듭니다.
지금은 코드를 작성할 때 항상 OOP를 생각하며 좋은 설계인지 고민하진 못하겠지만,
간간히 생각하고 또한 차츰차츰 생각하는 빈도수를 높여
최종으로는 항시 좋은 설계인가를 고민하는 개발자가 되겠습니다.