Object Oriented Programing OOP
객체가 중심이 되는 프로그래밍 방법이다.
"누가" "무엇을" 하는 것에 초점이 맞춰진다.
각각의 객체마다 고유한 역할이 부여된다.
객체들의 공통점을 추출한다.
클래스를 정의하는 것을 추상화 라고 볼 수 있다.
추상화를 해 놓을 경우, 공통 부분은 그대로 사용을 하고, 새롭게 추가되는 부분만을 수정해서 사용하면 된다.
객체의 속성과 행위를 하나로 묶는 것이다.
Java에서는 접근제어자를 통해 객체를 캡슐화, 은닉화 시킨다.
하나의 클래스가 가진 속성과 행위를 다른 클래스가 물려 받는 것이다.
이미 작성된 클래스를 상속받아 새로운 클래스를 만들기도 한다.
코드의 길이가 줄어든다.
자료와 메서드의 사용과 추가가 자유롭다.
상위 클래스의 변경이 어려워진다.
상속을 잘못 사용할 가능성이 존재한다.
하나의 객체가 여러개의 속성이나 기능을 가지게 하는 것이다.
대표적으로 오버로딩과 오버라이딩이 존재한다.
같은 이름의 메서드가 여러가지의 매개 변수를 가지는 것이다.
상위 클래스의 메서드를 하위 클래스에서 재정의 하는 것이다.
객체지향 프로그래밍에서 지켜야 하는 5대 원칙이다.
5대 원칙의 앞글자를 따와 SOLID라고 한다.
이를 철저히 지킬 경우, 시간이 경과해도 유지보수와 확장이 쉬워진다.
클래스를 변경하는 이유는 오직 하나여야 한다는 원칙이다.
SRP를 잘 지키면, 변경이 필요한 경우 수정할 대상이 명확해진다.
확장에는 열려있고, 수정에는 닫혀있게 만들어야 한다는 원칙이다.
기존 코드를 변경하지 않고, 기능이 추가 될 수 있도록 설계가 되어야 한다.
자식 클래스는 언제나 부모 클래스를 대체 가능해야 한다는 원칙이다.
자식 클래스는 부모 클래스의 책임을 무시하지 않고, 재정의 하지 않고, 확장만을 수행해야 한다.
클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙이다.
클라이언트의 목적에 적합한 인터페이스만을 제공해야 한다.
의존 관계를 맺을 때, 자주 변화하는 것 보다는 변화가 없는 것에 의존해야 한다는 원칙이다.
구체적인 클래스 보다는, 추상 클래스와 관계를 맺어야 한다.