객체지향 프로그래밍(OOP, Object-Oriented Programming)은 객체들이 상호작용하며 객체 내부의 메서드를 활용하는 방식을 뜻한다. 객체 지향을 잘 하기 위해서는 설계가 중요하다.

객체지향 프로그래밍의 특징 4가지


추캡상다

추캡상다… 추성훈 캡모자 산다….

추상화, 캡슐화, 상속성, 다형성

추상화

추상화(abstraction)는 구체적인 개념이나 기능을 모두 드러내지 않고 핵심적인 것만을 간추려내는 것을 뜻한다.

예를 들어 “화장실 불 켜고 들어가 칫솔에 치약을 묻혀서 윗니 아랫니 골고루 닦아낸 후 물로 행구어 냈다”를 “양치했다”로 추상화 할 수 있다. (적절한지는 모르겠다..ㅎ)

캡슐화

캡슐화(encapsulation)는 객체의 속성과 메서드를 묶어서 외부에는 필요한 일부를 제외하고 드러내지 않는 속성을 의미한다.

추상화와 캡슐화는 비슷한 목적을 가지고 있어서 함께 사용되는 경우가 많다.

상속성

상속성(inheritance)은 상위 클래스의 특성을 하위 클래스가 재사용하거나 추가, 확장하는 것을 의미한다.

코드 재사용, 유지 보수에 이점을 주며 객체지향 설계 등을 할 때 중요한 특징이다.

다형성

다형성(polymorphism)은 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것을 의미한다. 대표적으로 오버로딩과 오버라이드가 있다.

오버로딩

오버로딩(overloading)은 같은 이름을 가진 메서드를 여러 개 두는 것을 의미한다. 하지만 반드시 메서드의 타입이나, 매개변수 타입, 개수 등을 다르게 해야한다. 그렇지 않으면 컴파일러가 어떤 메서드를 선택할 지 모호하기 때문에 에러를 발생시킨다.

오버라이딩

오버라이딩(overriding)은 상위 클래스에서 상속받은 메서드를 하위클래스에서 재정의하는 것을 의미한다.

설계 원칙 (SOLID)


솔리드

객체지향 프로그래밍은 SOLID 원칙을 잘 지켜서 설계해야 한다. SOLID는 5개의 원칙의 맨 앞 알파벳을 딴 것이다.

단일 책임 원칙

단일 책임 원칙(SRP, Single Responsiblity Principle)은 모든 클래스는 모두 하나의 책임만을 가져야 한다는 것이다.

개방-폐쇄 원칙

개방-폐쇄 원칙(OCP, Open Closed Principle)은 확장에는 열려 있어야 하고, 수정에는 닫혀있어야 한다는 원칙이다.

즉, 요구 사항에 맞춰 동작을 확장할 수 있어야 하지만 수정이 생기면 관련된 모든 부분에서 수정이 일어나야 하므로 수정은 쉽지 않아야 한다는 뜻이다.

리스코프 치환 원칙

리스코프 치환 원칙(LSP, Liskov Substitution Principle)에서 리스코프는 사람 이름이다.

클래스는 상속이 되고, 계층 관계가 만들어지는데 부모 객체에 자식 객체를 넣어도 시스템에 문제가 없어야 한다는 원칙이다. 자식 클래스는 부모 클래스의 기능을 상속받았기 때문에 부모 클래스의 기능을 수행할 수 있어야 한다는 것이다.

인터페이스 분리 원칙

인터페이스 분리 원칙(ISP, Interface Segregation Principle)은 여러 메서드 관련 없는 메서드를 가지는 인터페이스가 아니라 관련된 메서드를 가진 여러 개의 인터페이스로 분리해야 한다는 의미다. 단일 책임 원칙과 비슷한 목적을 가진다.

의존관계 역전의 원칙

의존 역전 원칙(DIP, Dependency Inversion Principle)은 변하기 쉬운 구체적인 인터페이스나 클래스보다 추상화 된 것을 의존해야 한다는 원칙이다.