OOP

이재연·2021년 5월 17일

OOP란?

OOP(Object Oriented Programming)란 객체 지향 프로그래밍이라는 의미이며, 개발 패러다임 중 하나이다.

객체는 데이터와 기능의 묶음이다. OOP는 다양한 객체들간의 상호작용으로 원하는 기능을 구현하는 개발 방식이다. 객체라는 개념을 통해 재사용 할 수 있고, 이해하기 쉬운 코드를 지향한다. 비슷한 기능을 가진 기능과 데이터를 하나의 객체로 관리하기 때문에 재사용이 용이하며, 실제 세계의 개념과 비슷해서 코드를 이해하기 쉽다.

때문에 OOP에서는 객체를 잘 설계하는 것이 중요하다.

잘 설계된 객체는 높은 응집도낮은 결합도를 갖는다. 객체의 내부 구현이 달라지더라도 다른 객체에게 영향을 주지 않기 때문에 변화에 유연하며, 유지보수에 유리하다.

응집도(Cohesion)
한 객체의 데이터와 기능이 단일의 목적을 위해 수행하는지에 대한 정도

결합도(Coupling)
객체의 수행을 위해서 다른 객체에게 의존하는지에 대한 정도

잘 설계된 객체는 아래의 특징을 갖는다.

1. 캡슐화
비슷한 기능과 데이터는 하나의 객체에서 관리한다. 한 객체는 공통된 한 가지 기능을 담당하며, 기능을 수행하는 구체적인 정보는 외부로 유출하지 않는다. 자바에서는 접근제어자 등을 통해 캡슐화를 지원한다.

2. 다형성
상황에 따라 다른 역할을 수행할 수 있다. 조건이 바뀌어도 같은 기능이라면 해당 객체가 기능을 수행한다. 자바에서는 오버라이딩, 오버로딩 등을 통해 다형성을 지원한다.

3. 상속
객체간 계층적 관계를 갖고 있다. 상위 객체는 객체의 특성을 추상화하여 가지고 있다. 하위 객체는 추상화 된 상위 객체를 상속 받으며, 상위 객체의 특성을 갖는다. 자바에서는 확장, 상속 등을 통해 상속을 지원한다.

SOLID 원칙

OOP를 적용하려고 해도 쉽지 않을 것이다. SOLID는 로버트 마틴이 명명한 OOP를 위한 5가지 원칙이다. OOP를 적용하기 위해 고려해야하는 설계 지침이라고 할 수 있다.

  • 단일 책임 원칙 SRP(Single Responsibility Principle)
    한 클래스는 하나의 책임만 가져야 한다.

  • 개방 폐쇄 원칙 OCP (Open Closed Principle)
    확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

  • 리스코프 치환 원칙 LSP(Liskov Substitution Principle)
    하위 타입의 객체는 상위 타입의 객체로 치환 될 수 있어야 한다.

  • 인터페이스 분리 원칙 ISP(Interface Segregation Principle)
    필요한 인터페이스만 사용해야 한다.

  • 의존관계 역전 원칙 DIP(Dependency Inversion Principle)
    상위 객체은 하위 객체에게 의존해서는 안된다. 추상화에 의존해야지, 구체화에 의존하면 안된다.

참조

https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)
https://blog.martinwork.co.kr/theory/2017/12/10/oop-solid-principle.html

0개의 댓글